From: Mark Rutland <mark.rutland@arm.com>
To: Jinjie Ruan <ruanjinjie@huawei.com>
Cc: catalin.marinas@arm.com, will@kernel.org, corbet@lwn.net,
skhan@linuxfoundation.org, maz@kernel.org, ardb@kernel.org,
ilias.apalodimas@linaro.org, oupton@kernel.org,
joey.gouly@arm.com, seiden@linux.ibm.com, suzuki.poulose@arm.com,
yuzenghui@huawei.com, oleg@redhat.com, lpieralisi@kernel.org,
tglx@kernel.org, ada.coupriediaz@arm.com,
anshuman.khandual@arm.com, ebiggers@kernel.org,
broonie@kernel.org, mrigendra.chaubey@gmail.com,
baohua@kernel.org, lucaswei@google.com, james.morse@arm.com,
zengheng4@huawei.com, thuth@redhat.com,
yang@os.amperecomputing.com, leo.bras@arm.com,
Sascha.Bischoff@arm.com, james.clark@linaro.org,
peterz@infradead.org, leitao@debian.org, ben.horgan@arm.com,
punit.agrawal@oss.qualcomm.com, gshan@redhat.com,
osama.abdelkader@gmail.com, fengchengwen@huawei.com,
ryan.roberts@arm.com, yangyicong@hisilicon.com,
kevin.brodsky@arm.com, kees@kernel.org, jeson.gao@unisoc.com,
zhaoyang.huang@unisoc.com, ryotkkr98@gmail.com, wsw9603@163.com,
pasha.tatashin@soleen.com, jeremy.linton@arm.com,
schuster.simon@siemens-energy.com, osandov@fb.com, arnd@arndb.de,
zhangpengjie2@huawei.com, smostafa@google.com,
vladimir.murzin@arm.com, tabba@google.com, vdonnefort@google.com,
kaleshsingh@google.com, jic23@kernel.org, timothy.hayes@arm.com,
alexandru.elisei@arm.com, zenghui.yu@linux.dev, david@kernel.org,
akpm@linux-foundation.org, ljs@kernel.org, memxor@gmail.com,
qperret@google.com, chaitanyas.prakash@arm.com,
linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-efi@vger.kernel.org,
kvmarm@lists.linux.dev
Subject: Re: [PATCH 00/17] arm64: Support FEAT_NMI and Rework Exception Masking
Date: Fri, 3 Jul 2026 15:15:36 +0100 [thread overview]
Message-ID: <akfECMwlZL1aoXHl@J2N7QTR9R3> (raw)
In-Reply-To: <20260703100135.2512312-1-ruanjinjie@huawei.com>
Hi Jinjie
On Fri, Jul 03, 2026 at 06:01:18PM +0800, Jinjie Ruan wrote:
> Hi all,
Vladimir (cc'd) has also been working on NMI support, but hadn't posted
to the list yet (due to some delays with testing).
I haven't had the chance to look at this yet, but at a high-level we'll
need to figure out what to do going forwards.
Mark.
> This patch series implements support for the ARMv8.8-A/v9.3-A
> hardware NMI extension (FEAT_NMI), introducing the use of PSTATE.ALLINT
> to manage superpriority interrupts on arm64.
>
> Background and Current Status
> -----------------------------
>
> The hardware ecosystem is already mature and fully ready for FEAT_NMI:
>
> - Production Hardware: Huawei's Kunpeng servers (such as the HIP12 based
> platforms) already feature native hardware support for FEAT_NMI.
>
> - Emulation: QEMU has integrated robust FEAT_NMI emulation[1] support
> since 2024.
>
> Despite the hardware readiness, upstream support for FEAT_NMI has been
> delayed. Previous patch[2] attempts tried to bundle ALLINT management
> directly into the existing DAIF abstraction layers. As Mark Rutland
> pointed out[3], pretending ALLINT or pseudo-NMI (GIC PMR) is part of
> DAIF creates convoluted, unmaintainable hacks that frequently fail to
> handle complex edge cases correctly (such as state escape during
> context switching).
>
> Reworking Exception Masking (Mark's Feedback)
> ---------------------------------------------
>
> Following Mark Rutland's strong recommendation ("We must clean up
> the existing approach before we add the real NMI support"), this series
> does not simply stack FEAT_NMI on top of the old framework. Instead, it
> completely reworks how the arm64 kernel manages abstract and logical
> exception masks.
>
> Per Mark's guidelines, this series achieves the following architectural
> improvements:
>
> 1. Entry/Exit Specific Helpers (a):
>
> Introduces abstract exception mask helpers specifically for exception
> boundaries. They handle unified unmask-at-entry and mask-at-exit
> behaviors. This decouples the entry/exit paths from raw DAIF
> manipulation. In this series, these helpers are first refactored to
> manage DAIF + PMR cleanly, preparing the ground before any FEAT_NMI
> code is introduced.
>
> 2. Logical Exception Mask Separation (b):
>
> Introduces a decoupled logical mask tracking mechanism that treats DAIF,
> PMR, and ALLINT as separate, distinct elements. This enables accurate
> irqflag tracking and debug assertions to save, restore, and validate all
> elements without forcing them to fake or pollute a traditional DAIF
> layout.
>
> Production Bug Fixes & Integration
> -----------------------------------
>
> On top of this solid architectural foundation, this series adds the actual
> support for FEAT_NMI (ALLINT management). Crucially, during baisc testing
> and validation on production Kunpeng (HIP12) servers, we identified and
> resolved several critical bugs.
>
> The series is structured as follows:
>
> - Patches 1-5: Clean up and rework the existing DAIF/PMR masking into
> separate logical exception helpers (Pre-requisite refactoring).
>
> - Patches 6-17: Add FEAT_NMI support for ARM64, including specific
> stability fixes found on Kunpeng hardware and QEmu.
>
> Any feedback, testing, or review, especially regarding the exception
> masking refactoring, is highly appreciated.
>
> [1]: https://lore.kernel.org/all/20240407081733.3231820-1-ruanjinjie@huawei.com/
> [2]: https://lore.kernel.org/linux-arm-kernel/20221112151708.175147-1-broonie@kernel.org/
> [3]: https://lore.kernel.org/linux-arm-kernel/Y5c9SLeJacLYHmP7@FVFF77S0Q05N/
>
> Jinjie Ruan (5):
> arm64: Move DAIF macros to ptrace.h and use them centrally
> arm64: Rework exception masking into abstract logical mask
> arm64: entry: arm64: entry: Move DAIF masking for EL1 exit to C code
> arm64: entry: Add entry-specific helpers
> arm64: Introduce helpers for restoring standard exception masks
>
> Lorenzo Pieralisi (1):
> irqchip/gic-v3: Implement FEAT_GICv3_NMI support
>
> Mark Brown (11):
> arm64/booting: Document boot requirements for FEAT_NMI
> arm64/sysreg: Add definitions for immediate versions of MSR ALLINT
> arm64/hyp-stub: Enable access to ALLINT
> arm64/idreg: Add an override for FEAT_NMI
> arm64/cpufeature: Detect PE support for FEAT_NMI
> KVM: arm64: Hide FEAT_NMI from guests
> arm64/nmi: Manage masking for superpriority interrupts along with DAIF
> arm64/entry: Don't call preempt_schedule_irq() with NMIs masked
> arm64/irq: Document handling of FEAT_NMI in irqflags.h
> arm64/nmi: Add handling of superpriority interrupts as NMIs
> arm64/nmi: Add Kconfig for NMI
>
> Documentation/arch/arm64/booting.rst | 6 +
> arch/arm64/Kconfig | 17 ++
> arch/arm64/include/asm/arch_gicv3.h | 7 +-
> arch/arm64/include/asm/assembler.h | 17 +-
> arch/arm64/include/asm/cpufeature.h | 5 +
> arch/arm64/include/asm/cpuidle.h | 30 ++-
> arch/arm64/include/asm/daifflags.h | 144 --------------
> arch/arm64/include/asm/efi.h | 22 ++-
> arch/arm64/include/asm/el2_setup.h | 13 ++
> arch/arm64/include/asm/entry-common.h | 11 +-
> arch/arm64/include/asm/exception_masks.h | 232 +++++++++++++++++++++++
> arch/arm64/include/asm/irq.h | 2 +
> arch/arm64/include/asm/irqflags.h | 10 +
> arch/arm64/include/asm/kvm_host.h | 2 +-
> arch/arm64/include/asm/mmu_context.h | 2 +-
> arch/arm64/include/asm/nmi.h | 23 +++
> arch/arm64/include/asm/ptrace.h | 11 +-
> arch/arm64/include/asm/sysreg.h | 2 +
> arch/arm64/include/uapi/asm/ptrace.h | 1 +
> arch/arm64/kernel/acpi.c | 14 +-
> arch/arm64/kernel/cpufeature.c | 58 +++++-
> arch/arm64/kernel/debug-monitors.c | 9 +-
> arch/arm64/kernel/entry-common.c | 167 +++++++++++-----
> arch/arm64/kernel/entry.S | 4 -
> arch/arm64/kernel/hibernate.c | 10 +-
> arch/arm64/kernel/idle.c | 7 +-
> arch/arm64/kernel/irq.c | 36 +++-
> arch/arm64/kernel/machine_kexec.c | 4 +-
> arch/arm64/kernel/pi/idreg-override.c | 1 +
> arch/arm64/kernel/probes/kprobes.c | 9 +-
> arch/arm64/kernel/process.c | 7 +-
> arch/arm64/kernel/setup.c | 4 +-
> arch/arm64/kernel/signal.c | 2 +-
> arch/arm64/kernel/smp.c | 22 +--
> arch/arm64/kernel/suspend.c | 15 +-
> arch/arm64/kernel/traps.c | 2 +-
> arch/arm64/kvm/emulate-nested.c | 6 +-
> arch/arm64/kvm/hyp/include/hyp/switch.h | 6 +
> arch/arm64/kvm/hyp/nvhe/host.S | 4 +-
> arch/arm64/kvm/hyp/nvhe/hyp-init.S | 3 +-
> arch/arm64/kvm/hyp/nvhe/hyp-main.c | 4 +-
> arch/arm64/kvm/hyp/vgic-v3-sr.c | 6 +-
> arch/arm64/kvm/hyp/vhe/switch.c | 6 +-
> arch/arm64/kvm/reset.c | 6 +-
> arch/arm64/mm/fault.c | 2 +-
> arch/arm64/mm/mmu.c | 6 +-
> arch/arm64/tools/cpucaps | 2 +
> drivers/firmware/psci/psci.c | 7 +-
> drivers/irqchip/irq-gic-v3.c | 152 +++++++++++++--
> include/linux/irqchip/arm-gic-v3.h | 4 +
> 50 files changed, 822 insertions(+), 320 deletions(-)
> delete mode 100644 arch/arm64/include/asm/daifflags.h
> create mode 100644 arch/arm64/include/asm/exception_masks.h
> create mode 100644 arch/arm64/include/asm/nmi.h
>
> --
> 2.34.1
>
next prev parent reply other threads:[~2026-07-03 14:15 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-03 10:01 [PATCH 00/17] arm64: Support FEAT_NMI and Rework Exception Masking Jinjie Ruan
2026-07-03 10:01 ` [PATCH 01/17] arm64: Move DAIF macros to ptrace.h and use them centrally Jinjie Ruan
2026-07-03 16:44 ` Breno Leitao
2026-07-06 12:57 ` Jinjie Ruan
2026-07-03 10:01 ` [PATCH 02/17] arm64: Rework exception masking into abstract logical mask Jinjie Ruan
2026-07-03 10:15 ` sashiko-bot
2026-07-03 13:38 ` Leonardo Bras
2026-07-06 13:00 ` Jinjie Ruan
2026-07-06 13:02 ` Leonardo Bras
2026-07-03 13:48 ` Leonardo Bras
2026-07-06 13:15 ` Jinjie Ruan
2026-07-06 13:43 ` Leonardo Bras
2026-07-07 8:39 ` Jinjie Ruan
2026-07-03 10:01 ` [PATCH 03/17] arm64: entry: arm64: entry: Move DAIF masking for EL1 exit to C code Jinjie Ruan
2026-07-03 10:01 ` [PATCH 04/17] arm64: entry: Add entry-specific helpers Jinjie Ruan
2026-07-03 10:17 ` sashiko-bot
2026-07-03 10:01 ` [PATCH 05/17] arm64: Introduce helpers for restoring standard exception masks Jinjie Ruan
2026-07-03 10:01 ` [PATCH 06/17] arm64/booting: Document boot requirements for FEAT_NMI Jinjie Ruan
2026-07-03 10:15 ` sashiko-bot
2026-07-03 10:01 ` [PATCH 07/17] arm64/sysreg: Add definitions for immediate versions of MSR ALLINT Jinjie Ruan
2026-07-03 10:18 ` sashiko-bot
2026-07-03 10:01 ` [PATCH 08/17] arm64/hyp-stub: Enable access to ALLINT Jinjie Ruan
2026-07-03 10:16 ` sashiko-bot
2026-07-03 10:01 ` [PATCH 09/17] arm64/idreg: Add an override for FEAT_NMI Jinjie Ruan
2026-07-03 10:20 ` sashiko-bot
2026-07-03 10:01 ` [PATCH 10/17] arm64/cpufeature: Detect PE support " Jinjie Ruan
2026-07-03 10:01 ` [PATCH 11/17] KVM: arm64: Hide FEAT_NMI from guests Jinjie Ruan
2026-07-03 10:13 ` sashiko-bot
2026-07-03 10:01 ` [PATCH 12/17] arm64/nmi: Manage masking for superpriority interrupts along with DAIF Jinjie Ruan
2026-07-03 10:27 ` sashiko-bot
2026-07-03 10:01 ` [PATCH 13/17] arm64/entry: Don't call preempt_schedule_irq() with NMIs masked Jinjie Ruan
2026-07-03 10:01 ` [PATCH 14/17] arm64/irq: Document handling of FEAT_NMI in irqflags.h Jinjie Ruan
2026-07-03 10:01 ` [PATCH 15/17] arm64/nmi: Add handling of superpriority interrupts as NMIs Jinjie Ruan
2026-07-03 10:19 ` sashiko-bot
2026-07-03 10:01 ` [PATCH 16/17] arm64/nmi: Add Kconfig for NMI Jinjie Ruan
2026-07-03 10:28 ` sashiko-bot
2026-07-03 10:01 ` [PATCH 17/17] irqchip/gic-v3: Implement FEAT_GICv3_NMI support Jinjie Ruan
2026-07-03 10:25 ` sashiko-bot
2026-07-03 14:15 ` Mark Rutland [this message]
2026-07-06 1:10 ` [PATCH 00/17] arm64: Support FEAT_NMI and Rework Exception Masking Jinjie Ruan
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=akfECMwlZL1aoXHl@J2N7QTR9R3 \
--to=mark.rutland@arm.com \
--cc=Sascha.Bischoff@arm.com \
--cc=ada.coupriediaz@arm.com \
--cc=akpm@linux-foundation.org \
--cc=alexandru.elisei@arm.com \
--cc=anshuman.khandual@arm.com \
--cc=ardb@kernel.org \
--cc=arnd@arndb.de \
--cc=baohua@kernel.org \
--cc=ben.horgan@arm.com \
--cc=broonie@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=chaitanyas.prakash@arm.com \
--cc=corbet@lwn.net \
--cc=david@kernel.org \
--cc=ebiggers@kernel.org \
--cc=fengchengwen@huawei.com \
--cc=gshan@redhat.com \
--cc=ilias.apalodimas@linaro.org \
--cc=james.clark@linaro.org \
--cc=james.morse@arm.com \
--cc=jeremy.linton@arm.com \
--cc=jeson.gao@unisoc.com \
--cc=jic23@kernel.org \
--cc=joey.gouly@arm.com \
--cc=kaleshsingh@google.com \
--cc=kees@kernel.org \
--cc=kevin.brodsky@arm.com \
--cc=kvmarm@lists.linux.dev \
--cc=leitao@debian.org \
--cc=leo.bras@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-efi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=ljs@kernel.org \
--cc=lpieralisi@kernel.org \
--cc=lucaswei@google.com \
--cc=maz@kernel.org \
--cc=memxor@gmail.com \
--cc=mrigendra.chaubey@gmail.com \
--cc=oleg@redhat.com \
--cc=osama.abdelkader@gmail.com \
--cc=osandov@fb.com \
--cc=oupton@kernel.org \
--cc=pasha.tatashin@soleen.com \
--cc=peterz@infradead.org \
--cc=punit.agrawal@oss.qualcomm.com \
--cc=qperret@google.com \
--cc=ruanjinjie@huawei.com \
--cc=ryan.roberts@arm.com \
--cc=ryotkkr98@gmail.com \
--cc=schuster.simon@siemens-energy.com \
--cc=seiden@linux.ibm.com \
--cc=skhan@linuxfoundation.org \
--cc=smostafa@google.com \
--cc=suzuki.poulose@arm.com \
--cc=tabba@google.com \
--cc=tglx@kernel.org \
--cc=thuth@redhat.com \
--cc=timothy.hayes@arm.com \
--cc=vdonnefort@google.com \
--cc=vladimir.murzin@arm.com \
--cc=will@kernel.org \
--cc=wsw9603@163.com \
--cc=yang@os.amperecomputing.com \
--cc=yangyicong@hisilicon.com \
--cc=yuzenghui@huawei.com \
--cc=zengheng4@huawei.com \
--cc=zenghui.yu@linux.dev \
--cc=zhangpengjie2@huawei.com \
--cc=zhaoyang.huang@unisoc.com \
/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.