|
@@ -71,6 +71,10 @@ static void __hyp_text __sysreg_save_el1_state(struct kvm_cpu_context *ctxt)
|
|
|
ctxt->gp_regs.sp_el1 = read_sysreg(sp_el1);
|
|
|
ctxt->gp_regs.elr_el1 = read_sysreg_el1(elr);
|
|
|
ctxt->gp_regs.spsr[KVM_SPSR_EL1]= read_sysreg_el1(spsr);
|
|
|
+}
|
|
|
+
|
|
|
+static void __hyp_text __sysreg_save_el2_return_state(struct kvm_cpu_context *ctxt)
|
|
|
+{
|
|
|
ctxt->gp_regs.regs.pc = read_sysreg_el2(elr);
|
|
|
ctxt->gp_regs.regs.pstate = read_sysreg_el2(spsr);
|
|
|
|
|
@@ -83,6 +87,7 @@ void __hyp_text __sysreg_save_state_nvhe(struct kvm_cpu_context *ctxt)
|
|
|
__sysreg_save_el1_state(ctxt);
|
|
|
__sysreg_save_common_state(ctxt);
|
|
|
__sysreg_save_user_state(ctxt);
|
|
|
+ __sysreg_save_el2_return_state(ctxt);
|
|
|
}
|
|
|
|
|
|
void sysreg_save_host_state_vhe(struct kvm_cpu_context *ctxt)
|
|
@@ -96,6 +101,7 @@ void sysreg_save_guest_state_vhe(struct kvm_cpu_context *ctxt)
|
|
|
__sysreg_save_el1_state(ctxt);
|
|
|
__sysreg_save_common_state(ctxt);
|
|
|
__sysreg_save_user_state(ctxt);
|
|
|
+ __sysreg_save_el2_return_state(ctxt);
|
|
|
}
|
|
|
|
|
|
static void __hyp_text __sysreg_restore_common_state(struct kvm_cpu_context *ctxt)
|
|
@@ -140,6 +146,11 @@ static void __hyp_text __sysreg_restore_el1_state(struct kvm_cpu_context *ctxt)
|
|
|
write_sysreg(ctxt->gp_regs.sp_el1, sp_el1);
|
|
|
write_sysreg_el1(ctxt->gp_regs.elr_el1, elr);
|
|
|
write_sysreg_el1(ctxt->gp_regs.spsr[KVM_SPSR_EL1],spsr);
|
|
|
+}
|
|
|
+
|
|
|
+static void __hyp_text
|
|
|
+__sysreg_restore_el2_return_state(struct kvm_cpu_context *ctxt)
|
|
|
+{
|
|
|
write_sysreg_el2(ctxt->gp_regs.regs.pc, elr);
|
|
|
write_sysreg_el2(ctxt->gp_regs.regs.pstate, spsr);
|
|
|
|
|
@@ -152,6 +163,7 @@ void __hyp_text __sysreg_restore_state_nvhe(struct kvm_cpu_context *ctxt)
|
|
|
__sysreg_restore_el1_state(ctxt);
|
|
|
__sysreg_restore_common_state(ctxt);
|
|
|
__sysreg_restore_user_state(ctxt);
|
|
|
+ __sysreg_restore_el2_return_state(ctxt);
|
|
|
}
|
|
|
|
|
|
void sysreg_restore_host_state_vhe(struct kvm_cpu_context *ctxt)
|
|
@@ -165,6 +177,7 @@ void sysreg_restore_guest_state_vhe(struct kvm_cpu_context *ctxt)
|
|
|
__sysreg_restore_el1_state(ctxt);
|
|
|
__sysreg_restore_common_state(ctxt);
|
|
|
__sysreg_restore_user_state(ctxt);
|
|
|
+ __sysreg_restore_el2_return_state(ctxt);
|
|
|
}
|
|
|
|
|
|
void __hyp_text __sysreg32_save_state(struct kvm_vcpu *vcpu)
|