linux-acpi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Marc Zyngier <maz@kernel.org>
To: linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, linux-acpi@vger.kernel.org
Cc: Thomas Gleixner <tglx@linutronix.de>,
	Mark Rutland <mark.rutland@arm.com>,
	Will Deacon <will@kernel.org>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	Rob Herring <robh@kernel.org>,
	Saravana Kannan <saravanak@google.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Sven Peter <sven@kernel.org>, Janne Grunau <j@jannau.net>,
	Suzuki K Poulose <suzuki.poulose@arm.com>,
	James Clark <james.clark@linaro.org>,
	Jonathan Cameron <jonathan.cameron@huawei.com>
Subject: [PATCH v3 15/26] genirq: Update request_percpu_nmi() to take an affinity
Date: Mon, 22 Sep 2025 09:28:22 +0100	[thread overview]
Message-ID: <20250922082833.2038905-16-maz@kernel.org> (raw)
In-Reply-To: <20250922082833.2038905-1-maz@kernel.org>

Continue spreading the notion of affinity to the percpu interrupt
request code by updating the call sites that use request_percpu_nmi()
(all two of them) to take an affinity pointer. This pointer is
firmly NULL for now.

Signed-off-by: Marc Zyngier <maz@kernel.org>
---
 arch/arm64/kernel/smp.c   |  2 +-
 drivers/perf/arm_pmu.c    |  2 +-
 include/linux/interrupt.h |  4 ++--
 kernel/irq/manage.c       | 12 +++++++-----
 4 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
