The kvm_cpu_exec() only puts registers to KVM if the @kvm_vcpu_dirty flag
has been set.

This adds registers sync which also sets @kvm_vcpu_dirty so we store new
LPCR to KVM before continuing with the KVM_RUN ioctl.

Signed-off-by: Alexey Kardashevskiy <a...@ozlabs.ru>
---
 hw/ppc/spapr_hcall.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
index f755a53..b61d744 100644
--- a/hw/ppc/spapr_hcall.c
+++ b/hw/ppc/spapr_hcall.c
@@ -682,6 +682,7 @@ static target_ulong h_set_mode(PowerPCCPU *cpu, 
sPAPREnvironment *spapr,
             CPU_FOREACH(cs) {
                 PowerPCCPU *cp = POWERPC_CPU(cs);
                 CPUPPCState *env = &cp->env;
+                kvm_cpu_synchronize_state(cs);
                 env->spr[SPR_LPCR] &= ~LPCR_ILE;
             }
             ret = H_SUCCESS;
@@ -691,6 +692,7 @@ static target_ulong h_set_mode(PowerPCCPU *cpu, 
sPAPREnvironment *spapr,
             CPU_FOREACH(cs) {
                 PowerPCCPU *cp = POWERPC_CPU(cs);
                 CPUPPCState *env = &cp->env;
+                kvm_cpu_synchronize_state(cs);
                 env->spr[SPR_LPCR] |= LPCR_ILE;
             }
             ret = H_SUCCESS;
-- 
1.8.4.rc4


Reply via email to