Signed-off-by: Alexandru Elisei <alexandru.elisei@xxxxxxx> --- Disabling VHE is broken with version v1 of the NV patches; to run the tests I use this patch: diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 1d896113f1f8..977905f6aacd 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -333,7 +333,8 @@ void vcpu_write_sys_reg(struct kvm_vcpu *vcpu, u64 val, int reg) * to reverse-translate virtual EL2 system registers for a * non-VHE guest hypervisor. */ - __vcpu_sys_reg(vcpu, reg) = val; + if (reg != HCR_EL2) + __vcpu_sys_reg(vcpu, reg) = val; switch (reg) { case ELR_EL2: @@ -370,7 +371,17 @@ void vcpu_write_sys_reg(struct kvm_vcpu *vcpu, u64 val, int reg) return; memory_write: - __vcpu_sys_reg(vcpu, reg) = val; + if (reg == HCR_EL2 && vcpu_el2_e2h_is_set(vcpu) && !(val & HCR_E2H)) { + preempt_disable(); + kvm_arch_vcpu_put(vcpu); + + __vcpu_sys_reg(vcpu, reg) = val; + + kvm_arch_vcpu_load(vcpu, smp_processor_id()); + preempt_enable(); + } else { + __vcpu_sys_reg(vcpu, reg) = val; + } } /* 3 bits per cache level, as per CLIDR, but non-existent caches always 0 */ arm/selftest.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/arm/selftest.c b/arm/selftest.c index 69994dcd3506..f94498e83d97 100644 --- a/arm/selftest.c +++ b/arm/selftest.c @@ -404,6 +404,18 @@ static void check_el2_cpu(void *data __unused) report("CPU(%3d) Running at EL2", current_level() == CurrentEL_EL2, cpu); report("CPU(%3d) VHE supported and enabled", vhe_supported() && vhe_enabled(), cpu); + + report_info("CPU(%3d) Disabling VHE", cpu); + disable_vhe(); + + report("CPU(%3d) Running at EL2", current_level() == CurrentEL_EL2, cpu); + report("CPU(%3d) VHE disabled", !vhe_enabled(), cpu); + + report_info("CPU(%3d) Re-enabling VHE", cpu); + enable_vhe(); + + report("CPU(%3d) Running at EL2", current_level() == CurrentEL_EL2, cpu); + report("CPU(%3d) VHE enabled", vhe_enabled(), cpu); } static bool psci_check(void); -- 2.20.1 _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm