All of lore.kernel.org
 help / color / mirror / Atom feed
From: Guenter Roeck <linux@roeck-us.net>
To: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
Cc: Grant Likely <grant.likely@secretlab.ca>,
	Rob Herring <robherring2@gmail.com>,
	Stephen Warren <swarren@wwwdotorg.org>,
	Matt Porter <matt.porter@linaro.org>,
	Koen Kooi <koen@dominion.thruhere.net>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Alison Chaiken <Alison_Chaiken@mentor.com>,
	Dinh Nguyen <dinh.linux@gmail.com>, Jan Lubbe <jluebbe@lasnet.de>,
	Alexander Sverdlin <alexander.sverdlin@nsn.com>,
	Michael Stickel <ms@mycable.de>,
	Dirk Behme <dirk.behme@gmail.com>,
	Alan Tull <delicious.quinoa@gmail.com>,
	Sascha Hauer <s.hauer@pengutronix.de>,
	Michael Bohan <mbohan@codeaurora.org>,
	Ionut Nicu <ioan.nicu.ext@nsn.com>,
	Michal Simek <monstr@monstr.eu>,
	Matt Ranostay <mranostay@gmail.com>,
	Joel Becker <jlbec@evilplan.org>,
	devicetree@vger.kernel.org, Wolfram Sang <wsa@the-dreams.de>,
	linux-i2c@vger.kernel.org, Mark Brown <broonie@kernel.org>,
	linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org,
	Pete Popov <pete.popov@konsulko.com>,
	Dan Malek <dan.malek@konsulko.com>,
	Georgi Vlaev <georgi.vlaev@konsulko.com>
Subject: Re: [PATCH 1/6] of: Do not free memory at of_node_release
Date: Tue, 24 Jun 2014 16:20:01 -0700	[thread overview]
Message-ID: <53AA07A1.20001@roeck-us.net> (raw)
In-Reply-To: <EC6D689C-ED96-48B2-BF90-92492FC65791@konsulko.com>

On 06/24/2014 02:02 PM, Pantelis Antoniou wrote:
> Hi Guenter,
>
> On Jun 24, 2014, at 11:33 PM, Guenter Roeck wrote:
>
>> On Tue, Jun 24, 2014 at 11:23:35PM +0300, Pantelis Antoniou wrote:
>>> Hi Grant,
>>>
>>> On Jun 24, 2014, at 11:21 PM, Grant Likely wrote:
>>>
>>>> On Tue, 24 Jun 2014 17:23:35 +0300, Pantelis Antoniou <pantelis.antoniou@konsulko.com> wrote:
>>>>> Hi Grant,
>>>>>
>>>>> On Jun 24, 2014, at 5:10 PM, Grant Likely wrote:
>>>>>
>>>>>> On Sun, 22 Jun 2014 12:40:34 +0300, Pantelis Antoniou <pantelis.antoniou@konsulko.com> wrote:
>>>>>>> The life-cycle of nodes and properties does not allow us to release
>>>>>>> the memory taken by a device_node. Pointer to properties and nodes
>>>>>>> might still be in use in drivers, so any memory free'ing is dangerous.
>>>>>>>
>>>>>>> Simply move all the properties to the deadprops list, and the node
>>>>>>> itself to of_alldeadnodes until the life-cycles issues are resolved.
>>>>>>
>>>>>> Ummm. this looks wrong. The release function is supposed to be the place
>>>>>> to do the freeing, and with our discussion the other day about moving to
>>>>>> rcu, but keeping of_node_get/put() for anything that needs to hold a
>>>>>> long term reference, that means the lifecycle issues are pretty much
>>>>>> resolved. I don't think this patch is necessary.
>>>>>>
>>>>>
>>>>> Well, I thought about it too. This is the culmination of that process :)
>>>>>
>>>>> The problem is not the node life-cycle, it's the properties. We can't
>>>>> tell for sure who and where has a pointer to the properties of the node,
>>>>> and when we free the node, the current code iterates over the properties
>>>>> list and frees them. This works only because in my tests, of_node_release
>>>>> only gets called when using overlays created nodes.
>>>>
>>>> If a caller want's to use the value of a property, then it needs to
>>>> of_node_get() the node. Property lifecycle is strictly attached to the
>>>> lifecycle of it's node.
>>>>
>>>
>>> Taking bets if that's always the case?
>>>
>> For my part I prefer to take the bet (and handle the consequences) over
>> a potential memory leak.
>>
>
> It's your call really. But let me just demonstrate why this is harder than it appears,
> with a small example.
>
Nothing is easy in life.

> The of_node_get() method is not invoked for instance when reading string properties.
>
> The of_property_read_string() method will return a pointer to the string property value.
> That means that potentially all drivers that call of_property_read_string() will have to
> be converted to taking a reference of the node using of_node_get(), or the of_property_read_string()
> must do so in the background.
>
Or the caller must duplicate the string if it is used later on.

Yes, I understand that there is potential for problems. I am still more concerned
about memory leaks, though. Given that, I am actually more concerned about code
which does not call of_node_put() even if it should, and I suspect we may have to
spend some time going through the code to identify and fix as many of those as we
can. Again, keep in mind that the systems I am dealing with tend to run for months
if not years without reboot.

