arch/arm64/Kconfig | 20 ++ arch/arm64/include/asm/cpucaps.h | 2 + arch/arm64/include/asm/futex.h | 307 ++++++++++++++---- arch/arm64/include/asm/lsui.h | 27 ++ arch/arm64/kernel/armv8_deprecated.c | 16 + arch/arm64/kernel/cpufeature.c | 10 + arch/arm64/kvm/at.c | 34 +- arch/arm64/kvm/sys_regs.c | 3 +- arch/arm64/tools/cpucaps | 1 + .../testing/selftests/kvm/arm64/set_id_regs.c | 1 + 10 files changed, 361 insertions(+), 60 deletions(-) create mode 100644 arch/arm64/include/asm/lsui.h
Since Armv9.6, FEAT_LSUI supplies the load/store instructions for
previleged level to access to access user memory without clearing
PSTATE.PAN bit.
This patchset support FEAT_LSUI and applies it mainly in
futex atomic operation and others.
This patch based on v7.0-rc3
Patch History
==============
from v16 to v17
- remove loops in __lsui_cmpxchg32().
- modify some comments and move them to commit message.
- https://lore.kernel.org/all/20260312175243.1593864-1-yeoreum.yun@arm.com/
from v15 to v16:
- remove positional operand in futex asm.
- rebased to v7.0-rc3
- https://lore.kernel.org/all/20260227151705.1275328-1-yeoreum.yun@arm.com/
from v14 to v15:
- replace caslt to cast
- cleanup the patch
- https://lore.kernel.org/all/20260225182708.3225211-1-yeoreum.yun@arm.com/
from v13 to v14:
- add LSUI config check in cpucap_is_possible()
- fix build failure with clang-19
- https://lore.kernel.org/all/20260223174802.458411-1-yeoreum.yun@arm.com/
from v12 to v13:
- rebase to v7.0-rc1
- apply CASLT for swapping guest descriptor
- remove has_lsui() for checking cpu feature.
- simplify __lsui_cmpxchg32() according to @Catalin's suggestion.
- use uaccess_ttbr0_enable()/disable() for LSUI instructions.
- https://lore.kernel.org/all/aYWuqTqM5MvudI5V@e129823.arm.com/
from v11 to v12:
- rebase to v6.19-rc6
- add CONFIG_ARM64_LSUI
- enable LSUI when !CPU_BIG_ENDIAN and PAN presents.
- drop the swp emulation with LSUI insns instead, disable it
when LSUI presents.
- some of small fixes (useless prefix and suffix and etc).
- https://lore.kernel.org/all/20251214112248.901769-1-yeoreum.yun@arm.com/
from v10 to v11:
- rebase to v6.19-rc1
- use cast instruction to emulate deprecated swpb instruction
- https://lore.kernel.org/all/20251103163224.818353-1-yeoreum.yun@arm.com/
from v9 to v10:
- apply FEAT_LSUI to user_swpX emulation.
- add test coverage for LSUI bit in ID_AA64ISAR3_EL1
- rebase to v6.18-rc4
- https://lore.kernel.org/all/20250922102244.2068414-1-yeoreum.yun@arm.com/
from v8 to v9:
- refotoring __lsui_cmpxchg64()
- rebase to v6.17-rc7
- https://lore.kernel.org/all/20250917110838.917281-1-yeoreum.yun@arm.com/
from v7 to v8:
- implements futex_atomic_eor() and futex_atomic_cmpxchg() with casalt
with C helper.
- Drop the small optimisation on ll/sc futex_atomic_set operation.
- modify some commit message.
- https://lore.kernel.org/all/20250816151929.197589-1-yeoreum.yun@arm.com/
from v6 to v7:
- wrap FEAT_LSUI with CONFIG_AS_HAS_LSUI in cpufeature
- remove unnecessary addition of indentation.
- remove unnecessary mte_tco_enable()/disable() on LSUI operation.
- https://lore.kernel.org/all/20250811163635.1562145-1-yeoreum.yun@arm.com/
from v5 to v6:
- rebase to v6.17-rc1
- https://lore.kernel.org/all/20250722121956.1509403-1-yeoreum.yun@arm.com/
from v4 to v5:
- remove futex_ll_sc.h futext_lsui and lsui.h and move them to futex.h
- reorganize the patches.
- https://lore.kernel.org/all/20250721083618.2743569-1-yeoreum.yun@arm.com/
from v3 to v4:
- rebase to v6.16-rc7
- modify some patch's title.
- https://lore.kernel.org/all/20250617183635.1266015-1-yeoreum.yun@arm.com/
from v2 to v3:
- expose FEAT_LSUI to guest
- add help section for LSUI Kconfig
- https://lore.kernel.org/all/20250611151154.46362-1-yeoreum.yun@arm.com/
from v1 to v2:
- remove empty v9.6 menu entry
- locate HAS_LSUI in cpucaps in order
- https://lore.kernel.org/all/20250611104916.10636-1-yeoreum.yun@arm.com/
Yeoreum Yun (8):
arm64: cpufeature: add FEAT_LSUI
KVM: arm64: expose FEAT_LSUI to guest
KVM: arm64: kselftest: set_id_regs: add test for FEAT_LSUI
arm64: futex: refactor futex atomic operation
arm64: futex: support futex with FEAT_LSUI
arm64: armv8_deprecated: disable swp emulation when FEAT_LSUI present
KVM: arm64: use CAST instruction for swapping guest descriptor
arm64: Kconfig: add support for LSUI
arch/arm64/Kconfig | 20 ++
arch/arm64/include/asm/cpucaps.h | 2 +
arch/arm64/include/asm/futex.h | 307 ++++++++++++++----
arch/arm64/include/asm/lsui.h | 27 ++
arch/arm64/kernel/armv8_deprecated.c | 16 +
arch/arm64/kernel/cpufeature.c | 10 +
arch/arm64/kvm/at.c | 34 +-
arch/arm64/kvm/sys_regs.c | 3 +-
arch/arm64/tools/cpucaps | 1 +
.../testing/selftests/kvm/arm64/set_id_regs.c | 1 +
10 files changed, 361 insertions(+), 60 deletions(-)
create mode 100644 arch/arm64/include/asm/lsui.h
--
LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7}
On Sat, 14 Mar 2026 17:51:25 +0000, Yeoreum Yun wrote:
> Since Armv9.6, FEAT_LSUI supplies the load/store instructions for
> previleged level to access to access user memory without clearing
> PSTATE.PAN bit.
>
> This patchset support FEAT_LSUI and applies it mainly in
> futex atomic operation and others.
>
> [...]
Applied to arm64 (for-next/feat_lsui), thanks!
[6/8] arm64: armv8_deprecated: disable swp emulation when FEAT_LSUI present
(commit e223258ed8a6)
--
Catalin
On Sat, 14 Mar 2026 17:51:25 +0000, Yeoreum Yun wrote:
> Since Armv9.6, FEAT_LSUI supplies the load/store instructions for
> previleged level to access to access user memory without clearing
> PSTATE.PAN bit.
>
> This patchset support FEAT_LSUI and applies it mainly in
> futex atomic operation and others.
>
> [...]
Applied to arm64 (for-next/feat_lsui), thanks!
I decided to drop patch [6/8] (arm64: armv8_deprecated: disable swp
emulation when FEAT_LSUI present). The way FEAT_LSUI support looks now,
we still have uaccess_enable_privileged() working properly and we could
even support SWP emulation using exclusives. While it's highly unlikely
to see both 32-bit EL0 and FEAT_LSUI in practice, models may support the
combination and disabling SWP emulation feels pretty artificial.
[1/8] arm64: cpufeature: add FEAT_LSUI
https://git.kernel.org/arm64/c/7181f718cb0f
[2/8] KVM: arm64: expose FEAT_LSUI to guest
https://git.kernel.org/arm64/c/f6bff18d05ed
[3/8] KVM: arm64: kselftest: set_id_regs: add test for FEAT_LSUI
https://git.kernel.org/arm64/c/42550d7d8aa6
[4/8] arm64: futex: refactor futex atomic operation
https://git.kernel.org/arm64/c/eaa3babcceaa
[5/8] arm64: futex: support futex with FEAT_LSUI
https://git.kernel.org/arm64/c/44adf2bf40ef
[7/8] KVM: arm64: use CAST instruction for swapping guest descriptor
https://git.kernel.org/arm64/c/16dbe77a5be2
[8/8] arm64: Kconfig: add support for LSUI
https://git.kernel.org/arm64/c/377609ae8b6a
--
Catalin
Hi Catalin, > On Sat, 14 Mar 2026 17:51:25 +0000, Yeoreum Yun wrote: > > Since Armv9.6, FEAT_LSUI supplies the load/store instructions for > > previleged level to access to access user memory without clearing > > PSTATE.PAN bit. > > > > This patchset support FEAT_LSUI and applies it mainly in > > futex atomic operation and others. > > > > [...] > > Applied to arm64 (for-next/feat_lsui), thanks! Thanks! > > I decided to drop patch [6/8] (arm64: armv8_deprecated: disable swp > emulation when FEAT_LSUI present). The way FEAT_LSUI support looks now, > we still have uaccess_enable_privileged() working properly and we could > even support SWP emulation using exclusives. While it's highly unlikely > to see both 32-bit EL0 and FEAT_LSUI in practice, This is one of decisive reason to drop the swp emulation with LSUI (https://lore.kernel.org/all/aXDbBKhE1SdCW6q4@willie-the-truck/) However, > models may support the > combination and disabling SWP emulation feels pretty artificial. But I'm not sure this is a sufficient rationale for supporting SWP with LSUI, since it's highly unlikely to encounter a real CPU that supports both 32-bit EL0 and FEAT_LSUI. Anyway, it's fair enough to drop 6/8 right now. But I appreciate whether it would be good to support SWP emulation with LSUI so that let me respin for it with the former patch. [...] -- Sincerely, Yeoreum Yun
On Fri, Mar 27, 2026 at 01:56:11PM +0000, Yeoreum Yun wrote: > > I decided to drop patch [6/8] (arm64: armv8_deprecated: disable swp > > emulation when FEAT_LSUI present). The way FEAT_LSUI support looks now, > > we still have uaccess_enable_privileged() working properly and we could > > even support SWP emulation using exclusives. While it's highly unlikely > > to see both 32-bit EL0 and FEAT_LSUI in practice, > > This is one of decisive reason to drop the swp emulation with LSUI > (https://lore.kernel.org/all/aXDbBKhE1SdCW6q4@willie-the-truck/) Ah, I forgot about this discussion. It's a valid point, I just thought it's unnecessary given that __uaccess_disable_hw_pan() still works. If we want strict no PAN, I can add it back (really small patch). I wonder whether we should also add a WARN_ON_ONCE(cpus_have_final_cap(ARM64_HAS_LSUI)) to the pan disabling function. Not urgent though. -- Catalin
© 2016 - 2026 Red Hat, Inc.