From: Frederic Barrat <fbarrat@linux•vnet.ibm.com>
To: Michael Ellerman <mpe@ellerman•id.au>,
Andrew Donnellan <andrew.donnellan@au1•ibm.com>,
linuxppc-dev@lists•ozlabs.org
Cc: clombard@linux•vnet.ibm.com, kernel-janitors@vger•kernel.org,
linux-kernel@vger•kernel.org, julia.lawall@lip6•fr,
imunsie@au1•ibm.com, elfring@users•sourceforge.net
Subject: Re: [PATCH] cxl: replace loop with for_each_child_of_node(), remove unneeded of_node_put()
Date: Mon, 1 Aug 2016 15:34:09 +0200 [thread overview]
Message-ID: <f4252894-4f35-e296-6a72-e29200d6dcd1@linux.vnet.ibm.com> (raw)
In-Reply-To: <87fuqsllmf.fsf@concordia.ellerman.id.au>
Le 29/07/2016 à 13:38, Michael Ellerman a écrit :
> But who does keep a reference on the device_node? I can't see it anywhere. Which
> means in theory the device_node can be freed out from under you.
>
> You have a reference for afu_np as part of for_each_child_of_node(), but it's
> dropped as soon as you go around the loop.
>
> The typical pattern would be that cxl_guest_init_afu() takes an additional
> reference once it's done all its setup and can't fail.
>
> That way at the end of the loop when the loop construct has dropped all
> references, the nodes you actually init'ed have their reference count
> incremented by 1.
We don't keep a reference on the AFU device_node. Once we've read the
config of the AFU, the AFU device_node is never accessed again. So I
guess it's possible (though unexpected) that it's freed from under us,
but it should not affect the driver.
The AFU is really dependent on the adapter itself, which is one level up
in the device tree, and for which we create a device through
of_platform_device_create(). The properties under the AFU device node
are read directly from the PCI config space in the bare-metal case,
where the cxl adapter is a PCI device.
Do we really have a problem here?
Fred
next prev parent reply other threads:[~2016-08-01 13:34 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <5307CAA2.8060406@users.sourceforge.net>
[not found] ` <alpine.DEB.2.02.1402212321410.2043@localhost6.localdomain6>
[not found] ` <530A086E.8010901@users.sourceforge.net>
[not found] ` <alpine.DEB.2.02.1402231635510.1985@localhost6.localdomain6>
[not found] ` <530A72AA.3000601@users.sourceforge.net>
[not found] ` <alpine.DEB.2.02.1402240658210.2090@localhost6.localdomain6>
[not found] ` <530B5FB6.6010207@users.sourceforge.net>
[not found] ` <alpine.DEB.2.10.1402241710370.2074@hadrien>
[not found] ` <530C5E18.1020800@users.sourceforge.net>
[not found] ` <alpine.DEB.2.10.1402251014170.2080@hadrien>
[not found] ` <530CD2C4.4050903@users.sourceforge.net>
[not found] ` <alpine.DEB.2.10.1402251840450.7035@hadrien>
[not found] ` <530CF8FF.8080600@users.sourceforge.net>
[not found] ` <alpine.DEB.2.02.1402252117150.2047@localhost6.localdomain6>
[not found] ` <530DD06F.4090703@users.sourceforge.net>
[not found] ` <alpine.DEB.2.02.1402262129250.2221@localhost6.localdomain6>
[not found] ` <5317A59D.4@users.sourceforge.net>
2014-11-21 11:45 ` [PATCH 1/1] tty-hvsi_lib: Deletion of an unnecessary check before the function call "tty_kref_put" SF Markus Elfring
2014-11-22 15:26 ` [PATCH 1/1] PowerPC-83xx: Deletion of an unnecessary check before the function call "of_node_put" SF Markus Elfring
2014-12-02 21:55 ` [PATCH] ALSA: i2sbus: Deletion of unnecessary checks before the function call "release_and_free_resource" SF Markus Elfring
2014-12-03 6:59 ` Takashi Iwai
[not found] ` <54A9355F.4050102@users.sourceforge.net>
2015-01-04 13:21 ` [PATCH 9/13] ALSA: i2sbus: Delete an unnecessary check before the function call "snd_pcm_suspend_all" SF Markus Elfring
2015-01-04 13:36 ` [PATCH 11/13] ALSA: Deletion of checks before the function call "iounmap" SF Markus Elfring
2015-01-05 13:58 ` Dan Carpenter
2016-10-26 12:26 ` Dan Carpenter
2016-10-26 12:28 ` Johannes Berg
2016-10-26 12:42 ` Dan Carpenter
2015-02-03 13:00 ` [PATCH] PowerPC-PCI: Delete unnecessary checks before the function call "kfree" SF Markus Elfring
2015-02-03 13:38 ` [PATCH] PowerPC-rheap: Delete an unnecessary check " SF Markus Elfring
2015-02-04 20:36 ` [PATCH] macintosh: Delete an unnecessary check before the function call "of_node_put" SF Markus Elfring
2015-06-30 8:13 ` SF Markus Elfring
2015-11-06 10:05 ` [PATCH] cxl: Delete an unnecessary check before the function call "kfree" SF Markus Elfring
2015-11-08 22:56 ` Andrew Donnellan
2015-11-09 2:09 ` Ian Munsie
2016-04-13 13:33 ` Michael Ellerman
2016-07-20 13:20 ` [PATCH] cxl: Delete an unnecessary check before the function call "of_node_put" SF Markus Elfring
2016-07-20 13:38 ` Julia Lawall
2016-07-27 8:57 ` Andrew Donnellan
2016-07-29 3:55 ` [PATCH] cxl: replace loop with for_each_child_of_node(), remove unneeded of_node_put() Andrew Donnellan
2016-07-29 7:43 ` Frederic Barrat
2016-07-29 8:46 ` walter harms
2016-07-29 8:49 ` Julia Lawall
2016-07-29 11:38 ` Michael Ellerman
2016-08-01 13:34 ` Frederic Barrat [this message]
2016-10-05 2:36 ` Michael Ellerman
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=f4252894-4f35-e296-6a72-e29200d6dcd1@linux.vnet.ibm.com \
--to=fbarrat@linux$(echo .)vnet.ibm.com \
--cc=andrew.donnellan@au1$(echo .)ibm.com \
--cc=clombard@linux$(echo .)vnet.ibm.com \
--cc=elfring@users$(echo .)sourceforge.net \
--cc=imunsie@au1$(echo .)ibm.com \
--cc=julia.lawall@lip6$(echo .)fr \
--cc=kernel-janitors@vger$(echo .)kernel.org \
--cc=linux-kernel@vger$(echo .)kernel.org \
--cc=linuxppc-dev@lists$(echo .)ozlabs.org \
--cc=mpe@ellerman$(echo .)id.au \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox