Linux-i3c Archive on lore.kernel.org
 help / color / Atom feed
From: Wolfram Sang <wsa@the-dreams.de>
To: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS"
	<devicetree@vger.kernel.org>,
	"Kieran Bingham" <kieran@ksquared.org.uk>,
	"Luca Ceresoli" <luca@lucaceresoli.net>,
	"Linux Kernel Mailing List" <linux-kernel@vger.kernel.org>,
	"Jacopo Mondi" <jacopo@jmondi.org>,
	"Vladimir Zapolskiy" <vz@mleia.com>,
	Linux-Renesas <linux-renesas-soc@vger.kernel.org>,
	"Wolfram Sang" <wsa+renesas@sang-engineering.com>,
	"Linux I2C" <linux-i2c@vger.kernel.org>,
	"Niklas Söderlund" <niklas.soderlund@ragnatech.se>,
	linux-i3c@lists.infradead.org,
	"Laurent Pinchart" <laurent.pinchart@ideasonboard.com>
Subject: Re: [RFC PATCH 7/7] i2c: core: hand over reserved devices when requesting ancillary addresses
Date: Fri, 13 Mar 2020 13:42:14 +0100
Message-ID: <20200313124214.GA1299@ninjato> (raw)
In-Reply-To: <CAMuHMdV-dfjukuSKiFg4vb4Ntn+XWU0XwHPxyoaWs1vtQVg4cw@mail.gmail.com>

[-- Attachment #1.1: Type: text/plain, Size: 2287 bytes --]


> > @@ -984,7 +986,21 @@ struct i2c_client *i2c_new_ancillary_device(struct i2c_client *client,
> >                         of_property_read_u32_index(np, "reg", i, &addr);
> >         }
> >
> > -       dev_dbg(&client->adapter->dev, "Address for %s : 0x%x\n", name, addr);
> > +       dev_info(adapter_dev, "Address for %s : 0x%x\n", name, addr);
> > +
> > +       /* No need to scan muxes, siblings must sit on the same adapter */
> > +       reserved_dev = device_find_child(adapter_dev, &addr, __i2c_check_addr_busy);
> > +       reserved_client = i2c_verify_client(reserved_dev);
> > +
> > +       if (reserved_client) {
> > +               if (reserved_client->dev.of_node != np ||
> > +                   strcmp(reserved_client->name, I2C_RESERVED_DRV_NAME) != 0)
> > +                       return ERR_PTR(-EBUSY);
> 
> Missing put_device(reserved_dev).

Actually, I think the code could even be like this:

	struct i2c_client *reserved_client = NULL;

	...

	reserved_dev = device_find_child(adapter_dev, &addr, __i2c_check_addr_busy);
	if (reserved_dev) {
		reserved_np = reserved_dev->of_node;
		reserved_client = i2c_verify_client(reserved_dev);
		put_device(reserved_dev);
	}

	if (reserved_client) {
		if (reserved_np != np ||
		    strcmp(reserved_client->name, I2C_RESERVED_DRV_NAME) != 0)
			return ERR_PTR(-EBUSY);

		strlcpy(reserved_client->name, I2C_DUMMY_DRV_NAME, sizeof(client->name));
		return reserved_client;
	}

	return i2c_new_dummy_device(client->adapter, addr);

We put the device early - as soon we don't access the struct anymore. I
think we don't need the refcnt any further because what we are doing
here is to hand over the initial refcnt from the core to the requesting
driver. We turn the device from "reserved" (internally managed) to
"dummy" (managed by the driver). So, I think the code is okay regarding
the struct device. I will have a second look when it comes to
concurrency problems regarding the struct i2c_client, though.

> (perhaps i2c_verify_client() checking dev was not such a great idea, as
>  callers need to act on dev && !verified anyway?)

Yeah, since I refactored the ACPI code as well, patch 1 from this series
can probably go.

Thanks again for your review, Geert!


[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

[-- Attachment #2: Type: text/plain, Size: 155 bytes --]

_______________________________________________
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c

  parent reply index

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-20 17:23 [RFC PATCH 0/7] i2c: of: reserve unknown and " Wolfram Sang
2020-02-20 17:23 ` [RFC PATCH 1/7] i2c: add sanity check for parameter of i2c_verify_client() Wolfram Sang
2020-02-21  9:36   ` Geert Uytterhoeven
2020-02-20 17:23 ` [RFC PATCH 2/7] i2c: use DEFINE for the dummy driver name Wolfram Sang
2020-02-21  9:38   ` Geert Uytterhoeven
2020-02-20 17:23 ` [RFC PATCH 3/7] i2c: allow DT nodes without 'compatible' Wolfram Sang
2020-02-21  9:45   ` Geert Uytterhoeven
2020-02-21  9:48     ` Geert Uytterhoeven
2020-02-23 23:11     ` Luca Ceresoli
2020-03-12 11:19       ` Wolfram Sang
2020-03-12 11:44         ` Alexandre Belloni
2020-02-26 16:30   ` Rob Herring
2020-02-20 17:24 ` [RFC PATCH 4/7] i2c: of: remove superfluous parameter from exported function Wolfram Sang
2020-02-21  9:50   ` Geert Uytterhoeven
2020-02-24  8:12   ` Luca Ceresoli
2020-02-20 17:24 ` [RFC PATCH 5/7] i2c: of: error message unification Wolfram Sang
2020-02-21  9:54   ` Geert Uytterhoeven
2020-02-20 17:24 ` [RFC PATCH 6/7] i2c: of: mark a whole array of regs as reserved Wolfram Sang
2020-02-21 10:09   ` Geert Uytterhoeven
2020-03-12 11:21     ` Wolfram Sang
2020-03-18 14:33     ` Wolfram Sang
2020-02-28 12:11   ` Luca Ceresoli
2020-02-20 17:24 ` [RFC PATCH 7/7] i2c: core: hand over reserved devices when requesting ancillary addresses Wolfram Sang
2020-02-21 10:13   ` Geert Uytterhoeven
2020-02-28 12:11     ` Luca Ceresoli
2020-03-12 11:30       ` Wolfram Sang
2020-03-12 11:21     ` Wolfram Sang
2020-03-13 12:42     ` Wolfram Sang [this message]
2020-02-21 10:15 ` [RFC PATCH 0/7] i2c: of: reserve unknown and " Geert Uytterhoeven

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200313124214.GA1299@ninjato \
    --to=wsa@the-dreams.de \
    --cc=devicetree@vger.kernel.org \
    --cc=geert@linux-m68k.org \
    --cc=jacopo@jmondi.org \
    --cc=kieran@ksquared.org.uk \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-i3c@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=luca@lucaceresoli.net \
    --cc=niklas.soderlund@ragnatech.se \
    --cc=vz@mleia.com \
    --cc=wsa+renesas@sang-engineering.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Linux-i3c Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-i3c/0 linux-i3c/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-i3c linux-i3c/ https://lore.kernel.org/linux-i3c \
		linux-i3c@lists.infradead.org
	public-inbox-index linux-i3c

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.infradead.lists.linux-i3c


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git