linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/5] KVM: arm64: Synchronise speculative page table walks on translation regime change
@ 2023-04-13  8:14 Marc Zyngier
  2023-04-13  8:14 ` [PATCH v3 1/5] KVM: arm64: nvhe: Synchronise with page table walker on vcpu run Marc Zyngier
                   ` (4 more replies)
  0 siblings, 5 replies; 8+ messages in thread
From: Marc Zyngier @ 2023-04-13  8:14 UTC (permalink / raw)
  To: kvmarm, kvm, linux-arm-kernel
  Cc: James Morse, Suzuki K Poulose, Oliver Upton, Zenghui Yu,
	Will Deacon, Ricardo Koller

It recently became apparent that the way we switch our EL1&0
translation regime is not entirely fool proof.

On taking an exception from EL1&0 to EL2(&0), the page table walker is
allowed to carry on with speculative walks started from EL1&0 while
running at EL2 (see R_LFHQG). Given that the PTW may be actively using
the EL1&0 system registers, the only safe way to deal with it is to
issue a DSB before changing any of it.

We already did the right thing for SPE and TRBE, but ignored the PTW
for unknown reasons (probably because the architecture wasn't crystal
clear at the time).

This requires a bit of surgery in the nvhe code, though most of these
patches are comments so that my future self can understand the purpose
of these barriers. The VHE code is largely unaffected, thanks to the
DSB in the context switch.

The last patch isn't directly related, but a superfluous ISB was
spotted while working on this series.

- From v2 [2]

  - Give an option to the nVHE TLBI code to still issue non-shareable
    DSBs, as there are pending patches making use of it.

  - Collected Oliver's RBs, with thanks.

- From v1 [1]

  - Upgraded TLBIs' dsb(ishst) to dsb(ish) to cover the PTW's required
    barrier (thanks to Oliver for spotting the issue)

  - Split the nVHE patch into 3 distinct patches for ease of
    reviewing.

  - Brought the extra ISB patch into this series despite having been
    previously posted separately.

[1] https://lore.kernel.org/r/20230330100419.1436629-1-maz@kernel.org
[2] https://lore.kernel.org/r/20230408160427.10672-1-maz@kernel.org

Marc Zyngier (5):
  KVM: arm64: nvhe: Synchronise with page table walker on vcpu run
  KVM: arm64: nvhe: Synchronise with page table walker on TLBI
  KVM: arm64: pkvm: Document the side effects of
    kvm_flush_dcache_to_poc()
  KVM: arm64: vhe: Synchronise with page table walker on MMU update
  KVM: arm64: vhe: Drop extra isb() on guest exit

 arch/arm64/kvm/hyp/nvhe/debug-sr.c    |  2 --
 arch/arm64/kvm/hyp/nvhe/mem_protect.c |  7 +++++
 arch/arm64/kvm/hyp/nvhe/switch.c      | 18 +++++++++++++
 arch/arm64/kvm/hyp/nvhe/tlb.c         | 38 ++++++++++++++++++++-------
 arch/arm64/kvm/hyp/vhe/switch.c       |  7 +++--
 arch/arm64/kvm/hyp/vhe/sysreg-sr.c    | 12 +++++++++
 6 files changed, 69 insertions(+), 15 deletions(-)

-- 
2.34.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2023-04-14  7:25 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-04-13  8:14 [PATCH v3 0/5] KVM: arm64: Synchronise speculative page table walks on translation regime change Marc Zyngier
2023-04-13  8:14 ` [PATCH v3 1/5] KVM: arm64: nvhe: Synchronise with page table walker on vcpu run Marc Zyngier
2023-04-13  8:14 ` [PATCH v3 2/5] KVM: arm64: nvhe: Synchronise with page table walker on TLBI Marc Zyngier
2023-04-13 15:53   ` Oliver Upton
2023-04-14  7:24     ` Marc Zyngier
2023-04-13  8:14 ` [PATCH v3 3/5] KVM: arm64: pkvm: Document the side effects of kvm_flush_dcache_to_poc() Marc Zyngier
2023-04-13  8:14 ` [PATCH v3 4/5] KVM: arm64: vhe: Synchronise with page table walker on MMU update Marc Zyngier
2023-04-13  8:14 ` [PATCH v3 5/5] KVM: arm64: vhe: Drop extra isb() on guest exit Marc Zyngier

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).