Messages in this thread Patch in this message | ![/](/images/icornerl.gif) | | From | Clément Léger <> | Subject | [PATCH] of/irq: add missing of_node_put() for interrupt parent node | Date | Tue, 17 Jan 2023 15:49:29 +0100 |
| |
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@bootlin.com> ---
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
| ![\](/images/icornerr.gif) |