KVM: arm64: nvhe: Synchronise with page table walker on vcpu run
authorMarc Zyngier <maz@kernel.org>
Sat, 8 Apr 2023 16:04:23 +0000 (17:04 +0100)
committerMarc Zyngier <maz@kernel.org>
Thu, 13 Apr 2023 07:38:53 +0000 (08:38 +0100)
commit55b5bac15939dec3cbcbee1f6271bc3a4afd4534
tree50c7c50743d1b1ace01dfff07ffaccc4e8c0a4a1
parent197b6b60ae7bc51dd0814953c562833143b292aa
KVM: arm64: nvhe: Synchronise with page table walker on vcpu run

When taking an exception between the EL1&0 translation regime and
the EL2 translation regime, the page table walker is allowed to
complete the walks started from EL0 or EL1 while running at EL2.

It means that altering the system registers that define the EL1&0
translation regime is fraught with danger *unless* we wait for
the completion of such walk with a DSB (R_LFHQG and subsequent
statements in the ARM ARM). We already did the right thing for
other external agents (SPE, TRBE), but not the PTW.

Rework the existing SPE/TRBE synchronisation to include the PTW,
and add the missing DSB on guest exit.

Signed-off-by: Marc Zyngier <maz@kernel.org>
Reviewed-by: Oliver Upton <oliver.upton@linux.dev>
arch/arm64/kvm/hyp/nvhe/debug-sr.c
arch/arm64/kvm/hyp/nvhe/switch.c