[PATCH 09/16] irqchip/econet: clean up VEIC initialization
Haofeng Li <[email protected]> Tue, 14 Jul 2026 21:24:45 +0800
| Newsgroups | org.kernel.vger.linux-mips,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
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]> --- 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: -- 2.25.1