[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [Qemu-ppc] [RFC PATCH v1 3/5] spapr: Implement CPUClass
From: |
Mark Cave-Ayland |
Subject: |
Re: [Qemu-devel] [Qemu-ppc] [RFC PATCH v1 3/5] spapr: Implement CPUClass::get_migration_id() for PowerPC CPUs |
Date: |
Thu, 7 Jul 2016 14:43:08 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Icedove/45.1.0 |
On 07/07/16 02:00, David Gibson wrote:
> On Wed, Jul 06, 2016 at 02:29:19PM +0530, Bharata B Rao 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.
>>
>> Signed-off-by: Bharata B Rao <address@hidden>
>
> This seems ceonceptually wrong. The logic to determine the stable ID
> is still coming from the CPU code. But kind of the point here is that
> in most cases the stable IDs really belong to the machine type, not
> the CPU.
>
> Would it make more sense to just have migration-id be a settable
> property, which the machine type needs to set between init and
> realize? (or leave as default == cpu_index).
>
> That way we could have machine version dependent differences without
> this awkward use_migration_id flag (after all, if it's not always used
> as the id for migration, 'migration_id' is kind of a bad name...).
>
>> ---
>> 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";
>> }
>
Could this be another potential user for the PPCMachineClass solution I
was looking at for timebase migration in
https://lists.gnu.org/archive/html/qemu-devel/2016-04/msg01208.html? It
seems like a similar problem where machine-level state is needed for
migration purposes.
ATB,
Mark.
[Qemu-devel] [RFC PATCH v1 4/5] xics: Use migration_id instead of cpu_index in XICS code, Bharata B Rao, 2016/07/06
[Qemu-devel] [RFC PATCH v1 5/5] cpu, spapr: Use migration_id from pseries-2.7 onwards, Bharata B Rao, 2016/07/06