All of lore.kernel.org
 help / color / mirror / Atom feed
From: Brian Norris <computersforpeace@gmail.com>
To: linux-arm-kernel@lists.infradead.org
Subject: device_node lifetime (was: Re: [PATCH 1/7] phy: brcmstb-sata: add missing of_node_put)
Date: Wed, 18 Nov 2015 19:05:00 +0000	[thread overview]
Message-ID: <20151118190500.GE140057@google.com> (raw)
In-Reply-To: <alpine.DEB.2.02.1511172327030.2121@localhost6.localdomain6>

(changing subject, add devicetree@vger.kernel.org)

On Tue, Nov 17, 2015 at 11:33:25PM +0100, Julia Lawall wrote:
> On Tue, 17 Nov 2015, Brian Norris wrote:
> > On Tue, Nov 17, 2015 at 06:48:39PM +0100, Julia Lawall wrote:
> > > Is this something that should be checked for elsewhere?
> > 
> > I expect the same sort of problem shows up plenty of other places. I
> > don't think many people use CONFIG_OF_DYNAMIC, so the effects of these
> > failures probably aren't felt by many.
> 
> I tried the following semantic patch:
> 
> @@
> struct device_node *e;
> expression e1;
> identifier fld;
> @@
> 
>  ... when != of_node_get(...)
> *(<+...e1->fld...+>) = e
>  ... when != of_node_get(...)
>  return e1;
> 
> basically, this says that a structure field is initilized to a device node 
> value, the structure is returned by the containing function, and the 
> containing function contains no of_node_get at all.  Certainly this is 
> quite constrained, but it does produce a number of examples.
> 
> I looked at a few of them:
> 
> drivers/clk/ingenic/cgu.c, ingenic_cgu_new
> clk/pistachio/clk.c, pistachio_clk_alloc_provider

It looks like the clock core (drivers/clk/clk.c) initially grabs the clk
provider node in of_clk_init(), then drops it after it's initialized,
but most of these providers use of_clk_add_provider(), which seems to
manage the device_node lifetime for the user. So I think these are OK.

> drivers/mfd/syscon.c, of_syscon_register

This one looks potentially suspect. Syscon nodes aren't usually directly
managed by a single driver, and the device_node pointer is used for
lookups later...so I think it should keep a kref, and it doesn't.

> drivers/of/pdt.c, function of_pdt_create_node

Not real sure about this one.

> Any idea whether these need of_node_get?  In all cases the device node 
> value comes in as a parameter.

I'm really not an expert on this stuff. I just saw a potential problem
that I happen to be looking at in other subsystems, and I wanted to know
what others thought. I think this discussion should include the DT folks
and the subsystems in question. For one, I'm as interested as anyone in
getting this todo clarified:

Documentation/devicetree/todo.txt
- Document node lifecycle for CONFIG_OF_DYNAMIC

Regards,
Brian

WARNING: multiple messages have this Message-ID (diff)
From: computersforpeace@gmail.com (Brian Norris)
To: linux-arm-kernel@lists.infradead.org
Subject: device_node lifetime (was: Re: [PATCH 1/7] phy: brcmstb-sata: add missing of_node_put)
Date: Wed, 18 Nov 2015 11:05:00 -0800	[thread overview]
Message-ID: <20151118190500.GE140057@google.com> (raw)
In-Reply-To: <alpine.DEB.2.02.1511172327030.2121@localhost6.localdomain6>

(changing subject, add devicetree at vger.kernel.org)

On Tue, Nov 17, 2015 at 11:33:25PM +0100, Julia Lawall wrote:
> On Tue, 17 Nov 2015, Brian Norris wrote:
> > On Tue, Nov 17, 2015 at 06:48:39PM +0100, Julia Lawall wrote:
> > > Is this something that should be checked for elsewhere?
> > 
> > I expect the same sort of problem shows up plenty of other places. I
> > don't think many people use CONFIG_OF_DYNAMIC, so the effects of these
> > failures probably aren't felt by many.
> 
> I tried the following semantic patch:
> 
> @@
> struct device_node *e;
> expression e1;
> identifier fld;
> @@
> 
>  ... when != of_node_get(...)
> *(<+...e1->fld...+>) = e
>  ... when != of_node_get(...)
>  return e1;
> 
> basically, this says that a structure field is initilized to a device node 
> value, the structure is returned by the containing function, and the 
> containing function contains no of_node_get at all.  Certainly this is 
> quite constrained, but it does produce a number of examples.
> 
> I looked at a few of them:
> 
> drivers/clk/ingenic/cgu.c, ingenic_cgu_new
> clk/pistachio/clk.c, pistachio_clk_alloc_provider

It looks like the clock core (drivers/clk/clk.c) initially grabs the clk
provider node in of_clk_init(), then drops it after it's initialized,
but most of these providers use of_clk_add_provider(), which seems to
manage the device_node lifetime for the user. So I think these are OK.

> drivers/mfd/syscon.c, of_syscon_register

This one looks potentially suspect. Syscon nodes aren't usually directly
managed by a single driver, and the device_node pointer is used for
lookups later...so I think it should keep a kref, and it doesn't.

> drivers/of/pdt.c, function of_pdt_create_node

Not real sure about this one.

> Any idea whether these need of_node_get?  In all cases the device node 
> value comes in as a parameter.

I'm really not an expert on this stuff. I just saw a potential problem
that I happen to be looking at in other subsystems, and I wanted to know
what others thought. I think this discussion should include the DT folks
and the subsystems in question. For one, I'm as interested as anyone in
getting this todo clarified:

Documentation/devicetree/todo.txt
- Document node lifecycle for CONFIG_OF_DYNAMIC

Regards,
Brian

WARNING: multiple messages have this Message-ID (diff)
From: Brian Norris <computersforpeace-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Julia Lawall <julia.lawall-L2FTfq7BK8M@public.gmane.org>
Cc: Kishon Vijay Abraham I <kishon-l0cyMroinI0@public.gmane.org>,
	kernel-janitors-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Gregory Fong
	<gregory.0xf0-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Florian Fainelli
	<f.fainelli-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
	Russell King - ARM Linux
	<linux-lFZ/pmaqli7XmaaqVzeoHQ@public.gmane.org>,
	Thomas Petazzoni
	<thomas.petazzoni-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>,
	Andrew Lunn <andrew-g2DYL2Zd6BY@public.gmane.org>,
	Bjorn Helgaas <bhelgaas-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>,
	Jason Cooper <jason-NLaQJdtUoK4Be96aLqz0jA@public.gmane.org>,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: device_node lifetime (was: Re: [PATCH 1/7] phy: brcmstb-sata: add missing of_node_put)
Date: Wed, 18 Nov 2015 11:05:00 -0800	[thread overview]
Message-ID: <20151118190500.GE140057@google.com> (raw)
In-Reply-To: <alpine.DEB.2.02.1511172327030.2121-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>

(changing subject, add devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org)

On Tue, Nov 17, 2015 at 11:33:25PM +0100, Julia Lawall wrote:
> On Tue, 17 Nov 2015, Brian Norris wrote:
> > On Tue, Nov 17, 2015 at 06:48:39PM +0100, Julia Lawall wrote:
> > > Is this something that should be checked for elsewhere?
> > 
> > I expect the same sort of problem shows up plenty of other places. I
> > don't think many people use CONFIG_OF_DYNAMIC, so the effects of these
> > failures probably aren't felt by many.
> 
> I tried the following semantic patch:
> 
> @@
> struct device_node *e;
> expression e1;
> identifier fld;
> @@
> 
>  ... when != of_node_get(...)
> *(<+...e1->fld...+>) = e
>  ... when != of_node_get(...)
>  return e1;
> 
> basically, this says that a structure field is initilized to a device node 
> value, the structure is returned by the containing function, and the 
> containing function contains no of_node_get at all.  Certainly this is 
> quite constrained, but it does produce a number of examples.
> 
> I looked at a few of them:
> 
> drivers/clk/ingenic/cgu.c, ingenic_cgu_new
> clk/pistachio/clk.c, pistachio_clk_alloc_provider

It looks like the clock core (drivers/clk/clk.c) initially grabs the clk
provider node in of_clk_init(), then drops it after it's initialized,
but most of these providers use of_clk_add_provider(), which seems to
manage the device_node lifetime for the user. So I think these are OK.

> drivers/mfd/syscon.c, of_syscon_register

This one looks potentially suspect. Syscon nodes aren't usually directly
managed by a single driver, and the device_node pointer is used for
lookups later...so I think it should keep a kref, and it doesn't.

> drivers/of/pdt.c, function of_pdt_create_node

Not real sure about this one.

> Any idea whether these need of_node_get?  In all cases the device node 
> value comes in as a parameter.

I'm really not an expert on this stuff. I just saw a potential problem
that I happen to be looking at in other subsystems, and I wanted to know
what others thought. I think this discussion should include the DT folks
and the subsystems in question. For one, I'm as interested as anyone in
getting this todo clarified:

Documentation/devicetree/todo.txt
- Document node lifecycle for CONFIG_OF_DYNAMIC

Regards,
Brian
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

WARNING: multiple messages have this Message-ID (diff)
From: Brian Norris <computersforpeace@gmail.com>
To: Julia Lawall <julia.lawall@lip6.fr>
Cc: Kishon Vijay Abraham I <kishon@ti.com>,
	kernel-janitors@vger.kernel.org,
	Gregory Fong <gregory.0xf0@gmail.com>,
	Florian Fainelli <f.fainelli@gmail.com>,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	Russell King - ARM Linux <linux@arm.linux.org.uk>,
	Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
	Andrew Lunn <andrew@lunn.ch>, Bjorn Helgaas <bhelgaas@google.com>,
	Jason Cooper <jason@lakedaemon.net>,
	devicetree@vger.kernel.org
Subject: device_node lifetime (was: Re: [PATCH 1/7] phy: brcmstb-sata: add missing of_node_put)
Date: Wed, 18 Nov 2015 11:05:00 -0800	[thread overview]
Message-ID: <20151118190500.GE140057@google.com> (raw)
In-Reply-To: <alpine.DEB.2.02.1511172327030.2121@localhost6.localdomain6>

(changing subject, add devicetree@vger.kernel.org)

On Tue, Nov 17, 2015 at 11:33:25PM +0100, Julia Lawall wrote:
> On Tue, 17 Nov 2015, Brian Norris wrote:
> > On Tue, Nov 17, 2015 at 06:48:39PM +0100, Julia Lawall wrote:
> > > Is this something that should be checked for elsewhere?
> > 
> > I expect the same sort of problem shows up plenty of other places. I
> > don't think many people use CONFIG_OF_DYNAMIC, so the effects of these
> > failures probably aren't felt by many.
> 
> I tried the following semantic patch:
> 
> @@
> struct device_node *e;
> expression e1;
> identifier fld;
> @@
> 
>  ... when != of_node_get(...)
> *(<+...e1->fld...+>) = e
>  ... when != of_node_get(...)
>  return e1;
> 
> basically, this says that a structure field is initilized to a device node 
> value, the structure is returned by the containing function, and the 
> containing function contains no of_node_get at all.  Certainly this is 
> quite constrained, but it does produce a number of examples.
> 
> I looked at a few of them:
> 
> drivers/clk/ingenic/cgu.c, ingenic_cgu_new
> clk/pistachio/clk.c, pistachio_clk_alloc_provider

It looks like the clock core (drivers/clk/clk.c) initially grabs the clk
provider node in of_clk_init(), then drops it after it's initialized,
but most of these providers use of_clk_add_provider(), which seems to
manage the device_node lifetime for the user. So I think these are OK.

> drivers/mfd/syscon.c, of_syscon_register

This one looks potentially suspect. Syscon nodes aren't usually directly
managed by a single driver, and the device_node pointer is used for
lookups later...so I think it should keep a kref, and it doesn't.

> drivers/of/pdt.c, function of_pdt_create_node

Not real sure about this one.

> Any idea whether these need of_node_get?  In all cases the device node 
> value comes in as a parameter.

I'm really not an expert on this stuff. I just saw a potential problem
that I happen to be looking at in other subsystems, and I wanted to know
what others thought. I think this discussion should include the DT folks
and the subsystems in question. For one, I'm as interested as anyone in
getting this todo clarified:

Documentation/devicetree/todo.txt
- Document node lifecycle for CONFIG_OF_DYNAMIC

