On Wed, 6 Jul 2016 14:29:19 +0530 Bharata B Rao <bhar...@linux.vnet.ibm.com> wrote: > cpu_index is used as migration_id by default. For machine type versions > that set use-migration-id property, cpu_dt_it is returned. >
It looks wrong to hijack cpu_dt_id to fix migration. For pseries-2.7, you need to pass the sum of the index of the core in spapr->cores and the index of the thread in sc->threads. All other machines just need to pass the index of the cpu in their respective arrays, which happens to be equal to cs->cpu_index. > Signed-off-by: Bharata B Rao <bhar...@linux.vnet.ibm.com> > --- > target-ppc/translate_init.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c > index efd6b88..9ca2f5e 100644 > --- a/target-ppc/translate_init.c > +++ b/target-ppc/translate_init.c > @@ -10359,6 +10359,17 @@ static gchar *ppc_gdb_arch_name(CPUState *cs) > #endif > } > > +static int ppc_cpu_get_migration_id(CPUState *cs) > +{ > + PowerPCCPU *cpu = POWERPC_CPU(cs); > + > + if (cs->use_migration_id) { > + return (int) cpu->cpu_dt_id; > + } else { > + return cs->cpu_index; > + } > +} > + > static void ppc_cpu_class_init(ObjectClass *oc, void *data) > { > PowerPCCPUClass *pcc = POWERPC_CPU_CLASS(oc); > @@ -10412,6 +10423,7 @@ static void ppc_cpu_class_init(ObjectClass *oc, void > *data) > #ifndef CONFIG_USER_ONLY > cc->virtio_is_big_endian = ppc_cpu_is_big_endian; > #endif > + cc->get_migration_id = ppc_cpu_get_migration_id; > > dc->fw_name = "PowerPC,UNKNOWN"; > }