Message ID | 20210323184340.619757-2-richard.henderson@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | target/ppc: Fix truncation of env->hflags | expand |
On Tue, Mar 23, 2021 at 12:43:31PM -0600, Richard Henderson wrote: > Extract post_load_update_msr to share between cpu_load_old > and cpu_post_load in updating the msr. > > Suggested-by: Cédric Le Goater <clg@kaod.org> > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Applied to ppc-for-6.0. > --- > target/ppc/machine.c | 30 ++++++++++++++---------------- > 1 file changed, 14 insertions(+), 16 deletions(-) > > diff --git a/target/ppc/machine.c b/target/ppc/machine.c > index 1f7a353c78..09c5765a87 100644 > --- a/target/ppc/machine.c > +++ b/target/ppc/machine.c > @@ -10,6 +10,18 @@ > #include "kvm_ppc.h" > #include "exec/helper-proto.h" > > +static void post_load_update_msr(CPUPPCState *env) > +{ > + target_ulong msr = env->msr; > + > + /* > + * Invalidate all supported msr bits except MSR_TGPR/MSR_HVB > + * before restoring. Note that this recomputes hflags and mem_idx. > + */ > + env->msr ^= env->msr_mask & ~((1ULL << MSR_TGPR) | MSR_HVB); > + ppc_store_msr(env, msr); > +} > + > static int cpu_load_old(QEMUFile *f, void *opaque, int version_id) > { > PowerPCCPU *cpu = opaque; > @@ -21,7 +33,6 @@ static int cpu_load_old(QEMUFile *f, void *opaque, int version_id) > int32_t slb_nr; > #endif > target_ulong xer; > - target_ulong msr; > > for (i = 0; i < 32; i++) { > qemu_get_betls(f, &env->gpr[i]); > @@ -117,13 +128,7 @@ static int cpu_load_old(QEMUFile *f, void *opaque, int version_id) > qemu_get_sbe32(f); /* Discard unused mmu_idx */ > qemu_get_sbe32(f); /* Discard unused power_mode */ > > - /* > - * Invalidate all supported msr bits except MSR_TGPR/MSR_HVB > - * before restoring. Note that this recomputes hflags and mem_idx. > - */ > - msr = env->msr; > - env->msr ^= env->msr_mask & ~((1ULL << MSR_TGPR) | MSR_HVB); > - ppc_store_msr(env, msr); > + post_load_update_msr(env); > > return 0; > } > @@ -343,7 +348,6 @@ static int cpu_post_load(void *opaque, int version_id) > PowerPCCPU *cpu = opaque; > CPUPPCState *env = &cpu->env; > int i; > - target_ulong msr; > > /* > * If we're operating in compat mode, we should be ok as long as > @@ -417,13 +421,7 @@ static int cpu_post_load(void *opaque, int version_id) > ppc_store_sdr1(env, env->spr[SPR_SDR1]); > } > > - /* > - * Invalidate all supported msr bits except MSR_TGPR/MSR_HVB > - * before restoring. Note that this recomputes hflags and mem_idx. > - */ > - msr = env->msr; > - env->msr ^= env->msr_mask & ~((1ULL << MSR_TGPR) | MSR_HVB); > - ppc_store_msr(env, msr); > + post_load_update_msr(env); > > return 0; > } -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
diff --git a/target/ppc/machine.c b/target/ppc/machine.c index 1f7a353c78..09c5765a87 100644 --- a/target/ppc/machine.c +++ b/target/ppc/machine.c @@ -10,6 +10,18 @@ #include "kvm_ppc.h" #include "exec/helper-proto.h" +static void post_load_update_msr(CPUPPCState *env) +{ + target_ulong msr = env->msr; + + /* + * Invalidate all supported msr bits except MSR_TGPR/MSR_HVB + * before restoring. Note that this recomputes hflags and mem_idx. + */ + env->msr ^= env->msr_mask & ~((1ULL << MSR_TGPR) | MSR_HVB); + ppc_store_msr(env, msr); +} + static int cpu_load_old(QEMUFile *f, void *opaque, int version_id) { PowerPCCPU *cpu = opaque; @@ -21,7 +33,6 @@ static int cpu_load_old(QEMUFile *f, void *opaque, int version_id) int32_t slb_nr; #endif target_ulong xer; - target_ulong msr; for (i = 0; i < 32; i++) { qemu_get_betls(f, &env->gpr[i]); @@ -117,13 +128,7 @@ static int cpu_load_old(QEMUFile *f, void *opaque, int version_id) qemu_get_sbe32(f); /* Discard unused mmu_idx */ qemu_get_sbe32(f); /* Discard unused power_mode */ - /* - * Invalidate all supported msr bits except MSR_TGPR/MSR_HVB - * before restoring. Note that this recomputes hflags and mem_idx. - */ - msr = env->msr; - env->msr ^= env->msr_mask & ~((1ULL << MSR_TGPR) | MSR_HVB); - ppc_store_msr(env, msr); + post_load_update_msr(env); return 0; } @@ -343,7 +348,6 @@ static int cpu_post_load(void *opaque, int version_id) PowerPCCPU *cpu = opaque; CPUPPCState *env = &cpu->env; int i; - target_ulong msr; /* * If we're operating in compat mode, we should be ok as long as @@ -417,13 +421,7 @@ static int cpu_post_load(void *opaque, int version_id) ppc_store_sdr1(env, env->spr[SPR_SDR1]); } - /* - * Invalidate all supported msr bits except MSR_TGPR/MSR_HVB - * before restoring. Note that this recomputes hflags and mem_idx. - */ - msr = env->msr; - env->msr ^= env->msr_mask & ~((1ULL << MSR_TGPR) | MSR_HVB); - ppc_store_msr(env, msr); + post_load_update_msr(env); return 0; }
Extract post_load_update_msr to share between cpu_load_old and cpu_post_load in updating the msr. Suggested-by: Cédric Le Goater <clg@kaod.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- target/ppc/machine.c | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) -- 2.25.1