[PATCH v2 00/16] KVM: arm64: TTW reporting on SEA and 52bit PA in S1 PTW
Marc Zyngier
maz at kernel.org
Mon Sep 15 04:44:35 PDT 2025
Yes, $SUBJECT rolls off the tongue.
This series was triggered by the realisation that when injecting an
SEA while on a S1PTW fault, we don't report the level of the walk and
instead give a bare SEA, which definitely violates the architecture.
This state of things dates back to the pre-NV days, when we didn't
have a S1 page table walker, and really didn't want to implement one.
I've since moved on and reluctantly implemented one, which means we
now *could* provide the level if we really wanted to.
However, nothing is that simple. The current code in at.c is firmly
48bit, as our NV implementation doesn't yet support 52bit PA, while an
EL1 VM can happily enjoy LPA and LPA2. As a result, it is necessary to
expand the S1 PTW to support both LPA and LPA2. Joy.
Then, once the above is achieved, we need to hook into the PTW
machinery to match the first level of the walk that results in
accessing the faulty address. For this, we introduce a simple filter
mechanism that could be expanded if we needed to (no, please no).
Finally, we can plug this into the fault injection path, and enjoy
seeing the translation level being populated in the ESR_ELx register.
Patches on top of 6.16-rc4. I intend to take this into 6.18, so shout
if you don't like the idea!
* From v1 [1]:
- Rebased on -rc4 to avoid a simple conflict.
[1] https://lore.kernel.org/r/20250827161039.938958-1-maz@kernel.org
Marc Zyngier (16):
KVM: arm64: Add helper computing the state of 52bit PA support
KVM: arm64: Account for 52bit when computing maximum OA
KVM: arm64: Compute 52bit TTBR address and alignment
KVM: arm64: Decouple output address from the PT descriptor
KVM: arm64: Pass the walk_info structure to compute_par_s1()
KVM: arm64: Compute shareability for LPA2
KVM: arm64: Populate PAR_EL1 with 52bit addresses
KVM: arm64: Expand valid block mappings to FEAT_LPA/LPA2 support
KVM: arm64: Report faults from S1 walk setup at the expected start
level
KVM: arm64: Allow use of S1 PTW for non-NV vcpus
KVM: arm64: Allow EL1 control registers to be accessed from the CPU
state
KVM: arm64: Don't switch MMU on translation from non-NV context
KVM: arm64: Add filtering hook to S1 page table walk
KVM: arm64: Add S1 IPA to page table level walker
KVM: arm64: Populate level on S1PTW SEA injection
KVM: arm64: selftest: Expand external_aborts test to look for TTW
levels
arch/arm64/include/asm/kvm_nested.h | 25 +-
arch/arm64/kvm/at.c | 341 +++++++++++++-----
arch/arm64/kvm/inject_fault.c | 27 +-
arch/arm64/kvm/nested.c | 2 +-
.../selftests/kvm/arm64/external_aborts.c | 43 +++
.../selftests/kvm/include/arm64/processor.h | 1 +
.../selftests/kvm/lib/arm64/processor.c | 13 +-
7 files changed, 362 insertions(+), 90 deletions(-)
--
2.39.2
More information about the linux-arm-kernel
mailing list