From nobody Mon Sep 28 21:09:37 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 12DA83AA4FA for ; Mon, 17 Aug 2026 11:23:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786965815; cv=none; b=gDKRGS3bxV1sqkx4ZIrcfJMKfAZPf+XJipEy75sGv7/DAtnU3P9CbgyP6gOCO/5f6B1YRIKcAtVAdvHVn5QUy/HnsnV/f4+mbkZCSqQpwTbO6d8aOUKIQl24VazFvvTpSV0TLP3CmSaF+OVhqy+xLxWxuKWJW/lWM2lBrzpA210= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786965815; c=relaxed/simple; bh=MRi9DVOT92WrZQ9ncWbLrcQ0AHgLLoczpwZcV2SkKjA=; h=Date:From:To:Cc:Subject:References:Message-ID:Content-Type: MIME-Version; b=Dk60W+USeQdsZxWafeqxKakOF9PCvmxU3X6Pxbzxn6WTW+cBSeNytgF23C9eqFJc++KFBaQ3tScWC+bwzFkH6RT/XBCP+K2XlkBZTocNhbjn72gmwmS1Mvj2v2z8umTVMedDzX3pJS12SHFXDY9EhVdEgIp5Y2/JN776/Qxqs8k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=eK62UCJL; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="eK62UCJL" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4DA191F000E9; Mon, 17 Aug 2026 11:23:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786965814; bh=bmZtCMR8Td7TXVs7l1a3QDqOG7zVhoPvdhBtWT7Ec1U=; h=Date:From:To:Cc:Subject:References; b=eK62UCJLHpPKhWcwnb7v3zp2DpWC5Vfn693x+1NVZetSc5nyM7Uf0I89uPKaS+LFH ei3qR5ycVxgVaQi3p68rJL7iyVN12Vj7QwvCwsl0S6FZVV9SNq/wzhLDsfXSONiNHK Wx7OnpZc1CYtyRgAbdMAykIs0cwsYpRDE/wmZzhl1zECZiTlbhzIFqnxzQMP9KH8N6 rfVq1bjFHJr1ryXJ2+AXz75TStsEtSc8uwOWO5YbFYrzV5cmOA9AmUNXOsJdrxp5uz aWt1p94twyQ5/Rj1tNzNYEnzd0Bn0HYMd05MIwg70IuniPrwh9BKkOZ7OlaYW51Qrs yb0KAG+p1DPSg== Date: Mon, 17 Aug 2026 13:23:31 +0200 From: Thomas Gleixner To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, x86@kernel.org Subject: [GIT pull] irq/core for v7.3-rc1 References: <178696575118.1270771.17154447195623102039.tglx@fw13> Message-ID: <178696575359.1270771.7105668036954928281.tglx@fw13> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Linus, please pull the latest irq/core branch from: git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq-core-2026-= 08-17 up to: 1ad6d4a722f5: MAINTAINERS: Add Radu Rendec as reviewer for the inte= rrupt subsystem 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 Thanks, tglx ------------------> Kemeng Shi (3): irqdomain: Plug leak in irq_domain_alloc_irqs_locked() error path genirq/manage: Use irqd_get_parent_data() helper in __irq_get_irqchip= _state() irqdomain: Remove unnedded NULL check in __irq_domain_[de]activate_ir= q() Li RongQing (1): genirq/msi: Move misplaced EXPORT_SYMBOL_GPL for msi_domain_free_irqs= _all() Radu Rendec (2): genirq: Remove unnecessary NULL check of the kstat_irqs field parisc: Remove unnecessary NULL check of the kstat_irqs field Thomas Gleixner (1): MAINTAINERS: Add Radu Rendec as reviewer for the interrupt subsystem MAINTAINERS | 3 +++ arch/parisc/kernel/smp.c | 2 +- include/linux/irqdesc.h | 2 +- kernel/irq/irqdesc.c | 11 ++++------- kernel/irq/irqdomain.c | 8 +++++--- kernel/irq/manage.c | 6 +----- kernel/irq/msi.c | 2 +- 7 files changed, 16 insertions(+), 18 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index 15011f5752a9..ebf9d388e939 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -13712,6 +13712,7 @@ F: sound/soc/codecs/sma* =20 IRQ DOMAINS (IRQ NUMBER MAPPING LIBRARY) M: Thomas Gleixner +R: Radu Rendec S: Maintained P: Documentation/process/maintainer-tip.rst T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq/core @@ -13723,6 +13724,7 @@ F: kernel/irq/msi.c =20 IRQ SUBSYSTEM M: Thomas Gleixner +R: Radu Rendec L: linux-kernel@vger.kernel.org S: Maintained P: Documentation/process/maintainer-tip.rst @@ -13737,6 +13739,7 @@ F: lib/group_cpus.c =20 IRQCHIP DRIVERS M: Thomas Gleixner +R: Radu Rendec L: linux-kernel@vger.kernel.org S: Maintained P: Documentation/process/maintainer-tip.rst diff --git a/arch/parisc/kernel/smp.c b/arch/parisc/kernel/smp.c index b2d12ab728b1..36be17e32948 100644 --- a/arch/parisc/kernel/smp.c +++ b/arch/parisc/kernel/smp.c @@ -343,7 +343,7 @@ static int smp_boot_one_cpu(int cpuid, struct task_stru= ct *idle) for (i =3D 0; i < NR_IRQS; i++) { struct irq_desc *desc =3D irq_to_desc(i); =20 - if (desc && desc->kstat_irqs) + if (desc) *per_cpu_ptr(desc->kstat_irqs, cpuid) =3D (struct irqstat) { }; } #endif diff --git a/include/linux/irqdesc.h b/include/linux/irqdesc.h index 8080db17c1b1..779d6023c5c2 100644 --- a/include/linux/irqdesc.h +++ b/include/linux/irqdesc.h @@ -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); } =20 static inline struct irq_desc *irq_data_to_desc(struct irq_data *data) diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c index 80ef4e27dcf4..3a818f07a101 100644 --- a/kernel/irq/irqdesc.c +++ b/kernel/irq/irqdesc.c @@ -1004,7 +1004,7 @@ unsigned int kstat_irqs_cpu(unsigned int irq, int cpu) { struct irq_desc *desc =3D irq_to_desc(irq); =20 - return desc && desc->kstat_irqs ? per_cpu(desc->kstat_irqs->cnt, cpu) : 0; + return desc ? irq_desc_kstat_cpu(desc, cpu) : 0; } =20 static unsigned int kstat_irqs_desc(struct irq_desc *desc, const struct cp= umask *cpumask) @@ -1026,7 +1026,7 @@ static unsigned int kstat_irqs(unsigned int irq) { struct irq_desc *desc =3D irq_to_desc(irq); =20 - 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; =20 - 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->cn= t)); - } } =20 unsigned int kstat_get_irq_since_snapshot(unsigned int irq) { struct irq_desc *desc =3D irq_to_desc(irq); =20 - if (!desc || !desc->kstat_irqs) + if (!desc) return 0; return this_cpu_read(desc->kstat_irqs->cnt) - this_cpu_read(desc->kstat_i= rqs->ref); } diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c index f15c9f1223bb..57c819da30c2 100644 --- a/kernel/irq/irqdomain.c +++ b/kernel/irq/irqdomain.c @@ -1658,7 +1658,7 @@ static int irq_domain_alloc_irqs_locked(struct irq_do= main *domain, int irq_base, for (i =3D 0; i < nr_irqs; i++) { ret =3D irq_domain_trim_hierarchy(virq + i); if (ret) - goto out_free_irq_data; + goto out_free_irqs; } =20 for (i =3D 0; i < nr_irqs; i++) @@ -1666,6 +1666,8 @@ static int irq_domain_alloc_irqs_locked(struct irq_do= main *domain, int irq_base, =20 return virq; =20 +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); =20 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 =3D irq_data->domain; =20 if (domain->ops->deactivate) @@ -1977,7 +1979,7 @@ static int __irq_domain_activate_irq(struct irq_data = *irqd, bool reserve) { int ret =3D 0; =20 - if (irqd && irqd->domain) { + if (irqd->domain) { struct irq_domain *domain =3D irqd->domain; =20 if (irqd->parent_data) diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index 7eb07e3bdb4c..4fa569db8ec7 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -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 =3D data->parent_data; -#else - data =3D NULL; -#endif + data =3D irqd_get_parent_data(data); } while (data); =20 if (data) diff --git a/kernel/irq/msi.c b/kernel/irq/msi.c index 903be7289c53..fb5f372215bf 100644 --- a/kernel/irq/msi.c +++ b/kernel/irq/msi.c @@ -1683,7 +1683,6 @@ void msi_domain_free_irqs_range(struct device *dev, u= nsigned 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); =20 /** * msi_domain_free_irqs_all_locked - Free all interrupts from a MSI interr= upt domain @@ -1714,6 +1713,7 @@ void msi_domain_free_irqs_all(struct device *dev, uns= igned int domid) guard(msi_descs_lock)(dev); msi_domain_free_irqs_all_locked(dev, domid); } +EXPORT_SYMBOL_GPL(msi_domain_free_irqs_all); =20 /** * msi_device_domain_free_wired - Free a wired interrupt in @domain