Guenter

  reply	other threads:[~2014-06-24 23:20 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-22  9:40 [PATCH 0/6] OF: Fixes preparing transactions/overlays Pantelis Antoniou
2014-06-22  9:40 ` [PATCH 1/6] of: Do not free memory at of_node_release Pantelis Antoniou
2014-06-24 14:10   ` Grant Likely
2014-06-24 14:23     ` Pantelis Antoniou
2014-06-24 20:21       ` Grant Likely
2014-06-24 20:23         ` Pantelis Antoniou
2014-06-24 20:33           ` Guenter Roeck
2014-06-24 21:02             ` Pantelis Antoniou
2014-06-24 23:20               ` Guenter Roeck [this message]
2014-06-25 19:24           ` Grant Likely
2014-06-24 14:53     ` Guenter Roeck
2014-06-22  9:40 ` [PATCH 2/6] OF: Add [__]of_find_node_by_full_name Pantelis Antoniou
2014-06-23 17:58   ` Guenter Roeck
2014-06-23 18:00     ` Pantelis Antoniou
     [not found]       ` <4F4A55EC-744B-49CC-96FA-811C9483A43D-OWPKS81ov/FWk0Htik3J/w@public.gmane.org>
2014-06-24 13:55         ` Grant Likely
2014-06-24 13:55           ` Grant Likely
2014-06-24 13:55           ` Grant Likely
2014-06-24 14:12   ` Grant Likely
2014-06-24 14:23     ` Pantelis Antoniou
2014-06-22  9:40 ` [PATCH 3/6] of: platform: Fix and export of_platform_device_destroy Pantelis Antoniou
2014-06-24 14:23   ` Grant Likely
2014-06-24 15:13   ` Grant Likely
2014-06-22  9:40 ` [PATCH 4/6] OF: Export a number of __of_* methods Pantelis Antoniou
2014-06-24 19:27   ` Grant Likely
2014-06-24 19:38     ` Pantelis Antoniou
2014-06-24 20:19       ` Grant Likely
2014-06-22  9:40 ` [PATCH 5/6] OF: Utility helper functions for dynamic nodes Pantelis Antoniou
     [not found]   ` <1403430039-15085-6-git-send-email-pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org>
2014-06-23 16:26     ` Alexander Sverdlin
2014-06-23 16:26       ` Alexander Sverdlin
2014-06-23 16:26       ` Alexander Sverdlin
2014-06-23 16:57       ` Pantelis Antoniou
2014-06-23 18:33         ` Ioan Nicu
2014-06-23 19:13           ` Pantelis Antoniou
     [not found]             ` <78ACBAF6-A73E-4272-8D3A-258C4B10858C-OWPKS81ov/FWk0Htik3J/w@public.gmane.org>
2014-06-23 19:48               ` Guenter Roeck
2014-06-23 19:48                 ` Guenter Roeck
2014-06-23 19:48                 ` Guenter Roeck
2014-06-23 20:39                 ` Ioan Nicu
2014-06-24  9:08                 ` Pantelis Antoniou
2014-06-24 13:46                   ` Rob Herring
2014-06-24 13:53                     ` Alexander Sverdlin
2014-06-24 14:49                       ` Rob Herring
2014-06-24 15:43                         ` Alexander Sverdlin
2014-06-24 15:59                           ` Pantelis Antoniou
2014-06-24 18:23                             ` Ioan Nicu
2014-06-24 18:31                               ` Ioan Nicu
2014-06-24 18:43                               ` Pantelis Antoniou
2014-06-24  8:12               ` Alexander Sverdlin
2014-06-24  8:12                 ` Alexander Sverdlin
2014-06-24  8:12                 ` Alexander Sverdlin
2014-06-24  8:19                 ` Pantelis Antoniou
2014-06-24  8:38                   ` Alexander Sverdlin
2014-06-24  8:54                     ` Pantelis Antoniou
2014-06-24  9:00                       ` Alexander Sverdlin
2014-06-24  9:09                         ` Pantelis Antoniou
2014-06-24  8:10           ` Alexander Sverdlin
2014-06-24  8:10             ` Alexander Sverdlin
2014-06-24  8:10             ` Alexander Sverdlin
2014-06-25  9:09             ` Grant Likely
2014-06-25  9:09               ` Grant Likely
2014-06-25  9:09               ` Grant Likely
2014-06-25 11:14   ` Grant Likely
2014-06-25 11:22     ` Pantelis Antoniou
2014-06-22  9:40 ` [PATCH 6/6] of: Introduce tree change __foo_post methods Pantelis Antoniou

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=53AA07A1.20001@roeck-us.net \
    --to=linux@roeck-us.net \
    --cc=Alison_Chaiken@mentor.com \
    --cc=alexander.sverdlin@nsn.com \
    --cc=broonie@kernel.org \
    --cc=dan.malek@konsulko.com \
    --cc=delicious.quinoa@gmail.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dinh.linux@gmail.com \
    --cc=dirk.behme@gmail.com \
    --cc=georgi.vlaev@konsulko.com \
    --cc=grant.likely@secretlab.ca \
    --cc=gregkh@linuxfoundation.org \
    --cc=ioan.nicu.ext@nsn.com \
    --cc=jlbec@evilplan.org \
    --cc=jluebbe@lasnet.de \
    --cc=koen@dominion.thruhere.net \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-spi@vger.kernel.org \
    --cc=matt.porter@linaro.org \
    --cc=mbohan@codeaurora.org \
    --cc=monstr@monstr.eu \
    --cc=mranostay@gmail.com \
    --cc=ms@mycable.de \
    --cc=pantelis.antoniou@konsulko.com \
    --cc=pete.popov@konsulko.com \
    --cc=robherring2@gmail.com \
    --cc=s.hauer@pengutronix.de \
    --cc=swarren@wwwdotorg.org \
    --cc=wsa@the-dreams.de \
    /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.