]> Git Repo - qemu.git/commitdiff
target-ppc: don't invalidate msr MSR_HVB bit in cpu_post_load
authorMark Cave-Ayland <[email protected]>
Fri, 17 Apr 2015 07:16:49 +0000 (08:16 +0100)
committerPeter Maydell <[email protected]>
Fri, 17 Apr 2015 10:44:01 +0000 (11:44 +0100)
The invalidation code introduced in commit 2360b works by inverting most bits
of env->msr to ensure that hreg_store_msr() will forcibly update the CPU env
state to reflect the new msr value post-migration. Unfortunately
hreg_store_msr() is called with alter_hv set to 0 which preserves the MSR_HVB
state from the CPU env which is now the opposite value to what it should be.

Ensure that we don't invalidate the msr MSR_HVB bit during cpu_post_load so
that the correct value is restored. This fixes suspend/resume for PPC64.

Reported-by: Stefan Berger <[email protected]>
Signed-off-by: Mark Cave-Ayland <[email protected]>
Reviewed-by: Alexander Graf <[email protected]>
Message-id: 1429255009[email protected]
Signed-off-by: Peter Maydell <[email protected]>
target-ppc/machine.c

index 392101206366466f159cbdc76c08ae64a2f5f6a3..d875211a2dc4fc81181a342173ae6a3a0ee13160 100644 (file)
@@ -192,9 +192,9 @@ static int cpu_post_load(void *opaque, int version_id)
         ppc_store_sdr1(env, env->spr[SPR_SDR1]);
     }
 
-    /* Mark msr bits except MSR_TGPR invalid before restoring */
+    /* Invalidate all msr bits except MSR_TGPR/MSR_HVB before restoring */
     msr = env->msr;
-    env->msr ^= ~(1ULL << MSR_TGPR);
+    env->msr ^= ~((1ULL << MSR_TGPR) | MSR_HVB);
     ppc_store_msr(env, msr);
 
     hreg_compute_mem_idx(env);
This page took 0.035485 seconds and 4 git commands to generate.