arm: add missing of_node_put
for_each_child_of_node performs an of_node_get on each iteration, so a break out of the loop requires an of_node_put. The of_node_put is duplicated in front of each error return, because the function contains a later error return that is beyond the end of the for_each_child_of_node and thus doesn't need of_node_put. The semantic patch that fixes this problem is as follows (http://coccinelle.lip6.fr): // <smpl> @@ expression root,e; local idexpression child; iterator name for_each_child_of_node; @@ for_each_child_of_node(root, child) { ... when != of_node_put(child) when != e = child ( return child; | + of_node_put(child); ? return ...; ) ... } @@ expression root,e; local idexpression child; @@ for_each_child_of_node(root, child) { ... when != of_node_put(child) when != e = child + of_node_put(child); ? break; ... } ... when != child // </smpl> Additionally, concatenated a string in an affected line to avoid introducing a checkpatch warning. Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
9254970cbb
commit
a4283e41bb
|
@ -101,6 +101,7 @@ void __init arm_dt_init_cpu_maps(void)
|
||||||
if (of_property_read_u32(cpu, "reg", &hwid)) {
|
if (of_property_read_u32(cpu, "reg", &hwid)) {
|
||||||
pr_debug(" * %s missing reg property\n",
|
pr_debug(" * %s missing reg property\n",
|
||||||
cpu->full_name);
|
cpu->full_name);
|
||||||
|
of_node_put(cpu);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,8 +109,10 @@ void __init arm_dt_init_cpu_maps(void)
|
||||||
* 8 MSBs must be set to 0 in the DT since the reg property
|
* 8 MSBs must be set to 0 in the DT since the reg property
|
||||||
* defines the MPIDR[23:0].
|
* defines the MPIDR[23:0].
|
||||||
*/
|
*/
|
||||||
if (hwid & ~MPIDR_HWID_BITMASK)
|
if (hwid & ~MPIDR_HWID_BITMASK) {
|
||||||
|
of_node_put(cpu);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Duplicate MPIDRs are a recipe for disaster.
|
* Duplicate MPIDRs are a recipe for disaster.
|
||||||
|
@ -119,9 +122,11 @@ void __init arm_dt_init_cpu_maps(void)
|
||||||
* to avoid matching valid MPIDR[23:0] values.
|
* to avoid matching valid MPIDR[23:0] values.
|
||||||
*/
|
*/
|
||||||
for (j = 0; j < cpuidx; j++)
|
for (j = 0; j < cpuidx; j++)
|
||||||
if (WARN(tmp_map[j] == hwid, "Duplicate /cpu reg "
|
if (WARN(tmp_map[j] == hwid,
|
||||||
"properties in the DT\n"))
|
"Duplicate /cpu reg properties in the DT\n")) {
|
||||||
|
of_node_put(cpu);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Build a stashed array of MPIDR values. Numbering scheme
|
* Build a stashed array of MPIDR values. Numbering scheme
|
||||||
|
@ -143,6 +148,7 @@ void __init arm_dt_init_cpu_maps(void)
|
||||||
"max cores %u, capping them\n",
|
"max cores %u, capping them\n",
|
||||||
cpuidx, nr_cpu_ids)) {
|
cpuidx, nr_cpu_ids)) {
|
||||||
cpuidx = nr_cpu_ids;
|
cpuidx = nr_cpu_ids;
|
||||||
|
of_node_put(cpu);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue