[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-ppc] [RFC PATCH v1 3/5] spapr: Implement CPUClass::get_migrati
From: |
Greg Kurz |
Subject: |
Re: [Qemu-ppc] [RFC PATCH v1 3/5] spapr: Implement CPUClass::get_migration_id() for PowerPC CPUs |
Date: |
Wed, 6 Jul 2016 16:35:28 +0200 |
On Wed, 6 Jul 2016 14:29:19 +0530
Bharata B Rao <address@hidden> 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 <address@hidden>
> ---
> 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";
> }