[PATCH 02/11] ARM: at91: Simplify with scoped for each OF child loop

Krzysztof Kozlowski posted 11 patches 1 month ago
There is a newer version of this series
[PATCH 02/11] ARM: at91: Simplify with scoped for each OF child loop
Posted by Krzysztof Kozlowski 1 month ago
Use scoped for-each loop when iterating over device nodes to make code a
bit simpler.

Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>

---

Depends on the first patch.
---
 arch/arm/mach-at91/pm.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c
index 35058b99069c..68bb4a86cd94 100644
--- a/arch/arm/mach-at91/pm.c
+++ b/arch/arm/mach-at91/pm.c
@@ -982,15 +982,12 @@ static void __init at91_pm_sram_init(void)
 	struct gen_pool *sram_pool;
 	phys_addr_t sram_pbase;
 	unsigned long sram_base;
-	struct device_node *node;
 	struct platform_device *pdev = NULL;
 
-	for_each_compatible_node(node, NULL, "mmio-sram") {
+	for_each_compatible_node_scoped(node, NULL, "mmio-sram") {
 		pdev = of_find_device_by_node(node);
-		if (pdev) {
-			of_node_put(node);
+		if (pdev)
 			break;
-		}
 	}
 
 	if (!pdev) {

-- 
2.51.0
Re: [PATCH 02/11] ARM: at91: Simplify with scoped for each OF child loop
Posted by Claudiu Beznea 1 month ago

On 1/5/26 15:33, Krzysztof Kozlowski wrote:
> Use scoped for-each loop when iterating over device nodes to make code a
> bit simpler.
> 
> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
> 

Reviewed-by: Claudiu Beznea <claudiu.beznea@tuxon.dev>
Re: [PATCH 02/11] ARM: at91: Simplify with scoped for each OF child loop
Posted by Jonathan Cameron 1 month ago
On Mon, 05 Jan 2026 14:33:40 +0100
Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com> wrote:

> Use scoped for-each loop when iterating over device nodes to make code a
> bit simpler.
> 
> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Interesting bit of code. I guess there is some history here that didn't
get captured as a comment?

> 
> ---
> 
> Depends on the first patch.
> ---
>  arch/arm/mach-at91/pm.c | 7 ++-----
>  1 file changed, 2 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c
> index 35058b99069c..68bb4a86cd94 100644
> --- a/arch/arm/mach-at91/pm.c
> +++ b/arch/arm/mach-at91/pm.c
> @@ -982,15 +982,12 @@ static void __init at91_pm_sram_init(void)
>  	struct gen_pool *sram_pool;
>  	phys_addr_t sram_pbase;
>  	unsigned long sram_base;
> -	struct device_node *node;
>  	struct platform_device *pdev = NULL;
>  
> -	for_each_compatible_node(node, NULL, "mmio-sram") {
> +	for_each_compatible_node_scoped(node, NULL, "mmio-sram") {
>  		pdev = of_find_device_by_node(node);
> -		if (pdev) {
> -			of_node_put(node);
> +		if (pdev)
>  			break;
> -
		}
I'm curious if there are DT out there that ever causes the code to get to 
here?  There might be multiple mmio-sram nodes but if there were seems unlikely
the driver wants which ever one has a pdev at a given point in time.
That feels like a weird race condition. So in practice I'd expect this to
always either get the first one, or none.
e.g. Why this can't just be

node = of_find_node_by_name("mmio-sram);
if (node) {
	pdev = of_find_device_by_node(node);
}

or something along those lines.

Given risk of a regression maybe better to do what you have here.
So with that in mind
Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>

>  	}
>  
>  	if (!pdev) {
>
Re: [PATCH 02/11] ARM: at91: Simplify with scoped for each OF child loop
Posted by Jonathan Cameron 1 month ago
On Tue, 6 Jan 2026 10:04:29 +0000
Jonathan Cameron <jonathan.cameron@huawei.com> wrote:

> On Mon, 05 Jan 2026 14:33:40 +0100
> Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com> wrote:
> 
> > Use scoped for-each loop when iterating over device nodes to make code a
> > bit simpler.
> > 
> > Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>  
> Interesting bit of code. I guess there is some history here that didn't
> get captured as a comment?
> 
> > 
> > ---
> > 
> > Depends on the first patch.
> > ---
> >  arch/arm/mach-at91/pm.c | 7 ++-----
> >  1 file changed, 2 insertions(+), 5 deletions(-)
> > 
> > diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c
> > index 35058b99069c..68bb4a86cd94 100644
> > --- a/arch/arm/mach-at91/pm.c
> > +++ b/arch/arm/mach-at91/pm.c
> > @@ -982,15 +982,12 @@ static void __init at91_pm_sram_init(void)
> >  	struct gen_pool *sram_pool;
> >  	phys_addr_t sram_pbase;
> >  	unsigned long sram_base;
> > -	struct device_node *node;
> >  	struct platform_device *pdev = NULL;
> >  
> > -	for_each_compatible_node(node, NULL, "mmio-sram") {
> > +	for_each_compatible_node_scoped(node, NULL, "mmio-sram") {
> >  		pdev = of_find_device_by_node(node);
> > -		if (pdev) {
> > -			of_node_put(node);
> > +		if (pdev)
> >  			break;
> > -  
> 		}
> I'm curious if there are DT out there that ever causes the code to get to 
> here?  There might be multiple mmio-sram nodes but if there were seems unlikely
> the driver wants which ever one has a pdev at a given point in time.
> That feels like a weird race condition. So in practice I'd expect this to
> always either get the first one, or none.
> e.g. Why this can't just be
> 
> node = of_find_node_by_name("mmio-sram);
ah. Not name obviously.  Need more coffee.
of_find_compatible_node()

> if (node) {
> 	pdev = of_find_device_by_node(node);
> }
> 
> or something along those lines.
> 
> Given risk of a regression maybe better to do what you have here.
> So with that in mind
> Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
> 
> >  	}
> >  
> >  	if (!pdev) {
> >   
>
Re: [PATCH 02/11] ARM: at91: Simplify with scoped for each OF child loop
Posted by Nicolas Ferre 1 month ago
Krzysztof,

On 05/01/2026 at 14:33, Krzysztof Kozlowski wrote:
> Use scoped for-each loop when iterating over device nodes to make code a
> bit simpler.
> 
> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>

Thanks for handling this!
Acked-by: Nicolas Ferre <nicolas.ferre@microchip.com>

Best regards,
   Nicolas

> ---
> 
> Depends on the first patch.
> ---
>   arch/arm/mach-at91/pm.c | 7 ++-----
>   1 file changed, 2 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c
> index 35058b99069c..68bb4a86cd94 100644
> --- a/arch/arm/mach-at91/pm.c
> +++ b/arch/arm/mach-at91/pm.c
> @@ -982,15 +982,12 @@ static void __init at91_pm_sram_init(void)
>          struct gen_pool *sram_pool;
>          phys_addr_t sram_pbase;
>          unsigned long sram_base;
> -       struct device_node *node;
>          struct platform_device *pdev = NULL;
> 
> -       for_each_compatible_node(node, NULL, "mmio-sram") {
> +       for_each_compatible_node_scoped(node, NULL, "mmio-sram") {
>                  pdev = of_find_device_by_node(node);
> -               if (pdev) {
> -                       of_node_put(node);
> +               if (pdev)
>                          break;
> -               }
>          }
> 
>          if (!pdev) {
> 
> --
> 2.51.0
>