[PATCH] ARM: entry: Convert IRQ handling to generic IRQ entry
Linus Walleij
linusw at kernel.org
Thu Aug 6 14:22:13 PDT 2026
On Sat, Jun 27, 2026 at 5:16 AM Jinjie Ruan <ruanjinjie at huawei.com> wrote:
> > +noinstr void arm_irq_handler(struct pt_regs *regs, int mode)
> > +{
> > + irqentry_state_t state = irqentry_enter(regs);
> > +
> > + /*
> > + * mode == 1 means we came from userspace, and then we
> > + * should just immediately switch to the irq stack.
> > + * Then we check of we are on the thread stack. If we are
> > + * not, then by definition we are already using the irq stack.
> > + */
> > + if (mode == 1 || on_thread_stack())
> > + call_on_irq_stack(handle_arm_irq, regs);
>
> It seems that the CONFIG_VMAP_STACK Overflow Protection is missing,
I don't think so, it is checked before this point in the assembly:
+ svc_entry trace=0
+ mov r0, sp @ regs
+ mov r1, #0 @ from kernel mode
+ bl arm_irq_handler
(...)
svc_entry checks it.
> should we implement the C version of CONFIG_VMAP_STACK first, before
> moving the IRQ handling to C?"
Not 100% sure what you mean here.
Currently the CONFIG_VMAP_STACK checks are done in
arch/arm/kernel/entry-armv.S, in the svc_entry macro
that is called in every exception entry.
svc_entry in turn calls do_overflow_check from
arch/arm/kernel/entry-header.S that does the actual overflow
check and calls __bad_stack() if we get an overflow.
This looks nice to have in assembly to me, and even
arm64 does this check in assembly?
How do you imagine C doing this without using any stack?
Yours,
Linus Walleij
More information about the linux-arm-kernel
mailing list