Regards,
Brian

  reply	other threads:[~2015-11-18 19:05 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-16 11:33 [PATCH 0/7] add missing of_node_put Julia Lawall
2015-11-16 11:33 ` Julia Lawall
2015-11-16 11:33 ` Julia Lawall
2015-11-16 11:33 ` [PATCH 1/7] phy: brcmstb-sata: " Julia Lawall
2015-11-16 11:33   ` Julia Lawall
2015-11-16 11:33   ` Julia Lawall
2015-11-17  1:38   ` Brian Norris
2015-11-17  1:38     ` Brian Norris
2015-11-17  1:38     ` Brian Norris
2015-11-17  6:12     ` Julia Lawall
2015-11-17  6:12       ` Julia Lawall
2015-11-17  6:12       ` Julia Lawall
2015-11-17 17:44       ` Brian Norris
2015-11-17 17:44         ` Brian Norris
2015-11-17 17:44         ` Brian Norris
2015-11-17 17:48         ` Julia Lawall
2015-11-17 17:48           ` Julia Lawall
2015-11-17 17:48           ` Julia Lawall
2015-11-17 18:30           ` Brian Norris
2015-11-17 18:30             ` Brian Norris
2015-11-17 18:30             ` Brian Norris
2015-11-17 18:34             ` Brian Norris
2015-11-17 18:34               ` Brian Norris
2015-11-17 18:34               ` Brian Norris
2015-11-17 22:33             ` Julia Lawall
2015-11-17 22:33               ` Julia Lawall
2015-11-17 22:33               ` Julia Lawall
2015-11-18 19:05               ` Brian Norris [this message]
2015-11-18 19:05                 ` device_node lifetime (was: Re: [PATCH 1/7] phy: brcmstb-sata: add missing of_node_put) Brian Norris
2015-11-18 19:05                 ` Brian Norris
2015-11-18 19:05                 ` Brian Norris
2015-11-18 20:39                 ` Julia Lawall
2015-11-18 20:39                   ` Julia Lawall
2015-11-18 20:39                   ` Julia Lawall
2015-11-18 20:39                   ` Julia Lawall
2015-11-19 18:44                 ` Rob Herring
2015-11-19 18:44                   ` Rob Herring
2015-11-19 18:44                   ` Rob Herring
2015-11-19 19:14                   ` Russell King - ARM Linux
2015-11-19 19:14                     ` Russell King - ARM Linux
2015-11-19 19:14                     ` Russell King - ARM Linux
2015-11-19 22:58                     ` Rob Herring
2015-11-27 14:14     ` [PATCH 1/7] phy: brcmstb-sata: add missing of_node_put Kishon Vijay Abraham I
2015-11-27 14:26       ` Kishon Vijay Abraham I
2015-11-27 14:14       ` Kishon Vijay Abraham I
2015-11-16 11:33 ` [PATCH 2/7] phy: mt65xx-usb3: " Julia Lawall
2015-11-16 11:33   ` Julia Lawall
2015-11-16 11:33   ` Julia Lawall
2015-11-16 11:33 ` [PATCH 3/7] phy: berlin-sata: " Julia Lawall
2015-11-16 11:33   ` Julia Lawall
2015-11-19 20:48   ` Sebastian Hesselbarth
2015-11-19 20:48     ` Sebastian Hesselbarth
2015-11-16 11:33 ` [PATCH 4/7] phy: rockchip-usb: " Julia Lawall
2015-11-16 11:33   ` Julia Lawall
2015-11-16 11:33   ` Julia Lawall
2015-11-18 19:27   ` Heiko Stübner
2015-11-18 19:27     ` Heiko Stübner
2015-11-18 19:27     ` Heiko Stübner
2015-11-18 19:31     ` Brian Norris
2015-11-18 19:31       ` Brian Norris
2015-11-18 19:31       ` Brian Norris
2015-11-18 19:46       ` Heiko Stübner
2015-11-18 19:46         ` Heiko Stübner
2015-11-18 19:46         ` Heiko Stübner
2015-11-18 19:46         ` Heiko Stübner
2015-11-18 20:38         ` Julia Lawall
2015-11-18 20:38           ` Julia Lawall
2015-11-18 20:38           ` Julia Lawall
2015-11-18 20:40           ` Heiko Stübner
2015-11-18 20:40             ` Heiko Stübner
2015-11-18 20:40             ` Heiko Stübner
2015-11-18 21:42   ` Heiko Stübner
2015-11-18 21:42     ` Heiko Stübner
2015-11-18 21:42     ` Heiko Stübner
2015-11-16 11:33 ` [PATCH 5/7] phy: miphy28lp: " Julia Lawall
2015-11-16 11:33   ` Julia Lawall
2015-11-16 11:33   ` Julia Lawall
2015-11-16 11:33 ` [PATCH 6/7] phy: miphy365x: " Julia Lawall
2015-11-16 11:33   ` Julia Lawall
2015-11-16 11:33   ` Julia Lawall
2015-11-16 11:33 ` [PATCH 7/7] phy: cygnus: pcie: " Julia Lawall
2015-11-16 11:33   ` Julia Lawall
2015-11-16 11:33   ` Julia Lawall
2015-11-16 17:12   ` Ray Jui
2015-11-16 17:12     ` Ray Jui
2015-11-16 17:12     ` Ray Jui

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=20151118190500.GE140057@google.com \
    --to=computersforpeace@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.