IRQ fixes
Linus,
Please pull the latest irq/urgent Git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq-urgent-2026-07-05
for you to fetch changes up to 98bf7e54cec07d514b3575c11896a8b12d50ecc4:
Misc irqchip driver fixes:
- Fix a resource leak in the RISC-V imsic-early driver (Haoxiang Li)
- Fix an OF node reference leak in the ARM gic-v3-its driver (Yuho Choi)
- Fix a dangling handler function on module removal bug in the TS-4800 ARM board irqchip driver (Qingshuang Fu)
Thanks,
Ingo
------------------>
Haoxiang Li (1):
irqchip/irq-riscv-imsic-early: Fix fwnode leak on state setup failure
Qingshuang Fu (1):
irqchip/ts4800: Fix missing chained handler cleanup on remove
Yuho Choi (1):
irqchip/gic-v3-its: Fix OF node reference leak
drivers/irqchip/irq-gic-v3-its.c | 6 ++---- drivers/irqchip/irq-riscv-imsic-early.c | 15 ++++++++------- drivers/irqchip/irq-ts4800.c | 10 ++++++++++ 3 files changed, 20 insertions(+), 11 deletions(-)
drivers/irqchip/irq-gic-v3-its.c +2 -4
@@ -3290,11 +3290,9 @@ static void its_cpu_init_collection(struct its_node *its)/* avoid cross node collections and its mapping */ if (its->flags &ITS_FLAGS_WORKAROUND_CAVIUM_23144 ) { -struct device_node *cpu_node; + struct device_node *cpu_node __free(device_node) = of_get_cpu_node(cpu, NULL); - cpu_node =of_get_cpu_node (cpu,NULL ); -if (its->numa_node !=NUMA_NO_NODE && - its->numa_node !=of_node_to_nid (cpu_node)) +if (its->numa_node !=NUMA_NO_NODE && its->numa_node !=of_node_to_nid (cpu_node))return ; }
drivers/irqchip/irq-riscv-imsic-early.c +8 -7
@@ -272,16 +272,13 @@ static int __init imsic_early_acpi_init(union acpi_subtable_headers *header, rc =imsic_setup_state (imsic_acpi_fwnode, imsic);if (rc) {pr_err ("%pfwP: failed to setup state (error %d)\n" , imsic_acpi_fwnode, rc); -return rc; + goto cleanup; }/* Do early setup of IMSIC state and IPIs */ rc =imsic_early_probe (imsic_acpi_fwnode); -if (rc) { -irq_domain_free_fwnode (imsic_acpi_fwnode); - imsic_acpi_fwnode =NULL ; -return rc; - } +if (rc) + goto cleanup; rc =imsic_platform_acpi_probe (imsic_acpi_fwnode);
@@ -300,8 +297,12 @@ static int __init imsic_early_acpi_init(union acpi_subtable_headers *header,* DT where IPI works but MSI probe fails for some reason. */ return 0 ; -} +cleanup: +irq_domain_free_fwnode (imsic_acpi_fwnode); + imsic_acpi_fwnode =NULL ; + return rc; +}IRQCHIP_ACPI_DECLARE (riscv_imsic,ACPI_MADT_TYPE_IMSIC ,NULL ,1 , imsic_early_acpi_init);#endif
drivers/irqchip/irq-ts4800.c +10 -0
@@ -28,6 +28,7 @@ struct ts4800_irq_data {void __iomem *base;struct platform_device *pdev;struct irq_domain *domain; +unsigned int parent_irq; };static void ts4800_irq_mask (struct irq_data *d)
@@ -134,6 +135,7 @@ static int ts4800_ic_probe(struct platform_device *pdev)irq_set_chained_handler_and_data (parent_irq, ts4800_ic_chained_handle_irq, data); + data->parent_irq = parent_irq;platform_set_drvdata (pdev, data);return 0 ;
@@ -142,6 +144,14 @@ static int ts4800_ic_probe(struct platform_device *pdev)static void ts4800_ic_remove (struct platform_device *pdev) {struct ts4800_irq_data *data =platform_get_drvdata (pdev); +unsigned int hwirq; + +irq_set_chained_handler_and_data (data->parent_irq,NULL ,NULL ); + +for (hwirq =0 ; hwirq <8 ; hwirq++) +irq_dispose_mapping (irq_find_mapping (data->domain, hwirq)); + +irq_dispose_mapping (data->parent_irq);irq_domain_remove (data->domain); }
The pull request you sent on Sun, 5 Jul 2026 09:26:26 +0200:
The pull request you sent on Sun, 5 Jul 2026 09:26:26 +0200:
Quoted 1 line
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.gitirq-urgent-2026-07-05
has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/610533cb3bd0aba501d14552c3bf1485eb427455
Thank you!
Signature · 2 lines
Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/prtracker.html