Re: [PATCH 09/16] irqchip/econet: clean up VEIC initialization
Caleb James DeLisle <[email protected]> Thu, 23 Jul 2026 03:09:41 +0200
| Newsgroups | org.kernel.vger.linux-mips,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
On 14/07/2026 15:24, Haofeng Li wrote: > From: Haofeng Li <[email protected]> > > When cpu_has_veic is set, econet_cpu_init() failure returns without > tearing down the already created IRQ domain, ioremap, memory region, > or parent IRQ mapping. The parent interrupt-controller node obtained > while finding the IPI domain also retains an OF node reference on both > success and failure. > > Drop the parent node reference after the domain lookup and route VEIC > initialization failures through the existing resource cleanup labels > after removing the IRQ domain. > > Fixes: 2ee2a685ee83 ("irqchip/econet-en751221: Support MIPS 34Kc VEIC mode") > > Signed-off-by: Haofeng Li <[email protected]> Tested-by: Caleb James DeLisle <[email protected]> > --- > drivers/irqchip/irq-econet-en751221.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/irqchip/irq-econet-en751221.c b/drivers/irqchip/irq-econet-en751221.c > index 2ca5d901866f..f6f890b3f881 100644 > --- a/drivers/irqchip/irq-econet-en751221.c > +++ b/drivers/irqchip/irq-econet-en751221.c > @@ -378,6 +378,7 @@ static int __init econet_cpu_init(struct device_node *node) > } > > econet_intc.ipi_domain = irq_find_matching_host(parent_intc, DOMAIN_BUS_IPI); > + of_node_put(parent_intc); > if (!econet_intc.ipi_domain) { > pr_err("%pOF: Failed to find parent %s\n", node, "IPI domain"); > return -ENODEV; > @@ -459,7 +460,7 @@ static int __init econet_intc_of_init(struct device_node *node, struct device_no > ret = econet_cpu_init(node); > > if (ret) > - return ret; > + goto err_remove_domain; > } else { > irq_set_chained_handler_and_data(irq, econet_intc_from_parent, domain); > } > @@ -468,6 +469,8 @@ static int __init econet_intc_of_init(struct device_node *node, struct device_no > > return 0; > > +err_remove_domain: > + irq_domain_remove(domain); > err_unmap: > iounmap(econet_intc.membase); > err_release: