After calling of_irq_parse_one(), the node provided in the of_phandle_args has a refcount increment by one. Add missing of_node_put in of_irq_get() to decrement the refcount once used. Signed-off-by: Clément Léger <clement.leger@xxxxxxxxxxx> --- While debugging a refcount problem with OF_DYNAMIC enabled (which is actually the only case were node refcount are really used), I noticed that platform_get_irq() was actually incrementing the refcount of an interrupt controller node. Digging into that function shows that it calls of_irq_get() which calls of_irq_parse_one() and finally of_irq_parse_raw(). Since it seems sane that the node returned in the of_phandle_args has a refcount incremented, I thought it is better to put the of_node_put() in the user even though it was hard to find any user doing so. drivers/of/irq.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/of/irq.c b/drivers/of/irq.c index e9bf5236ed89..174900072c18 100644 --- a/drivers/of/irq.c +++ b/drivers/of/irq.c @@ -438,10 +438,16 @@ int of_irq_get(struct device_node *dev, int index) return rc; domain = irq_find_host(oirq.np); - if (!domain) - return -EPROBE_DEFER; + if (!domain) { + rc = -EPROBE_DEFER; + goto out; + } - return irq_create_of_mapping(&oirq); + rc = irq_create_of_mapping(&oirq); +out: + of_node_put(oirq.np); + + return rc; } EXPORT_SYMBOL_GPL(of_irq_get); -- 2.39.0