diff mbox series

[v4,05/17] target/ppc: Retain hflags_nmsr only for migration

Message ID 20210315184615.1985590-6-richard.henderson@linaro.org
State Superseded
Headers show
Series target/ppc: Fix truncation of env->hflags | expand

Commit Message

Richard Henderson March 15, 2021, 6:46 p.m. UTC
We have eliminated all normal uses of hflags_nmsr.  We need
not even compute it except when we want to migrate.  Rename
the field to emphasize this.

Remove the fixme comment for migrating access_type.  This value
is only ever used with the current executing instruction, and
is never live when the cpu is halted for migration.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>

---
 target/ppc/cpu.h         | 4 ++--
 target/ppc/helper_regs.c | 2 --
 target/ppc/machine.c     | 9 ++++++---
 3 files changed, 8 insertions(+), 7 deletions(-)

-- 
2.25.1

Comments

Cédric Le Goater March 16, 2021, 8:16 a.m. UTC | #1
On 3/15/21 7:46 PM, Richard Henderson wrote:
> We have eliminated all normal uses of hflags_nmsr.  We need

> not even compute it except when we want to migrate.  Rename

> the field to emphasize this.

> 

> Remove the fixme comment for migrating access_type.  This value

> is only ever used with the current executing instruction, and

> is never live when the cpu is halted for migration.

> 

> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>


Reviewed-by: Cédric Le Goater <clg@kaod.org>


Thanks,

C.

> ---

>  target/ppc/cpu.h         | 4 ++--

>  target/ppc/helper_regs.c | 2 --

>  target/ppc/machine.c     | 9 ++++++---

>  3 files changed, 8 insertions(+), 7 deletions(-)

> 

> diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h

> index 061d2eed1b..79c4033a42 100644

> --- a/target/ppc/cpu.h

> +++ b/target/ppc/cpu.h

> @@ -1105,8 +1105,8 @@ struct CPUPPCState {

>  #endif

>  

>      /* These resources are used only in QEMU core */

> -    target_ulong hflags;      /* hflags is MSR & HFLAGS_MASK */

> -    target_ulong hflags_nmsr; /* specific hflags, not coming from MSR */

> +    target_ulong hflags;

> +    target_ulong hflags_compat_nmsr; /* for migration compatibility */

>      int immu_idx;     /* precomputed MMU index to speed up insn accesses */

>      int dmmu_idx;     /* precomputed MMU index to speed up data accesses */

>  

> diff --git a/target/ppc/helper_regs.c b/target/ppc/helper_regs.c

> index 95b9aca61f..a87e354ca2 100644

> --- a/target/ppc/helper_regs.c

> +++ b/target/ppc/helper_regs.c

> @@ -104,8 +104,6 @@ void hreg_compute_hflags(CPUPPCState *env)

>           */

>          uint32_t le = extract32(env->spr[SPR_HID0], 3, 1);

>          env->hflags |= le << MSR_LE;

> -        /* Retain for backward compatibility with migration. */

> -        env->hflags_nmsr = le << MSR_LE;

>      }

>  }

>  

> diff --git a/target/ppc/machine.c b/target/ppc/machine.c

> index f6eeda9642..1f7a353c78 100644

> --- a/target/ppc/machine.c

> +++ b/target/ppc/machine.c

> @@ -310,6 +310,10 @@ static int cpu_pre_save(void *opaque)

>          }

>      }

>  

> +    /* Retain migration compatibility for pre 6.0 for 601 machines. */

> +    env->hflags_compat_nmsr = (env->flags & POWERPC_FLAG_HID0_LE

> +                               ? env->hflags & MSR_LE : 0);

> +

>      return 0;

>  }

>  

> @@ -829,9 +833,8 @@ const VMStateDescription vmstate_ppc_cpu = {

>          /* Supervisor mode architected state */

>          VMSTATE_UINTTL(env.msr, PowerPCCPU),

>  

> -        /* Internal state */

> -        VMSTATE_UINTTL(env.hflags_nmsr, PowerPCCPU),

> -        /* FIXME: access_type? */

> +        /* Backward compatible internal state */

> +        VMSTATE_UINTTL(env.hflags_compat_nmsr, PowerPCCPU),

>  

>          /* Sanity checking */

>          VMSTATE_UINTTL_TEST(mig_msr_mask, PowerPCCPU, cpu_pre_2_8_migration),

>
David Gibson March 22, 2021, 3:41 a.m. UTC | #2
On Mon, Mar 15, 2021 at 12:46:03PM -0600, Richard Henderson wrote:
> We have eliminated all normal uses of hflags_nmsr.  We need

> not even compute it except when we want to migrate.  Rename

> the field to emphasize this.

> 

> Remove the fixme comment for migrating access_type.  This value

> is only ever used with the current executing instruction, and

> is never live when the cpu is halted for migration.

> 

> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>


Applied to ppc-for-6.0, thanks.

> ---

>  target/ppc/cpu.h         | 4 ++--

>  target/ppc/helper_regs.c | 2 --

>  target/ppc/machine.c     | 9 ++++++---

>  3 files changed, 8 insertions(+), 7 deletions(-)

> 

> diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h

> index 061d2eed1b..79c4033a42 100644

> --- a/target/ppc/cpu.h

> +++ b/target/ppc/cpu.h

> @@ -1105,8 +1105,8 @@ struct CPUPPCState {

>  #endif

>  

>      /* These resources are used only in QEMU core */

> -    target_ulong hflags;      /* hflags is MSR & HFLAGS_MASK */

> -    target_ulong hflags_nmsr; /* specific hflags, not coming from MSR */

> +    target_ulong hflags;

> +    target_ulong hflags_compat_nmsr; /* for migration compatibility */

>      int immu_idx;     /* precomputed MMU index to speed up insn accesses */

>      int dmmu_idx;     /* precomputed MMU index to speed up data accesses */

>  

> diff --git a/target/ppc/helper_regs.c b/target/ppc/helper_regs.c

> index 95b9aca61f..a87e354ca2 100644

> --- a/target/ppc/helper_regs.c

> +++ b/target/ppc/helper_regs.c

> @@ -104,8 +104,6 @@ void hreg_compute_hflags(CPUPPCState *env)

>           */

>          uint32_t le = extract32(env->spr[SPR_HID0], 3, 1);

>          env->hflags |= le << MSR_LE;

> -        /* Retain for backward compatibility with migration. */

> -        env->hflags_nmsr = le << MSR_LE;

>      }

>  }

>  

> diff --git a/target/ppc/machine.c b/target/ppc/machine.c

> index f6eeda9642..1f7a353c78 100644

> --- a/target/ppc/machine.c

> +++ b/target/ppc/machine.c

> @@ -310,6 +310,10 @@ static int cpu_pre_save(void *opaque)

>          }

>      }

>  

> +    /* Retain migration compatibility for pre 6.0 for 601 machines. */

> +    env->hflags_compat_nmsr = (env->flags & POWERPC_FLAG_HID0_LE

> +                               ? env->hflags & MSR_LE : 0);

> +

>      return 0;

>  }

>  

> @@ -829,9 +833,8 @@ const VMStateDescription vmstate_ppc_cpu = {

>          /* Supervisor mode architected state */

>          VMSTATE_UINTTL(env.msr, PowerPCCPU),

>  

> -        /* Internal state */

> -        VMSTATE_UINTTL(env.hflags_nmsr, PowerPCCPU),

> -        /* FIXME: access_type? */

> +        /* Backward compatible internal state */

> +        VMSTATE_UINTTL(env.hflags_compat_nmsr, PowerPCCPU),

>  

>          /* Sanity checking */

>          VMSTATE_UINTTL_TEST(mig_msr_mask, PowerPCCPU, cpu_pre_2_8_migration),


-- 
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 mbox series

Patch

diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h
index 061d2eed1b..79c4033a42 100644
--- a/target/ppc/cpu.h
+++ b/target/ppc/cpu.h
@@ -1105,8 +1105,8 @@  struct CPUPPCState {
 #endif
 
     /* These resources are used only in QEMU core */
-    target_ulong hflags;      /* hflags is MSR & HFLAGS_MASK */
-    target_ulong hflags_nmsr; /* specific hflags, not coming from MSR */
+    target_ulong hflags;
+    target_ulong hflags_compat_nmsr; /* for migration compatibility */
     int immu_idx;     /* precomputed MMU index to speed up insn accesses */
     int dmmu_idx;     /* precomputed MMU index to speed up data accesses */
 
diff --git a/target/ppc/helper_regs.c b/target/ppc/helper_regs.c
index 95b9aca61f..a87e354ca2 100644
--- a/target/ppc/helper_regs.c
+++ b/target/ppc/helper_regs.c
@@ -104,8 +104,6 @@  void hreg_compute_hflags(CPUPPCState *env)
          */
         uint32_t le = extract32(env->spr[SPR_HID0], 3, 1);
         env->hflags |= le << MSR_LE;
-        /* Retain for backward compatibility with migration. */
-        env->hflags_nmsr = le << MSR_LE;
     }
 }
 
diff --git a/target/ppc/machine.c b/target/ppc/machine.c
index f6eeda9642..1f7a353c78 100644
--- a/target/ppc/machine.c
+++ b/target/ppc/machine.c
@@ -310,6 +310,10 @@  static int cpu_pre_save(void *opaque)
         }
     }
 
+    /* Retain migration compatibility for pre 6.0 for 601 machines. */
+    env->hflags_compat_nmsr = (env->flags & POWERPC_FLAG_HID0_LE
+                               ? env->hflags & MSR_LE : 0);
+
     return 0;
 }
 
@@ -829,9 +833,8 @@  const VMStateDescription vmstate_ppc_cpu = {
         /* Supervisor mode architected state */
         VMSTATE_UINTTL(env.msr, PowerPCCPU),
 
-        /* Internal state */
-        VMSTATE_UINTTL(env.hflags_nmsr, PowerPCCPU),
-        /* FIXME: access_type? */
+        /* Backward compatible internal state */
+        VMSTATE_UINTTL(env.hflags_compat_nmsr, PowerPCCPU),
 
         /* Sanity checking */
         VMSTATE_UINTTL_TEST(mig_msr_mask, PowerPCCPU, cpu_pre_2_8_migration),