mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
Merge tag 'irq-urgent-2026-06-23' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull misc irqchip driver fixes from Ingo Molnar: - Fix indexing bug in the Crossbar irqchip driver (Bhargav Joshi) - Fix a parent domain resource leak in the Crossbar irqchip driver (Bhargav Joshi) - Fix resource leak in the ImgTec PDC irqchip driver's exit logic (Qingshuang Fu) - Fix macro name in comment block (Ethan Nelson-Moore) * tag 'irq-urgent-2026-06-23' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: genirq/msi: Correct CONFIG_PCI_MSI_ARCH_FALLBACKS macro name in comment irqchip/imgpdc: Fix resource leak, add missing chained handler cleanup on remove irqchip/crossbar: Fix parent domain resource leak irqchip/crossbar: Use correct index in crossbar_domain_free()
This commit is contained in:
commit
b59e4cae34
3 files changed
+15
-3
No files matched your search
@@ -158,11 +158,17 @@ static void crossbar_domain_free(struct irq_domain *domain, unsigned int virq,
|
||||
for (i = 0; i < nr_irqs; i++) {
|
||||
struct irq_data *d = irq_domain_get_irq_data(domain, virq + i);
|
||||
|
||||
/*
|
||||
* irq_map[] is indexed by GIC SPI number. The parent domain's
|
||||
* hwirq contains the GIC interrupt number (GIC SPI +
|
||||
* GIC_IRQ_START).
|
||||
*/
|
||||
cb->irq_map[d->parent_data->hwirq - GIC_IRQ_START] = IRQ_FREE;
|
||||
cb->write(d->parent_data->hwirq - GIC_IRQ_START, cb->safe_map);
|
||||
irq_domain_reset_irq_data(d);
|
||||
cb->irq_map[d->hwirq] = IRQ_FREE;
|
||||
cb->write(d->hwirq, cb->safe_map);
|
||||
}
|
||||
raw_spin_unlock(&cb->lock);
|
||||
irq_domain_free_irqs_parent(domain, virq, nr_irqs);
|
||||
}
|
||||
|
||||
static int crossbar_domain_translate(struct irq_domain *d,
|
||||
|
||||
@@ -378,6 +378,7 @@ static int pdc_intc_probe(struct platform_device *pdev)
|
||||
dev_err(&pdev->dev, "cannot add IRQ domain\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
priv->domain->flags |= IRQ_DOMAIN_FLAG_DESTROY_GC;
|
||||
|
||||
/*
|
||||
* Set up 2 generic irq chips with 2 chip types.
|
||||
@@ -465,6 +466,11 @@ static void pdc_intc_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct pdc_intc_priv *priv = platform_get_drvdata(pdev);
|
||||
|
||||
for (unsigned int i = 0; i < priv->nr_perips; ++i)
|
||||
irq_set_chained_handler_and_data(priv->perip_irqs[i], NULL, NULL);
|
||||
|
||||
irq_set_chained_handler_and_data(priv->syswake_irq, NULL, NULL);
|
||||
|
||||
irq_domain_remove(priv->domain);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -591,7 +591,7 @@ void msi_device_destroy_sysfs(struct device *dev)
|
||||
msi_for_each_desc(desc, dev, MSI_DESC_ALL)
|
||||
msi_sysfs_remove_desc(dev, desc);
|
||||
}
|
||||
#endif /* CONFIG_PCI_MSI_ARCH_FALLBACK || CONFIG_PCI_XEN */
|
||||
#endif /* CONFIG_PCI_MSI_ARCH_FALLBACKS || CONFIG_PCI_XEN */
|
||||
#else /* CONFIG_SYSFS */
|
||||
static inline int msi_sysfs_create_group(struct device *dev) { return 0; }
|
||||
static inline int msi_sysfs_populate_desc(struct device *dev, struct msi_desc *desc) { return 0; }
|
||||
|
||||
Reference in new issue
Block a user