* [PATCH] powerpc/pasemi: Use of_root in pas_pci_init()
@ 2022-09-06 1:03 Michael Ellerman
2022-09-06 6:17 ` Christophe Leroy
2022-09-23 11:15 ` Michael Ellerman
0 siblings, 2 replies; 4+ messages in thread
From: Michael Ellerman @ 2022-09-06 1:03 UTC (permalink / raw)
To: linuxppc-dev
Currently in pas_pci_init() a reference to the root node is leaked due
to a missing of_node_put(). Instead just use of_root directly.
Note that converting to of_find_compatible_node(NULL, ...) would
not be entirely equivalent, because that would check the compatible
property of the root node, whereas using of_root skips checking the root
node and start the search at the first child of the root.
Reported-by: Liang He <windhl@126•com>
Signed-off-by: Michael Ellerman <mpe@ellerman•id.au>
---
arch/powerpc/platforms/pasemi/pci.c | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-)
diff --git a/arch/powerpc/platforms/pasemi/pci.c b/arch/powerpc/platforms/pasemi/pci.c
index 55f0160910bf..f27d31414737 100644
--- a/arch/powerpc/platforms/pasemi/pci.c
+++ b/arch/powerpc/platforms/pasemi/pci.c
@@ -270,18 +270,12 @@ static int __init pas_add_bridge(struct device_node *dev)
void __init pas_pci_init(void)
{
- struct device_node *np, *root;
+ struct device_node *np;
int res;
- root = of_find_node_by_path("/");
- if (!root) {
- pr_crit("pas_pci_init: can't find root of device tree\n");
- return;
- }
-
pci_set_flags(PCI_SCAN_ALL_PCIE_DEVS);
- np = of_find_compatible_node(root, NULL, "pasemi,rootbus");
+ np = of_find_compatible_node(of_root, NULL, "pasemi,rootbus");
if (np) {
res = pas_add_bridge(np);
of_node_put(np);
--
2.37.2
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH] powerpc/pasemi: Use of_root in pas_pci_init()
2022-09-06 1:03 [PATCH] powerpc/pasemi: Use of_root in pas_pci_init() Michael Ellerman
@ 2022-09-06 6:17 ` Christophe Leroy
2022-09-06 11:38 ` Michael Ellerman
2022-09-23 11:15 ` Michael Ellerman
1 sibling, 1 reply; 4+ messages in thread
From: Christophe Leroy @ 2022-09-06 6:17 UTC (permalink / raw)
To: Michael Ellerman, linuxppc-dev@lists•ozlabs.org
Le 06/09/2022 à 03:03, Michael Ellerman a écrit :
> Currently in pas_pci_init() a reference to the root node is leaked due
> to a missing of_node_put(). Instead just use of_root directly.
>
> Note that converting to of_find_compatible_node(NULL, ...) would
> not be entirely equivalent, because that would check the compatible
> property of the root node, whereas using of_root skips checking the root
> node and start the search at the first child of the root.
>
That seems to simplify code. Should we do the same in all places below ?
$ git grep -n "of_find_node_by_path(\"/\");" arch/powerpc/
arch/powerpc/kernel/pci_32.c:139: dn = of_find_node_by_path("/");
arch/powerpc/kernel/pci_32.c:214: dn = of_find_node_by_path("/");
arch/powerpc/kernel/setup-common.c:212: root = of_find_node_by_path("/");
arch/powerpc/kernel/setup-common.c:793: np = of_find_node_by_path("/");
arch/powerpc/mm/numa.c:388: root = of_find_node_by_path("/");
arch/powerpc/mm/numa.c:456: root = of_find_node_by_path("/");
arch/powerpc/platforms/52xx/efika.c:77: root = of_find_node_by_path("/");
arch/powerpc/platforms/52xx/efika.c:148: root =
of_find_node_by_path("/");
arch/powerpc/platforms/85xx/xes_mpc85xx.c:119: root =
of_find_node_by_path("/");
arch/powerpc/platforms/cell/setup.c:67: root = of_find_node_by_path("/");
arch/powerpc/platforms/cell/setup.c:154: struct device_node *root
= of_find_node_by_path("/");
arch/powerpc/platforms/chrp/pci.c:191: struct device_node *root =
of_find_node_by_path("/");
arch/powerpc/platforms/chrp/pci.c:216: struct device_node *root =
of_find_node_by_path("/");
arch/powerpc/platforms/chrp/setup.c:105: root =
of_find_node_by_path("/");
arch/powerpc/platforms/chrp/setup.c:201: root =
of_find_node_by_path("/");
arch/powerpc/platforms/chrp/setup.c:268: node =
of_find_node_by_path("/");
arch/powerpc/platforms/chrp/setup.c:299: struct device_node *root
= of_find_node_by_path("/");
arch/powerpc/platforms/chrp/setup.c:378: root =
of_find_node_by_path("/");
arch/powerpc/platforms/maple/pci.c:601: root = of_find_node_by_path("/");
arch/powerpc/platforms/maple/setup.c:225: root =
of_find_node_by_path("/");
arch/powerpc/platforms/pasemi/pci.c:276: root =
of_find_node_by_path("/");
arch/powerpc/platforms/pasemi/setup.c:268: root =
of_find_node_by_path("/");
arch/powerpc/platforms/powermac/pci.c:910: root =
of_find_node_by_path("/");
arch/powerpc/platforms/powermac/setup.c:105: np =
of_find_node_by_path("/");
arch/powerpc/platforms/powernv/setup.c:255: root =
of_find_node_by_path("/");
arch/powerpc/platforms/ps3/os-area.c:676: node =
of_find_node_by_path("/");
arch/powerpc/platforms/ps3/os-area.c:774: node =
of_find_node_by_path("/");
arch/powerpc/platforms/pseries/hotplug-memory.c:166: parent =
of_find_node_by_path("/");
arch/powerpc/platforms/pseries/ibmebus.c:187: root =
of_find_node_by_path("/");
arch/powerpc/platforms/pseries/lparcfg.c:232: root =
of_find_node_by_path("/");
arch/powerpc/platforms/pseries/lparcfg.c:799: rootdn =
of_find_node_by_path("/");
arch/powerpc/platforms/pseries/setup.c:97: root =
of_find_node_by_path("/");
arch/powerpc/platforms/pseries/setup.c:486: struct device_node *root
= of_find_node_by_path("/");
arch/powerpc/sysdev/xive/spapr.c:714: rootdn = of_find_node_by_path("/");
Christophe
> Reported-by: Liang He <windhl@126•com>
> Signed-off-by: Michael Ellerman <mpe@ellerman•id.au>
> ---
> arch/powerpc/platforms/pasemi/pci.c | 10 ++--------
> 1 file changed, 2 insertions(+), 8 deletions(-)
>
> diff --git a/arch/powerpc/platforms/pasemi/pci.c b/arch/powerpc/platforms/pasemi/pci.c
> index 55f0160910bf..f27d31414737 100644
> --- a/arch/powerpc/platforms/pasemi/pci.c
> +++ b/arch/powerpc/platforms/pasemi/pci.c
> @@ -270,18 +270,12 @@ static int __init pas_add_bridge(struct device_node *dev)
>
> void __init pas_pci_init(void)
> {
> - struct device_node *np, *root;
> + struct device_node *np;
> int res;
>
> - root = of_find_node_by_path("/");
> - if (!root) {
> - pr_crit("pas_pci_init: can't find root of device tree\n");
> - return;
> - }
> -
> pci_set_flags(PCI_SCAN_ALL_PCIE_DEVS);
>
> - np = of_find_compatible_node(root, NULL, "pasemi,rootbus");
> + np = of_find_compatible_node(of_root, NULL, "pasemi,rootbus");
> if (np) {
> res = pas_add_bridge(np);
> of_node_put(np);
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [PATCH] powerpc/pasemi: Use of_root in pas_pci_init()
2022-09-06 6:17 ` Christophe Leroy
@ 2022-09-06 11:38 ` Michael Ellerman
0 siblings, 0 replies; 4+ messages in thread
From: Michael Ellerman @ 2022-09-06 11:38 UTC (permalink / raw)
To: Christophe Leroy, linuxppc-dev@lists•ozlabs.org, devicetree
Christophe Leroy <christophe.leroy@csgroup•eu> writes:
> Le 06/09/2022 à 03:03, Michael Ellerman a écrit :
>> Currently in pas_pci_init() a reference to the root node is leaked due
>> to a missing of_node_put(). Instead just use of_root directly.
>>
>> Note that converting to of_find_compatible_node(NULL, ...) would
>> not be entirely equivalent, because that would check the compatible
>> property of the root node, whereas using of_root skips checking the root
>> node and start the search at the first child of the root.
>>
>
> That seems to simplify code. Should we do the same in all places below ?
I guess so.
There are some places where using of_root complicates things, because it
*doesn't* need refcount handling, eg. the cases in numa.c.
But in most cases it is preferable to use of_root IMHO.
cheers
> $ git grep -n "of_find_node_by_path(\"/\");" arch/powerpc/
> arch/powerpc/kernel/pci_32.c:139: dn = of_find_node_by_path("/");
> arch/powerpc/kernel/pci_32.c:214: dn = of_find_node_by_path("/");
> arch/powerpc/kernel/setup-common.c:212: root = of_find_node_by_path("/");
> arch/powerpc/kernel/setup-common.c:793: np = of_find_node_by_path("/");
> arch/powerpc/mm/numa.c:388: root = of_find_node_by_path("/");
> arch/powerpc/mm/numa.c:456: root = of_find_node_by_path("/");
> arch/powerpc/platforms/52xx/efika.c:77: root = of_find_node_by_path("/");
> arch/powerpc/platforms/52xx/efika.c:148: root = of_find_node_by_path("/");
> arch/powerpc/platforms/85xx/xes_mpc85xx.c:119: root = of_find_node_by_path("/");
> arch/powerpc/platforms/cell/setup.c:67: root = of_find_node_by_path("/");
> arch/powerpc/platforms/cell/setup.c:154: struct device_node *root > = of_find_node_by_path("/");
> arch/powerpc/platforms/chrp/pci.c:191: struct device_node *root = of_find_node_by_path("/");
> arch/powerpc/platforms/chrp/pci.c:216: struct device_node *root = of_find_node_by_path("/");
> arch/powerpc/platforms/chrp/setup.c:105: root = of_find_node_by_path("/");
> arch/powerpc/platforms/chrp/setup.c:201: root = of_find_node_by_path("/");
> arch/powerpc/platforms/chrp/setup.c:268: node = of_find_node_by_path("/");
> arch/powerpc/platforms/chrp/setup.c:299: struct device_node *root > = of_find_node_by_path("/");
> arch/powerpc/platforms/chrp/setup.c:378: root = of_find_node_by_path("/");
> arch/powerpc/platforms/maple/pci.c:601: root = of_find_node_by_path("/");
> arch/powerpc/platforms/maple/setup.c:225: root = of_find_node_by_path("/");
> arch/powerpc/platforms/pasemi/pci.c:276: root = of_find_node_by_path("/");
> arch/powerpc/platforms/pasemi/setup.c:268: root = of_find_node_by_path("/");
> arch/powerpc/platforms/powermac/pci.c:910: root = of_find_node_by_path("/");
> arch/powerpc/platforms/powermac/setup.c:105: np = of_find_node_by_path("/");
> arch/powerpc/platforms/powernv/setup.c:255: root = of_find_node_by_path("/");
> arch/powerpc/platforms/ps3/os-area.c:676: node = of_find_node_by_path("/");
> arch/powerpc/platforms/ps3/os-area.c:774: node = of_find_node_by_path("/");
> arch/powerpc/platforms/pseries/hotplug-memory.c:166: parent = of_find_node_by_path("/");
> arch/powerpc/platforms/pseries/ibmebus.c:187: root = of_find_node_by_path("/");
> arch/powerpc/platforms/pseries/lparcfg.c:232: root = of_find_node_by_path("/");
> arch/powerpc/platforms/pseries/lparcfg.c:799: rootdn = of_find_node_by_path("/");
> arch/powerpc/platforms/pseries/setup.c:97: root = of_find_node_by_path("/");
> arch/powerpc/platforms/pseries/setup.c:486: struct device_node *root > = of_find_node_by_path("/");
> arch/powerpc/sysdev/xive/spapr.c:714: rootdn = of_find_node_by_path("/");
>
> Christophe
>
>
>> Reported-by: Liang He <windhl@126•com>
>> Signed-off-by: Michael Ellerman <mpe@ellerman•id.au>
>> ---
>> arch/powerpc/platforms/pasemi/pci.c | 10 ++--------
>> 1 file changed, 2 insertions(+), 8 deletions(-)
>>
>> diff --git a/arch/powerpc/platforms/pasemi/pci.c b/arch/powerpc/platforms/pasemi/pci.c
>> index 55f0160910bf..f27d31414737 100644
>> --- a/arch/powerpc/platforms/pasemi/pci.c
>> +++ b/arch/powerpc/platforms/pasemi/pci.c
>> @@ -270,18 +270,12 @@ static int __init pas_add_bridge(struct device_node *dev)
>>
>> void __init pas_pci_init(void)
>> {
>> - struct device_node *np, *root;
>> + struct device_node *np;
>> int res;
>>
>> - root = of_find_node_by_path("/");
>> - if (!root) {
>> - pr_crit("pas_pci_init: can't find root of device tree\n");
>> - return;
>> - }
>> -
>> pci_set_flags(PCI_SCAN_ALL_PCIE_DEVS);
>>
>> - np = of_find_compatible_node(root, NULL, "pasemi,rootbus");
>> + np = of_find_compatible_node(of_root, NULL, "pasemi,rootbus");
>> if (np) {
>> res = pas_add_bridge(np);
>> of_node_put(np);
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] powerpc/pasemi: Use of_root in pas_pci_init()
2022-09-06 1:03 [PATCH] powerpc/pasemi: Use of_root in pas_pci_init() Michael Ellerman
2022-09-06 6:17 ` Christophe Leroy
@ 2022-09-23 11:15 ` Michael Ellerman
1 sibling, 0 replies; 4+ messages in thread
From: Michael Ellerman @ 2022-09-23 11:15 UTC (permalink / raw)
To: linuxppc-dev
On Tue, 6 Sep 2022 11:03:13 +1000, Michael Ellerman wrote:
> Currently in pas_pci_init() a reference to the root node is leaked due
> to a missing of_node_put(). Instead just use of_root directly.
>
> Note that converting to of_find_compatible_node(NULL, ...) would
> not be entirely equivalent, because that would check the compatible
> property of the root node, whereas using of_root skips checking the root
> node and start the search at the first child of the root.
>
> [...]
Applied to powerpc/next.
[1/1] powerpc/pasemi: Use of_root in pas_pci_init()
https://git.kernel.org/powerpc/c/c28c2d4abdf95655001992c4f52dc243ba00cac3
cheers
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2022-09-23 11:15 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-09-06 1:03 [PATCH] powerpc/pasemi: Use of_root in pas_pci_init() Michael Ellerman
2022-09-06 6:17 ` Christophe Leroy
2022-09-06 11:38 ` Michael Ellerman
2022-09-23 11:15 ` Michael Ellerman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox