Re: [PATCH v2 01/22] alpha: enter hardirq context before looking up the irq descriptor
From: Magnus Lindholm
Date: Sun Sep 06 2026 - 04:54:20 EST
Hi Matt,
On Sat, Sep 5, 2026 at 9:29 PM Matt Turner <mattst88@xxxxxxxxx> wrote:
>
> handle_irq() called irq_to_desc() before irq_enter(), so that lookup ran
> with the preempt count still saying task context and with RCU not yet
> watching. Generic code called from an interrupt handler should see
> hardirq context, and irq_to_desc() is more than an array index once
> SPARSE_IRQ is in use.
>
> Move irq_enter() to the top of the function and add the matching
> irq_exit() to the invalid interrupt path.
>
> Assisted-by: Claude:claude-opus-5
> Signed-off-by: Matt Turner <mattst88@xxxxxxxxx>
> ---
> arch/alpha/kernel/irq.c | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/arch/alpha/kernel/irq.c b/arch/alpha/kernel/irq.c
> index 4a6a8b1d5a8b..5867a1655045 100644
> --- a/arch/alpha/kernel/irq.c
> +++ b/arch/alpha/kernel/irq.c
> @@ -107,18 +107,21 @@ handle_irq(int irq)
> * handled by some other CPU. (or is disabled)
> */
> static unsigned int illegal_count=0;
> - struct irq_desc *desc = irq_to_desc(irq);
> -
> + struct irq_desc *desc;
> +
> + irq_enter();
> +
> + desc = irq_to_desc(irq);
> if (!desc || ((unsigned) irq > ACTUAL_NR_IRQS &&
> illegal_count < MAX_ILLEGAL_IRQS)) {
> irq_err_count++;
> illegal_count++;
> printk(KERN_CRIT "device_interrupt: invalid interrupt %d\n",
> irq);
> + irq_exit();
> return;
> }
>
> - irq_enter();
> generic_handle_irq_desc(desc);
> irq_exit();
> }
>
Since this patch is unchanged in v2, and we agreed to handle the
hardirq-context consolidation as a follow-up, my tags from reviewing
and testing the current change are:
Tested-by: Magnus Lindholm <linmag7@xxxxxxxxx>
Reviewed-by: Magnus Lindholm <linmag7@xxxxxxxxx>
Regards,
Magnus