index 68cea3a4a35ca..6fb838eee2e7d 100644
--- a/arch/arm64/kernel/smp.c
+++ b/arch/arm64/kernel/smp.c
@@ -1094,7 +1094,7 @@ static void ipi_setup_sgi(int ipi)
 	irq = ipi_irq_base + ipi;
 
 	if (ipi_should_be_nmi(ipi)) {
-		err = request_percpu_nmi(irq, ipi_handler, "IPI", &irq_stat);
+		err = request_percpu_nmi(irq, ipi_handler, "IPI", NULL, &irq_stat);
 		WARN(err, "Could not request IRQ %d as NMI, err=%d\n", irq, err);
 	} else {
 		err = request_percpu_irq(irq, ipi_handler, "IPI", &irq_stat);
diff --git a/drivers/perf/arm_pmu.c b/drivers/perf/arm_pmu.c
index 5c310e803dd78..22c601b46c858 100644
--- a/drivers/perf/arm_pmu.c
+++ b/drivers/perf/arm_pmu.c
@@ -659,7 +659,7 @@ int armpmu_request_irq(int irq, int cpu)
 			irq_ops = &pmunmi_ops;
 		}
 	} else if (armpmu_count_irq_users(irq) == 0) {
-		err = request_percpu_nmi(irq, handler, "arm-pmu", &cpu_armpmu);
+		err = request_percpu_nmi(irq, handler, "arm-pmu", NULL, &cpu_armpmu);
 
 		/* If cannot get an NMI, get a normal interrupt */
 		if (err) {
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
index 52147d5f432b3..81506ab759b81 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
@@ -197,8 +197,8 @@ request_percpu_irq(unsigned int irq, irq_handler_t handler,
 }
 
 extern int __must_check
-request_percpu_nmi(unsigned int irq, irq_handler_t handler,
-		   const char *devname, void __percpu *dev);
+request_percpu_nmi(unsigned int irq, irq_handler_t handler, const char *name,
+		   const struct cpumask *affinity, void __percpu *dev_id);
 
 extern const void *free_irq(unsigned int, void *);
 extern void free_percpu_irq(unsigned int, void __percpu *);
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index 5f4c651677436..b1a3140e5f3c9 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -2527,6 +2527,7 @@ EXPORT_SYMBOL_GPL(__request_percpu_irq);
  * @irq:	Interrupt line to allocate
  * @handler:	Function to be called when the IRQ occurs.
  * @name:	An ascii name for the claiming device
+ * @affinity:	A cpumask describing the target CPUs for this interrupt
  * @dev_id:	A percpu cookie passed back to the handler function
  *
  * This call allocates interrupt resources for a per CPU NMI. Per CPU NMIs
@@ -2543,8 +2544,8 @@ EXPORT_SYMBOL_GPL(__request_percpu_irq);
  * If the interrupt line cannot be used to deliver NMIs, function
  * will fail returning a negative value.
  */
-int request_percpu_nmi(unsigned int irq, irq_handler_t handler,
-		       const char *name, void __percpu *dev_id)
+int request_percpu_nmi(unsigned int irq, irq_handler_t handler, const char *name,
+		       const struct cpumask *affinity, void __percpu *dev_id)
 {
 	struct irqaction *action;
 	struct irq_desc *desc;
@@ -2561,12 +2562,13 @@ int request_percpu_nmi(unsigned int irq, irq_handler_t handler,
 	    !irq_supports_nmi(desc))
 		return -EINVAL;
 
-	/* The line cannot already be NMI */
-	if (irq_is_nmi(desc))
+	/* The line cannot be NMI already if the new request covers all CPUs */
+	if (irq_is_nmi(desc) &&
+	    (!affinity || cpumask_equal(affinity, cpu_possible_mask)))
 		return -EINVAL;
 
 	action = create_percpu_irqaction(handler, IRQF_NO_THREAD | IRQF_NOBALANCING,
-					 name, NULL, dev_id);
+					 name, affinity, dev_id);
 	if (!action)
 		return -ENOMEM;
 
-- 
2.47.3


  parent reply	other threads:[~2025-09-22  8:28 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-22  8:28 [PATCH v3 00/26] genirq: Add support for percpu_devid IRQ affinity Marc Zyngier
2025-09-22  8:28 ` [PATCH v3 01/26] irqdomain: Add firmware info reporting interface Marc Zyngier
2025-10-09 16:42   ` Jonathan Cameron
2025-09-22  8:28 ` [PATCH v3 02/26] ACPI: irq: Add IRQ affinity " Marc Zyngier
2025-09-22 17:10   ` Rafael J. Wysocki
2025-10-09 16:47   ` Jonathan Cameron
2025-09-22  8:28 ` [PATCH v3 03/26] of/irq: " Marc Zyngier
2025-10-09 16:49   ` Jonathan Cameron
2025-10-20 10:47     ` Marc Zyngier
2025-09-22  8:28 ` [PATCH v3 04/26] platform: Add firmware-agnostic irq and affinity retrieval interface Marc Zyngier
2025-10-09 17:03   ` Jonathan Cameron
2025-10-20 10:44     ` Marc Zyngier
2025-09-22  8:28 ` [PATCH v3 05/26] irqchip/gic-v3: Add FW info retrieval support Marc Zyngier
2025-09-22  8:28 ` [PATCH v3 06/26] irqchip/apple-aic: " Marc Zyngier
2025-09-22  8:28 ` [PATCH v3 07/26] coresight: trbe: Convert to new IRQ affinity retrieval API Marc Zyngier
2025-09-23 11:17   ` Suzuki K Poulose
2025-09-22  8:28 ` [PATCH v3 08/26] perf: arm_pmu: " Marc Zyngier
2025-10-10  3:39   ` Jinjie Ruan
2025-09-22  8:28 ` [PATCH v3 09/26] perf: arm_spe_pmu: " Marc Zyngier
2025-10-10  3:41   ` Jinjie Ruan
2025-09-22  8:28 ` [PATCH v3 10/26] irqchip/gic-v3: Switch high priority PPIs over to handle_percpu_devid_irq() Marc Zyngier
2025-09-22  8:28 ` [PATCH v3 11/26] genirq: Kill handle_percpu_devid_fasteoi_nmi() Marc Zyngier
2025-09-22  8:28 ` [PATCH v3 12/26] genirq: Merge irqaction::{dev_id,percpu_dev_id} Marc Zyngier
2025-09-22  8:28 ` [PATCH v3 13/26] genirq: Factor-in percpu irqaction creation Marc Zyngier
2025-10-10  3:59   ` Jinjie Ruan
2025-10-10  9:28     ` Marc Zyngier
2025-09-22  8:28 ` [PATCH v3 14/26] genirq: Add affinity to percpu_devid interrupt requests Marc Zyngier
2025-09-22  8:28 ` Marc Zyngier [this message]
2025-09-22  8:28 ` [PATCH v3 16/26] genirq: Allow per-cpu interrupt sharing for non-overlapping affinities Marc Zyngier
2025-09-22  8:28 ` [PATCH v3 17/26] genirq: Add request_percpu_irq_affinity() helper Marc Zyngier
2025-09-22  8:28 ` [PATCH v3 18/26] perf: arm_pmu: Request specific affinities for percpu NMI/IRQ Marc Zyngier
2025-09-22  8:28 ` [PATCH v3 19/26] perf: arm_spe_pmu: Request specific affinities for percpu IRQ Marc Zyngier
2025-09-22  8:28 ` [PATCH v3 20/26] coresight: trbe: " Marc Zyngier
2025-09-22  8:28 ` [PATCH v3 21/26] irqchip/gic-v3: Drop support for custom PPI partitions Marc Zyngier
2025-09-22  8:28 ` [PATCH v3 22/26] irqchip/apple-aic: Drop support for custom PMU irq partitions Marc Zyngier
2025-09-22 18:43   ` Sven Peter
2025-09-22 20:24     ` Marc Zyngier
2025-09-22  8:28 ` [PATCH v3 23/26] irqchip: Kill irq-partition-percpu Marc Zyngier
2025-09-22  8:28 ` [PATCH v3 24/26] genirq: Kill irq_{g,s}et_percpu_devid_partition() Marc Zyngier
2025-09-22  8:28 ` [PATCH v3 25/26] irqdomain: Kill of_node_to_fwnode() helper Marc Zyngier
2025-09-22  8:28 ` [PATCH v3 26/26] perf: arm_pmu: Kill last use of per-CPU cpu_armpmu pointer Marc Zyngier
2025-09-23 10:00 ` [PATCH v3 00/26] genirq: Add support for percpu_devid IRQ affinity Will Deacon
2025-09-23 10:09   ` Marc Zyngier
2025-09-26 10:38 ` Alexandru Elisei

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250922082833.2038905-16-maz@kernel.org \
    --to=maz@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=j@jannau.net \
    --cc=james.clark@linaro.org \
    --cc=jonathan.cameron@huawei.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=rafael@kernel.org \
    --cc=robh@kernel.org \
    --cc=saravanak@google.com \
    --cc=suzuki.poulose@arm.com \
    --cc=sven@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).