From: Kiryl Shutsemau <kirill@shutemov.name>
To: Breno Leitao <leitao@debian.org>
Cc: Mark Rutland <mark.rutland@arm.com>,
Thomas Huth <thuth@redhat.com>,
Vladimir Murzin <vladimir.murzin@arm.com>,
Usama Arif <usama.arif@linux.dev>,
Peter Zijlstra <peterz@infradead.org>,
Catalin Marinas <catalin.marinas@arm.com>,
Jinjie Ruan <ruanjinjie@huawei.com>,
kernel-team@meta.com, Doug Anderson <dianders@chromium.org>,
stable@vger.kernel.org, linux-kernel@vger.kernel.org,
James Morse <james.morse@arm.com>,
linux-arm-kernel@lists.infradead.org,
Marc Zyngier <maz@kernel.org>,
mrigendrachaubey <mrigendra.chaubey@gmail.com>,
Will Deacon <will@kernel.org>, Linus Walleij <linusw@kernel.org>,
Dawei Li <dawei.li@linux.dev>
Subject: Re: [PATCH v2 2/2] arm64: sdei: Preserve the interrupted context's exception registers
Date: Fri, 6 Nov 2026 11:34:19 +0000 [thread overview]
Message-ID: <au27CSJbg2Wdqh42@thinkstation> (raw)
In-Reply-To: <auyjSmtuqkXCqMvl@gmail.com>
On Thu, Nov 05, 2026 at 07:41:12AM -0800, Breno Leitao wrote:
> On Thu, Nov 05, 2026 at 12:08:34PM +0000, Kiryl Shutsemau wrote:
> > From: "Kiryl Shutsemau (Meta)" <kas@kernel.org>
> >
> > An SDEI event is dispatched by firmware regardless of PSTATE.DAIF, so it
> > can interrupt the kernel where the exception registers are live:
> >
> > - exception entry, before kernel_entry has saved ELR_EL1/SPSR_EL1 and
> > before the C handler has read ESR_EL1/FAR_EL1;
> > - exception return, after kernel_exit has loaded ELR_EL1/SPSR_EL1 and
> > before the ERET.
> >
> > An IRQ or pseudo-NMI cannot arrive there with PSTATE.I set. Firmware
> > saves only x0-x17, PC and PSTATE around an SDEI event, so a synchronous
> > exception taken by the handler overwrites the interrupted context's
> > ELR, SPSR, ESR and FAR. do_sdei_event() only notices that ELR changed,
> > and warns.
> >
> > The interrupted context then carries on with the handler's state. A
> > task interrupted on its way into the kernel can be sent SIGILL for the
> > handler's kernel data abort. A task interrupted on its way back to user
> > space ERETs to EL1, at the handler's fixup address, with user registers
> > loaded.
> >
> > With SDEI delivering NMI backtraces, this happens in normal operation.
> > The handler runs show_regs(), which reads through possibly-NULL pointers
> > with the _nofault() accessors. print_worker_info() faults this way for a
> > kworker that is not running a work item, and a single sysrq-l warned
> > once per such kworker.
> >
> > Save ELR, SPSR, ESR and FAR in __sdei_handler() before
> > irqentry_nmi_enter(), which can take an exception too, and restore them
> > after irqentry_nmi_exit().
> >
> > Once they are restored, a nested exception is harmless if its handler is
> > safe in NMI context. That holds for EL1 data aborts on translation,
> > permission and access-flag faults, which never take the mmap lock in NMI
> > context, and for BRK. Warn once, with the syndrome, about any other
> > exception class.
> >
> > Fixes: f5df26961853 ("arm64: kernel: Add arch-specific SDEI entry code and CPU masking")
> > Cc: stable@vger.kernel.org
> > Signed-off-by: Kiryl Shutsemau (Meta) <kas@kernel.org>
>
> Tested-by: Breno Leitao <leitao@debian.org>
>
> Tested on NVIDIA Grace (firmware SDEI) with next-20261104, KASAN + lockdep,
> ARM_SDEI_NMI=y: sysrq-l under stress-ng, with a kprobe on show_regs() and
> eprobes on irq_disable/irq_enable that fault on purpose.
>
> Without the series the box crashed (a task interrupted in el0t_64_sync
> got the handler's BRK, then lockdep/KASAN fallout and a hard lockup)
>
> With it, KPTI off and kpti=1, ~4000 kprobe hits and ~5500 faults in
> irqentry_nmi_enter()/exit() produced no warnings or stalls.
Thanks for testing!
Just to clarify, does your Tested-by apply for whole series, right?
--
Kiryl Shutsemau / Kirill A. Shutemov
next prev parent reply other threads:[~2026-11-06 11:34 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-05 12:08 [PATCH v2 0/2] arm64: sdei: Handle exceptions taken inside the event handler Kiryl Shutsemau
2026-11-05 12:08 ` [PATCH v2 1/2] arm64: sdei: Run the event handler on the kernel vectors Kiryl Shutsemau
2026-11-05 18:37 ` Catalin Marinas
2026-11-06 11:48 ` Kiryl Shutsemau
2026-11-05 12:08 ` [PATCH v2 2/2] arm64: sdei: Preserve the interrupted context's exception registers Kiryl Shutsemau
2026-11-05 15:41 ` Breno Leitao
2026-11-06 11:34 ` Kiryl Shutsemau [this message]
2026-11-06 11:53 ` Breno Leitao
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=au27CSJbg2Wdqh42@thinkstation \
--to=kirill@shutemov.name \
--cc=catalin.marinas@arm.com \
--cc=dawei.li@linux.dev \
--cc=dianders@chromium.org \
--cc=james.morse@arm.com \
--cc=kernel-team@meta.com \
--cc=leitao@debian.org \
--cc=linusw@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=maz@kernel.org \
--cc=mrigendra.chaubey@gmail.com \
--cc=peterz@infradead.org \
--cc=ruanjinjie@huawei.com \
--cc=stable@vger.kernel.org \
--cc=thuth@redhat.com \
--cc=usama.arif@linux.dev \
--cc=vladimir.murzin@arm.com \
--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.