[PATCH 0/6] KVM: arm64: VNCR TLB invalidation fixes
Marc Zyngier
maz at kernel.org
Sat Aug 1 05:48:12 PDT 2026
Prompted by a patch [0] from Hyunwoo Kim which was addressing a pretty
annoying corner case, I spent some time looking at what was wrong in
our VNCR TLBI code. And there was a few things to say about it...
- The TLB tracking to get into the slow path is wrong. It tracks what
is mapped, but not the established TLBs. Kind of annoying.
- Handling IPA invalidation when the TLB was established with the S1
MMU disabled is failing for a number of reasons. This is the bug
that Hyunwoo Kim found, but I decided to address it at its root
rather than just fixing the symptoms.
- Deciding to run with a VNCR TLB doesn't take the state of
SCTLR_EL2.M into account. Yes, this is a special sort of sport to
run a hypervisor with its MMU disabled...
- TLB invalidation by VA targeting the last page/block of TTBR1_EL2 is
dropped on the floor, because I cannot count. This was amusing. Not.
I have fixes for each of these issues, all stable candidates. On top
of that, I have a couple of patches reintroducing the tracking that
the first patch removes, this time in a way that is actually
functional. Or at least I think it is...
I'd like to thank Hyunwoo Kim for their initial patch and for
providing a reproducer that helped me finding these issues by running
it at multiple levels of nesting. It is most probably too late for
7.2, so let's try to make this 7.3 material.
[0] https://lore.kernel.org/r/ameGoxbn2wzBq2kL@v4bel
Marc Zyngier (6):
KVM: arm64: Remove VM-wide VNCR mapping counter
KVM: arm64: Handle negative S1 walk levels in VNCR TLB size evaluation
KVM: arm64: Consider SCTLR_EL2.M when mapping the L1 VNCR page
KVM: arm64: Correctly handle end of VA space TLBI invalidation
KVM: arm64: Couple VNCR fixmap clearing and CPU number invalidation
KVM: arm64: Add VNCR TLB tracking again
arch/arm64/include/asm/kvm_host.h | 4 +-
arch/arm64/include/asm/kvm_nested.h | 7 ++
arch/arm64/kvm/at.c | 2 -
arch/arm64/kvm/hyp/vhe/switch.c | 4 +-
arch/arm64/kvm/nested.c | 109 +++++++++++++++++-----------
5 files changed, 78 insertions(+), 48 deletions(-)
--
2.47.3
More information about the linux-arm-kernel
mailing list