for_each_node_by_type performs an of_node_get on each iteration, so a break out of the loop requires an of_node_put. In this code, there are two paths that break out of the loop. In the first one (open-pic case), the code originally contained an of_node_get. That increments the reference count, which cancels out against the decrement of the reference count that is needed here, and thus the patch drops the of_node_get. In the second one (ppc-xicp case), there is no need to save the node value, and so an of_node_put is added as described by the following semantic patch rule (http://coccinelle.lip6.fr): // <smpl> @@ expression e,e1; local idexpression n; @@ for_each_node_by_type(n, e1) { ... when != of_node_put(n) when != e = n ( return n; | + of_node_put(n); ? return ...; ) ... } // </smpl> Signed-off-by: Julia Lawall <Julia.Lawall@xxxxxxx> --- arch/powerpc/platforms/pseries/setup.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c index 36df46e..7185cd3 100644 --- a/arch/powerpc/platforms/pseries/setup.c +++ b/arch/powerpc/platforms/pseries/setup.c @@ -236,7 +236,7 @@ static void __init pseries_discover_pic(void) for_each_node_by_name(np, "interrupt-controller") { typep = of_get_property(np, "compatible", NULL); if (strstr(typep, "open-pic")) { - pSeries_mpic_node = of_node_get(np); + pSeries_mpic_node = np; ppc_md.init_IRQ = pseries_mpic_init_IRQ; setup_kexec_cpu_down_mpic(); smp_init_pseries_mpic(); @@ -245,6 +245,7 @@ static void __init pseries_discover_pic(void) ppc_md.init_IRQ = pseries_xics_init_IRQ; setup_kexec_cpu_down_xics(); smp_init_pseries_xics(); + of_node_put(np); return; } } -- To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html