The iterator correctly handles of_node_put() calls.
Remove it before continue'ing the loop.
Without this patch you get the following with
CONFIG_OF_DYNAMIC set:
ERROR: Bad of_node_put() on /ocp/timer@
44e31000!
[<
c001329c>] (unwind_backtrace+0x0/0xe0) from [<
c03dd8f0>] (of_node_release+0x2c/0xa0)!
[<
c03dd8f0>] (of_node_release+0x2c/0xa0) from [<
c03ddea0>] (of_find_matching_node_and_match+0x78/0x90)!
[<
c03ddea0>] (of_find_matching_node_and_match+0x78/0x90) from [<
c06d349c>] (omap_get_timer_dt+0x78/0x90)!
[<
c06d349c>] (omap_get_timer_dt+0x78/0x90) from [<
c06d3664>] (omap_dm_timer_init_one.clone.2+0x34/0x2bc)!
[<
c06d3664>] (omap_dm_timer_init_one.clone.2+0x34/0x2bc) from [<
c06d3a2c>] (omap2_gptimer_clocksource_init.clone.4+0x24/0xa8)!
[<
c06d3a2c>] (omap2_gptimer_clocksource_init.clone.4+0x24/0xa8) from [<
c06cca58>] (time_init+0x20/0x30)!
[<
c06cca58>] (time_init+0x20/0x30) from [<
c06c9690>] (start_kernel+0x1a8/0x2fc)!
Signed-off-by: Pantelis Antoniou <panto@antoniou-consulting.com>
Acked-by: Jon Hunter <jon-hunter@ti.com>
[tony@atomide.com: updated description per Jon]
Signed-off-by: Tony Lindgren <tony@atomide.com>
struct device_node *np;
for_each_matching_node(np, match) {
- if (!of_device_is_available(np)) {
- of_node_put(np);
+ if (!of_device_is_available(np))
continue;
- }
- if (property && !of_get_property(np, property, NULL)) {
- of_node_put(np);
+ if (property && !of_get_property(np, property, NULL))
continue;
- }
of_add_property(np, &device_disabled);
return np;