[PATCH 0/6] KVM: arm64: VNCR TLB invalidation fixes
From: Marc Zyngier <maz@kernel.org>
Date: 2026-08-01 12:48:41
Also in:
kvm, kvmarm
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 (local) 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