linux/arch/arm64/kvm
Suzuki K Poulose b96b0c5de6 KVM: arm64: nvhe: Save the SPE context early
The nVHE KVM hyp drains and disables the SPE buffer, before
entering the guest, as the EL1&0 translation regime
is going to be loaded with that of the guest.

But this operation is performed way too late, because :
  - The owning translation regime of the SPE buffer
    is transferred to EL2. (MDCR_EL2_E2PB == 0)
  - The guest Stage1 is loaded.

Thus the flush could use the host EL1 virtual address,
but use the EL2 translations instead of host EL1, for writing
out any cached data.

Fix this by moving the SPE buffer handling early enough.
The restore path is doing the right thing.

Fixes: 014c4c77aa ("KVM: arm64: Improve debug register save/restore flow")
Cc: stable@vger.kernel.org
Cc: Christoffer Dall <christoffer.dall@arm.com>
Cc: Marc Zyngier <maz@kernel.org>
Cc: Will Deacon <will@kernel.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Alexandru Elisei <alexandru.elisei@arm.com>
Reviewed-by: Alexandru Elisei <alexandru.elisei@arm.com>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20210302120345.3102874-1-suzuki.poulose@arm.com
Message-Id: <20210305185254.3730990-2-maz@kernel.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2021-03-06 04:18:39 -05:00
..
hyp KVM: arm64: nvhe: Save the SPE context early 2021-03-06 04:18:39 -05:00
vgic KVM/arm64 fixes for 5.11, take #1 2021-01-08 05:02:40 -05:00
arch_timer.c KVM: arm64: arch_timer: Remove VGIC initialization check 2020-12-23 16:43:12 +00:00
arm.c Merge branch 'kvm-arm64/hyp-reloc' into kvmarm-master/next 2021-02-12 14:08:18 +00:00
debug.c KVM: arm64: Write arch.mdcr_el2 changes since last vcpu_load on VHE 2020-01-22 18:38:04 +00:00
fpsimd.c KVM: arm64: Make struct kvm_regs userspace-only 2020-07-07 09:28:38 +01:00
guest.c KVM: arm64: Drop kvm_coproc.h 2020-11-10 11:22:52 +00:00
handle_exit.c KVM: arm64: Drop kvm_coproc.h 2020-11-10 11:22:52 +00:00
hypercalls.c KVM: arm64: Implement the TRNG hypervisor call 2021-01-25 22:19:31 +00:00
inject_fault.c KVM: arm64: Move AArch32 exceptions over to AArch64 sysregs 2020-11-10 11:22:51 +00:00
irq.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 422 2019-06-05 17:37:15 +02:00
Kconfig KVM: arm64: Replace KVM_ARM_PMU with HW_PERF_EVENTS 2021-01-04 16:50:16 +00:00
Makefile KVM: arm64: Implement the TRNG hypervisor call 2021-01-25 22:19:31 +00:00
mmio.c KVM: arm64: Make kvm_skip_instr() and co private to HYP 2020-11-10 08:34:24 +00:00
mmu.c KVM: arm64: Mark the page dirty only if the fault is handled successfully 2021-01-25 16:30:20 +00:00
perf.c KVM: arm64: Move virt/kvm/arm to arch/arm64 2020-05-16 15:03:59 +01:00
pmu-emul.c Merge branch 'kvm-arm64/pmu-debug-fixes-5.11' into kvmarm-master/next 2021-02-12 14:08:41 +00:00
pmu.c kvm: arm64: Set up hyp percpu data for nVHE 2020-09-30 08:37:14 +01:00
psci.c KVM: arm64: Convert ARCH_WORKAROUND_2 to arm64_get_spectre_v4_state() 2020-09-29 16:08:17 +01:00
pvtime.c KVM: arm64: Use kvm_write_guest_lock when init stolen time 2020-12-03 19:02:18 +00:00
reset.c Merge branch 'kvm-arm64/misc-5.11' into kvmarm-master/next 2020-11-27 19:48:24 +00:00
sys_regs.c Merge branch 'kvm-arm64/pmu-debug-fixes-5.11' into kvmarm-master/next 2021-02-12 14:08:41 +00:00
sys_regs.h Merge branch 'kvm-arm64/copro-no-more' into kvmarm-master/next 2020-11-27 11:33:16 +00:00
trace_arm.h KVM: arm64: Fix address truncation in traces 2020-09-04 10:53:48 +01:00
trace_handle_exit.h KVM: arm64: Fix address truncation in traces 2020-09-04 10:53:48 +01:00
trace.h KVM: arm64: Move virt/kvm/arm to arch/arm64 2020-05-16 15:03:59 +01:00
trng.c KVM: arm64: Implement the TRNG hypervisor call 2021-01-25 22:19:31 +00:00
va_layout.c KVM: arm64: Remove patching of fn pointers in hyp 2021-01-23 14:01:00 +00:00
vgic-sys-reg-v3.c KVM: arm64: Drop is_aarch32 trap attribute 2020-11-10 11:22:52 +00:00