of/irq: Fix device node refcount leak in of_irq_get_affinity()

of_irq_parse_one() raises the refcount of the interrupt controller node
on success, and of_irq_get_affinity() returns without putting it, so
every call past the parse leaks one reference. It is reached from
platform_get_irq_affinity(), used by arm_pmu, arm_spe_pmu and
coresight-trbe.

Put it once irq_populate_fwspec_info() has run: no in-tree
->get_fwspec_info() returns a mask that lives in the node.

Fixes: 5404f5c06d ("of/irq: Add interrupt affinity reporting interface")
Signed-off-by: Fuad Tabba <fuad.tabba@linux.dev>
Link: https://patch.msgid.link/20260826112234.1033974-1-fuad.tabba@linux.dev
Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
This commit is contained in:
Fuad Tabba
2026-08-26 12:22:34 +01:00
committed by Rob Herring (Arm)
parent 660ee6792e
commit fe66c3ff85

View File

@@ -563,7 +563,9 @@ const struct cpumask *of_irq_get_affinity(struct device_node *dev, int index)
of_phandle_args_to_fwspec(oirq.np, oirq.args, oirq.args_count,
&fwspec);
if (irq_populate_fwspec_info(&fwspec, &info))
rc = irq_populate_fwspec_info(&fwspec, &info);
of_node_put(oirq.np);
if (rc)
return NULL;
return info.affinity;