All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marc Zyngier <maz@kernel.org>
To: Thomas Gleixner <tglx@linutronix.de>,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, linux-acpi@vger.kernel.org
Cc: 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>
Subject: Re: [PATCH 15/25] genirq: Allow per-cpu interrupt sharing for non-overlapping affinities
Date: Wed, 10 Sep 2025 09:28:03 +0100	[thread overview]
Message-ID: <86ecsed84s.wl-maz@kernel.org> (raw)
In-Reply-To: <20250908163127.2462948-16-maz@kernel.org>

On Mon, 08 Sep 2025 17:31:17 +0100,
Marc Zyngier <maz@kernel.org> wrote:
> 
> Interrupt sharing for percpu-devid interrupts is forbidden, and
> for good reasons. These are interrupts generated *from* a CPU and
> handled by itself (timer, for example). Nobody in their right mind
> would put two devices on the same pin (and if they have, they get to
> keep the pieces...).
> 
> But this also prevents more benign cases, where devices are connected
> to groups of CPUs, and for which the affinities are not overlapping.
> Effectively, the only thing they share is the interrupt number, and
> nothing else.
> 
> Let's tweak the definition of IRQF_SHARED applied to percpu_devid
> interrupts to allow this particular case. This results in extra
> validation at the point of the interrupt being setup and freed,
> as well as a tiny bit of extra complexity for interrupts at handling
> time (to pick the correct irqaction).
> 
> Signed-off-by: Marc Zyngier <maz@kernel.org>
> ---
>  kernel/irq/chip.c   |  8 ++++--
>  kernel/irq/manage.c | 67 +++++++++++++++++++++++++++++++++++++--------
>  2 files changed, 61 insertions(+), 14 deletions(-)
> 
> diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
> index 0d0276378c707..af90dd440d5ee 100644
> --- a/kernel/irq/chip.c
> +++ b/kernel/irq/chip.c
> @@ -897,8 +897,9 @@ void handle_percpu_irq(struct irq_desc *desc)
>  void handle_percpu_devid_irq(struct irq_desc *desc)
>  {
>  	struct irq_chip *chip = irq_desc_get_chip(desc);
> -	struct irqaction *action = desc->action;
>  	unsigned int irq = irq_desc_get_irq(desc);
> +	unsigned int cpu = smp_processor_id();
> +	struct irqaction *action;
>  	irqreturn_t res;
>  
>  	/*
> @@ -910,12 +911,15 @@ void handle_percpu_devid_irq(struct irq_desc *desc)
>  	if (chip->irq_ack)
>  		chip->irq_ack(&desc->irq_data);
>  
> +	for (action = desc->action; action; action = action->next)
> +		if (cpumask_test_cpu(cpu, action->affinity))
> +			break;
> +
>  	if (likely(action)) {
>  		trace_irq_handler_entry(irq, action);
>  		res = action->handler(irq, raw_cpu_ptr(action->percpu_dev_id));
>  		trace_irq_handler_exit(irq, action, res);
>  	} else {
> -		unsigned int cpu = smp_processor_id();
>  		bool enabled = cpumask_test_cpu(cpu, desc->percpu_enabled);
>  
>  		if (enabled)

As Will points out off the list, the above lacks the a similar
handling for percpu_devid NMIs, leading to NMIs that are only handled
on the first affinity group.

It's easy enough to move the above to common code and share it with
handle_percpu_devid_fasteoi_nmi(), but at this point there is hardly
any difference with handle_percpu_devid_irq().

Any objection to simply killing the NMI version?

Thanks,

	M.

-- 
Without deviation from the norm, progress is not possible.

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

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-08 16:31 [PATCH 00/25] genirq: Add support for percpu_devid IRQ affinity Marc Zyngier
2025-09-08 16:31 ` [PATCH 01/25] irqdomain: Add firmware info reporting interface Marc Zyngier
2025-09-09  9:18   ` Thomas Gleixner
2025-09-09  9:24     ` Thomas Gleixner
2025-09-11 14:13     ` Marc Zyngier
2025-09-11 15:49       ` Thomas Gleixner
2025-09-08 16:31 ` [PATCH 02/25] ACPI: irq: Add IRQ affinity " Marc Zyngier
2025-09-08 17:20   ` Rafael J. Wysocki
2025-09-08 16:31 ` [PATCH 03/25] of/irq: " Marc Zyngier
2025-09-08 16:31 ` [PATCH 04/25] platform: Add firmware-agnostic irq and affinity retrieval interface Marc Zyngier
2025-09-08 16:31 ` [PATCH 05/25] irqchip/gic-v3: Add FW info retrieval support Marc Zyngier
2025-09-09  9:37   ` Thomas Gleixner
2025-09-08 16:31 ` [PATCH 06/25] irqchip/apple-aic: " Marc Zyngier
2025-09-08 16:31 ` [PATCH 07/25] coresight: trbe: Convert to new IRQ affinity retrieval API Marc Zyngier
2025-09-08 16:31 ` [PATCH 08/25] perf: arm_pmu: " Marc Zyngier
2025-09-08 16:31 ` [PATCH 09/25] perf: arm_spe_pmu: " Marc Zyngier
2025-09-08 16:31 ` [PATCH 10/25] perf: arm_pmu: Add PMU/CPU affinity tracking Marc Zyngier
2025-09-08 16:31 ` [PATCH 11/25] genirq: Merge irqaction::{dev_id,percpu_dev_id} Marc Zyngier
2025-09-08 16:31 ` [PATCH 12/25] genirq: Factor-in percpu irqaction creation Marc Zyngier
2025-09-09  9:41   ` Thomas Gleixner
2025-09-08 16:31 ` [PATCH 13/25] genirq: Add affinity to percpu_devid interrupt requests Marc Zyngier
2025-09-08 16:31 ` [PATCH 14/25] genirq: Update request_percpu_nmi() to take an affinity Marc Zyngier
2025-09-09  9:45   ` Thomas Gleixner
2025-09-09 11:21     ` Marc Zyngier
2025-09-08 16:31 ` [PATCH 15/25] genirq: Allow per-cpu interrupt sharing for non-overlapping affinities Marc Zyngier
2025-09-10  8:28   ` Marc Zyngier [this message]
2025-09-10 14:47     ` Thomas Gleixner
2025-09-10 15:44       ` Marc Zyngier
2025-09-08 16:31 ` [PATCH 16/25] genirq: Add request_percpu_irq_affinity() helper Marc Zyngier
2025-09-08 16:31 ` [PATCH 17/25] perf: arm_pmu: Use a backend-specific pointer for percpu interrupt request Marc Zyngier
2025-09-08 16:31 ` [PATCH 18/25] perf: arm_pmu: Request specific affinities for percpu NMI/IRQ Marc Zyngier
2025-09-08 16:31 ` [PATCH 19/25] perf: arm_spe_pmu: Request specific affinities for percpu IRQ Marc Zyngier
2025-09-08 16:31 ` [PATCH 20/25] coresight: trbe: " Marc Zyngier
2025-09-08 16:31 ` [PATCH 21/25] irqchip/gic-v3: Drop support for custom PPI partitions Marc Zyngier
2025-09-08 16:31 ` [PATCH 22/25] irqchip/apple-aic: Drop support for custom PMU irq partitions Marc Zyngier
2025-09-08 16:31 ` [PATCH 23/25] irqchip: Kill irq-partition-percpu Marc Zyngier
2025-09-08 16:31 ` [PATCH 24/25] genirq: Kill irq_{g,s}et_percpu_devid_partition() Marc Zyngier
2025-09-08 16:31 ` [PATCH 25/25] perf: arm_pmu: Kill last use of per-CPU cpu_armpmu pointer Marc Zyngier

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=86ecsed84s.wl-maz@kernel.org \
    --to=maz@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=j@jannau.net \
    --cc=james.clark@linaro.org \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.