mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 04:34:03 +02:00
Generic interrupt subsystem updates:
- Remove pointless NULL checks of the kstats_irqs field. That's a
historical left over and not longer required.
- Add Radu Rendec as reviewer. Radu thankfully stepped up to help
reviewing the interrupt core and the related drivers code.
- The usual small improvements and fixes
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEQp8+kY+LLUocC4bMphj1TA10mKEFAmqCtM8QHHRnbHhAa2Vy
bmVsLm9yZwAKCRCmGPVMDXSYoV4SD/465axAMEli+6LbBcxWVmX1SCUasn+VM/2g
VUUPONEDuf/Ucig+OC1QlvfZ/5d9pLiIwh3TakWPbkFtZpyfi60KiEQw5OW67TYB
5TYgJI8BquIAQGzjUCKIzZmEvQhbuJzRjz07CIZnCtQBK3b/ftSDCwm6ynhhYRQC
5yX/ay84pHPCyWVupkXV8jwjFm6v28U17j8TVd2VwEIOrEBa8dbOxOqUlRzrjbwE
2dmo7r3BPSpyI/VpYiOW3wEXYq03+sR3MTNXQ9VWqLVcaUJUdDnbTnXqMbaXpGcO
oV4vnuPv2Ah2TkB8xF9KTcyCKJbS2BKb5BtUXEJBQ/kPnB1wD712N2oZNuaN3omF
SM4QoWojDpNPrPYWG99T4sNbemxfiyhIJzPSE/SgE6g0cWxh3d3wh5VfOnkp4ige
gZKHVz7EcpjcyVz4xgYhaZk+7FmzAb6FMi4UhLZ9KHbAhdH87LSDDxvcUua2X3Js
v1RdV3pkH1M3tBcLfO0D1neGL4VCL9zs8Ldf0jJBvcOy8kmjcs4uCll54hEbCQwI
N7Qt7JF/r1LwxJRMC4OzsXp2upCbT5gaCOeG2HJuQUSy//0RL72NzjQe4cJSw5ya
5Xnv5d/6L+hnwkOo7LPp9JYORXZ673D/vQgBg9Nf64Iz0i9SWnNB/fsmiSoTjw/c
ZmqKGgEyHA==
=6wX8
-----END PGP SIGNATURE-----
Merge tag 'irq-core-2026-08-17' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull generic interrupt subsystem updates from Thomas Gleixner:
- Remove pointless NULL checks of the kstats_irqs field. That's a
historical left over and not longer required.
- Add Radu Rendec as reviewer. Radu thankfully stepped up to help
reviewing the interrupt core and the related drivers code.
- The usual small improvements and fixes
* tag 'irq-core-2026-08-17' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
MAINTAINERS: Add Radu Rendec as reviewer for the interrupt subsystem
genirq/msi: Move misplaced EXPORT_SYMBOL_GPL for msi_domain_free_irqs_all()
parisc: Remove unnecessary NULL check of the kstat_irqs field
genirq: Remove unnecessary NULL check of the kstat_irqs field
irqdomain: Remove unnedded NULL check in __irq_domain_[de]activate_irq()
genirq/manage: Use irqd_get_parent_data() helper in __irq_get_irqchip_state()
irqdomain: Plug leak in irq_domain_alloc_irqs_locked() error path
This commit is contained in:
commit
762fffa407
|
|
@ -13701,6 +13701,7 @@ F: sound/soc/codecs/sma*
|
|||
|
||||
IRQ DOMAINS (IRQ NUMBER MAPPING LIBRARY)
|
||||
M: Thomas Gleixner <tglx@kernel.org>
|
||||
R: Radu Rendec <radu@rendec.net>
|
||||
S: Maintained
|
||||
P: Documentation/process/maintainer-tip.rst
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq/core
|
||||
|
|
@ -13712,6 +13713,7 @@ F: kernel/irq/msi.c
|
|||
|
||||
IRQ SUBSYSTEM
|
||||
M: Thomas Gleixner <tglx@kernel.org>
|
||||
R: Radu Rendec <radu@rendec.net>
|
||||
L: linux-kernel@vger.kernel.org
|
||||
S: Maintained
|
||||
P: Documentation/process/maintainer-tip.rst
|
||||
|
|
@ -13726,6 +13728,7 @@ F: lib/group_cpus.c
|
|||
|
||||
IRQCHIP DRIVERS
|
||||
M: Thomas Gleixner <tglx@kernel.org>
|
||||
R: Radu Rendec <radu@rendec.net>
|
||||
L: linux-kernel@vger.kernel.org
|
||||
S: Maintained
|
||||
P: Documentation/process/maintainer-tip.rst
|
||||
|
|
|
|||
|
|
@ -343,7 +343,7 @@ static int smp_boot_one_cpu(int cpuid, struct task_struct *idle)
|
|||
for (i = 0; i < NR_IRQS; i++) {
|
||||
struct irq_desc *desc = irq_to_desc(i);
|
||||
|
||||
if (desc && desc->kstat_irqs)
|
||||
if (desc)
|
||||
*per_cpu_ptr(desc->kstat_irqs, cpuid) = (struct irqstat) { };
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -146,7 +146,7 @@ extern struct irq_desc irq_desc[NR_IRQS];
|
|||
static inline unsigned int irq_desc_kstat_cpu(struct irq_desc *desc,
|
||||
unsigned int cpu)
|
||||
{
|
||||
return desc->kstat_irqs ? per_cpu(desc->kstat_irqs->cnt, cpu) : 0;
|
||||
return per_cpu(desc->kstat_irqs->cnt, cpu);
|
||||
}
|
||||
|
||||
static inline struct irq_desc *irq_data_to_desc(struct irq_data *data)
|
||||
|
|
|
|||
|
|
@ -1004,7 +1004,7 @@ unsigned int kstat_irqs_cpu(unsigned int irq, int cpu)
|
|||
{
|
||||
struct irq_desc *desc = irq_to_desc(irq);
|
||||
|
||||
return desc && desc->kstat_irqs ? per_cpu(desc->kstat_irqs->cnt, cpu) : 0;
|
||||
return desc ? irq_desc_kstat_cpu(desc, cpu) : 0;
|
||||
}
|
||||
|
||||
static unsigned int kstat_irqs_desc(struct irq_desc *desc, const struct cpumask *cpumask)
|
||||
|
|
@ -1026,7 +1026,7 @@ static unsigned int kstat_irqs(unsigned int irq)
|
|||
{
|
||||
struct irq_desc *desc = irq_to_desc(irq);
|
||||
|
||||
if (!desc || !desc->kstat_irqs)
|
||||
if (!desc)
|
||||
return 0;
|
||||
return kstat_irqs_desc(desc, cpu_possible_mask);
|
||||
}
|
||||
|
|
@ -1038,18 +1038,15 @@ void kstat_snapshot_irqs(void)
|
|||
struct irq_desc *desc;
|
||||
unsigned int irq;
|
||||
|
||||
for_each_irq_desc(irq, desc) {
|
||||
if (!desc->kstat_irqs)
|
||||
continue;
|
||||
for_each_irq_desc(irq, desc)
|
||||
this_cpu_write(desc->kstat_irqs->ref, this_cpu_read(desc->kstat_irqs->cnt));
|
||||
}
|
||||
}
|
||||
|
||||
unsigned int kstat_get_irq_since_snapshot(unsigned int irq)
|
||||
{
|
||||
struct irq_desc *desc = irq_to_desc(irq);
|
||||
|
||||
if (!desc || !desc->kstat_irqs)
|
||||
if (!desc)
|
||||
return 0;
|
||||
return this_cpu_read(desc->kstat_irqs->cnt) - this_cpu_read(desc->kstat_irqs->ref);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1658,7 +1658,7 @@ static int irq_domain_alloc_irqs_locked(struct irq_domain *domain, int irq_base,
|
|||
for (i = 0; i < nr_irqs; i++) {
|
||||
ret = irq_domain_trim_hierarchy(virq + i);
|
||||
if (ret)
|
||||
goto out_free_irq_data;
|
||||
goto out_free_irqs;
|
||||
}
|
||||
|
||||
for (i = 0; i < nr_irqs; i++)
|
||||
|
|
@ -1666,6 +1666,8 @@ static int irq_domain_alloc_irqs_locked(struct irq_domain *domain, int irq_base,
|
|||
|
||||
return virq;
|
||||
|
||||
out_free_irqs:
|
||||
irq_domain_free_irqs_hierarchy(domain, virq, nr_irqs);
|
||||
out_free_irq_data:
|
||||
irq_domain_free_irq_data(virq, nr_irqs);
|
||||
out_free_desc:
|
||||
|
|
@ -1963,7 +1965,7 @@ EXPORT_SYMBOL_GPL(irq_domain_free_irqs_parent);
|
|||
|
||||
static void __irq_domain_deactivate_irq(struct irq_data *irq_data)
|
||||
{
|
||||
if (irq_data && irq_data->domain) {
|
||||
if (irq_data->domain) {
|
||||
struct irq_domain *domain = irq_data->domain;
|
||||
|
||||
if (domain->ops->deactivate)
|
||||
|
|
@ -1977,7 +1979,7 @@ static int __irq_domain_activate_irq(struct irq_data *irqd, bool reserve)
|
|||
{
|
||||
int ret = 0;
|
||||
|
||||
if (irqd && irqd->domain) {
|
||||
if (irqd->domain) {
|
||||
struct irq_domain *domain = irqd->domain;
|
||||
|
||||
if (irqd->parent_data)
|
||||
|
|
|
|||
|
|
@ -2703,11 +2703,7 @@ static int __irq_get_irqchip_state(struct irq_data *data, enum irqchip_irq_state
|
|||
return -ENODEV;
|
||||
if (chip->irq_get_irqchip_state)
|
||||
break;
|
||||
#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
|
||||
data = data->parent_data;
|
||||
#else
|
||||
data = NULL;
|
||||
#endif
|
||||
data = irqd_get_parent_data(data);
|
||||
} while (data);
|
||||
|
||||
if (data)
|
||||
|
|
|
|||
|
|
@ -1683,7 +1683,6 @@ void msi_domain_free_irqs_range(struct device *dev, unsigned int domid,
|
|||
guard(msi_descs_lock)(dev);
|
||||
msi_domain_free_irqs_range_locked(dev, domid, first, last);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(msi_domain_free_irqs_all);
|
||||
|
||||
/**
|
||||
* msi_domain_free_irqs_all_locked - Free all interrupts from a MSI interrupt domain
|
||||
|
|
@ -1714,6 +1713,7 @@ void msi_domain_free_irqs_all(struct device *dev, unsigned int domid)
|
|||
guard(msi_descs_lock)(dev);
|
||||
msi_domain_free_irqs_all_locked(dev, domid);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(msi_domain_free_irqs_all);
|
||||
|
||||
/**
|
||||
* msi_device_domain_free_wired - Free a wired interrupt in @domain
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user