The sysreg state is stored in the vcpu for the guests and the host so a common path can be used to save the sysreg state. Signed-off-by: Andrew Scull <ascull@xxxxxxxxxx> --- arch/arm64/kvm/hyp/nvhe/switch.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/arch/arm64/kvm/hyp/nvhe/switch.c b/arch/arm64/kvm/hyp/nvhe/switch.c index f9a35ca02ad1..0cabb8ce7d68 100644 --- a/arch/arm64/kvm/hyp/nvhe/switch.c +++ b/arch/arm64/kvm/hyp/nvhe/switch.c @@ -155,8 +155,6 @@ static void __kvm_vcpu_switch_to_guest(struct kvm_vcpu *host_vcpu, __pmu_switch_to_guest(); - __sysreg_save_state_nvhe(&host_vcpu->arch.ctxt); - /* * We must restore the 32-bit state before the sysregs, thanks * to erratum #852523 (Cortex-A57) or #853709 (Cortex-A72). @@ -182,7 +180,6 @@ static void __kvm_vcpu_switch_to_host(struct kvm_vcpu *host_vcpu, { struct kvm_cpu_context *guest_ctxt = &vcpu->arch.ctxt; - __sysreg_save_state_nvhe(guest_ctxt); __sysreg32_save_state(vcpu); __timer_disable_traps(vcpu); __hyp_vgic_save_state(vcpu); @@ -208,7 +205,12 @@ static void __kvm_vcpu_switch_to_host(struct kvm_vcpu *host_vcpu, gic_write_pmr(GIC_PRIO_IRQOFF); } -static void __vcpu_switch_to(struct kvm_vcpu *vcpu) +static void __vcpu_save_state(struct kvm_vcpu *vcpu) +{ + __sysreg_save_state_nvhe(&vcpu->arch.ctxt); +} + +static void __vcpu_restore_state(struct kvm_vcpu *vcpu) { struct kvm_vcpu *running_vcpu; @@ -248,7 +250,8 @@ int __kvm_vcpu_run(struct kvm_vcpu *vcpu) return ARM_EXCEPTION_IRQ; } - __vcpu_switch_to(vcpu); + __vcpu_save_state(running_vcpu); + __vcpu_restore_state(vcpu); } __set_vcpu_arch_workaround_state(vcpu); -- 2.27.0.389.gc38d7665816-goog _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm