]> git.proxmox.com Git - mirror_qemu.git/commitdiff
ppc: Properly tag the translation cache based on MMU mode
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Tue, 7 Jun 2016 02:50:20 +0000 (12:50 +1000)
committerDavid Gibson <david@gibson.dropbear.id.au>
Tue, 7 Jun 2016 03:10:44 +0000 (13:10 +1000)
We used to always flush the TLB when changing relocation mode in
MSR:IR and MSR:DR (ie. MMU on/off for Instructions and Data).

We don't anymore since we have split mmu_idx for instruction and data.

However, since we hard code the mmu_idx in the translated code, we
now need to also make sure MSR:IR and MSR:DR are part of the hflags
used to tag translated code, so that we use different translated
code for different MMU settings.

Darwin gets hurt by this problem.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
target-ppc/helper_regs.h

index 12af61cbf19beb5732f1605f60742e9b815b3891..104b6900932bc71c9a7cc7dae1d6b7ecc9cd20c3 100644 (file)
@@ -95,7 +95,7 @@ static inline void hreg_compute_hflags(CPUPPCState *env)
     /* We 'forget' FE0 & FE1: we'll never generate imprecise exceptions */
     hflags_mask = (1 << MSR_VR) | (1 << MSR_AP) | (1 << MSR_SA) |
         (1 << MSR_PR) | (1 << MSR_FP) | (1 << MSR_SE) | (1 << MSR_BE) |
-        (1 << MSR_LE) | (1 << MSR_VSX);
+        (1 << MSR_LE) | (1 << MSR_VSX) | (1 << MSR_IR) | (1 << MSR_DR);
     hflags_mask |= (1ULL << MSR_CM) | (1ULL << MSR_SF) | MSR_HVB;
     hreg_compute_mem_idx(env);
     env->hflags = env->msr & hflags_mask;