From: Bharata B Rao <bharata@linux.vnet.ibm.com>
To: Igor Mammedov <imammedo@redhat.com>
Cc: qemu-devel@nongnu.org, david@gibson.dropbear.id.au,
ehabkost@redhat.com, marcel@redhat.com, pbonzini@redhat.com
Subject: Re: [Qemu-devel] [PATCH] VARIANT 1: reuse device compat logic to pick preffered CPU's migration instance_id
Date: Tue, 12 Jul 2016 12:36:17 +0530 [thread overview]
Message-ID: <20160712070617.GO25522@in.ibm.com> (raw)
In-Reply-To: <1468244550-33910-1-git-send-email-imammedo@redhat.com>
On Mon, Jul 11, 2016 at 03:42:29PM +0200, Igor Mammedov wrote:
> this approach i I preffer as it uses less per machine migration glue
> and follows typical compat pattern for devices
>
> Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com>
> ---
> exec.c | 7 +++++--
> hw/i386/pc.c | 10 +++++++---
> include/hw/compat.h | 6 +++++-
> include/qom/cpu.h | 3 +++
> qom/cpu.c | 13 +++++++++++++
> 5 files changed, 33 insertions(+), 6 deletions(-)
>
> diff --git a/exec.c b/exec.c
> index 0122ef7..79e1dcb 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -670,6 +670,7 @@ void cpu_exec_init(CPUState *cpu, Error **errp)
> {
> CPUClass *cc = CPU_GET_CLASS(cpu);
> Error *local_err = NULL;
> + int migration_id;
>
> cpu->as = NULL;
> cpu->num_ases = 0;
> @@ -708,11 +709,13 @@ void cpu_exec_init(CPUState *cpu, Error **errp)
> (void) cc;
> cpu_list_unlock();
> #else
> + migration_id = cc->use_migration_id > 0 ?
> + cpu->migration_id : cpu->cpu_index;
cc->use_migration_id is always -1 here (See explanation below)
> if (qdev_get_vmsd(DEVICE(cpu)) == NULL) {
> - vmstate_register(NULL, cpu->cpu_index, &vmstate_cpu_common, cpu);
> + vmstate_register(NULL, migration_id, &vmstate_cpu_common, cpu);
> }
> if (cc->vmsd != NULL) {
> - vmstate_register(NULL, cpu->cpu_index, cc->vmsd, cpu);
> + vmstate_register(NULL, migration_id, cc->vmsd, cpu);
> }
> #endif
> }
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index cd1745e..f041279 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -1040,9 +1040,10 @@ void pc_acpi_smi_interrupt(void *opaque, int irq, int level)
> }
>
> static X86CPU *pc_new_cpu(const char *cpu_model, int64_t apic_id,
> - Error **errp)
> + Error **errp, int migration_id)
> {
> X86CPU *cpu = NULL;
> + CPUState *cs = CPU(cpu);
> Error *local_err = NULL;
>
> cpu = cpu_x86_create(cpu_model, &local_err);
Assignment to cs should move here after cpu_x86_create.
> @@ -1050,6 +1051,7 @@ static X86CPU *pc_new_cpu(const char *cpu_model, int64_t apic_id,
> goto out;
> }
>
> + cs->migration_id = migration_id;
> object_property_set_int(OBJECT(cpu), apic_id, "apic-id", &local_err);
> object_property_set_bool(OBJECT(cpu), true, "realized", &local_err);
>
> @@ -1093,7 +1095,7 @@ void pc_hot_add_cpu(const int64_t id, Error **errp)
> return;
> }
>
> - cpu = pc_new_cpu(machine->cpu_model, apic_id, &local_err);
> + cpu = pc_new_cpu(machine->cpu_model, apic_id, &local_err, id);
> if (local_err) {
> error_propagate(errp, local_err);
> return;
> @@ -1137,7 +1139,7 @@ void pc_cpus_init(PCMachineState *pcms)
> pcms->possible_cpus->len++;
> if (i < smp_cpus) {
> cpu = pc_new_cpu(machine->cpu_model, x86_cpu_apic_id_from_index(i),
> - &error_fatal);
> + &error_fatal, i);
> pcms->possible_cpus->cpus[i].cpu = CPU(cpu);
> object_unref(OBJECT(cpu));
> }
> @@ -2012,7 +2014,9 @@ static void pc_machine_class_init(ObjectClass *oc, void *data)
> PCMachineClass *pcmc = PC_MACHINE_CLASS(oc);
> HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(oc);
> NMIClass *nc = NMI_CLASS(oc);
> + CPUClass *cc = CPU_CLASS(object_class_by_name(TYPE_CPU));
>
> + cc->use_migration_id = true;
It is not clear as to how setting cc->use_migration_id here in machine class
init would affect all CPUs. What I am observing is that the cc that we
set here is different from the cc that we get via GET_CPU_CLASS(cpu) in
cpu_exec_init(). Hence use_migration_id is never set for any CPUs that
get created.
Regards,
Bharata.
next prev parent reply other threads:[~2016-07-12 7:06 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-07 14:50 [Qemu-devel] [RFC PATCH v2 0/5] sPAPR: Fix migration when CPUs are removed in random order Bharata B Rao
2016-07-07 14:50 ` [Qemu-devel] [RFC PATCH v2 1/5] cpu, target-ppc: Move cpu_vmstate_[un]register calls to cpu_common_[un]realize Bharata B Rao
2016-07-07 14:50 ` [Qemu-devel] [RFC PATCH v2 2/5] cpu: Introduce CPUState::stable_cpu_id Bharata B Rao
2016-07-07 17:52 ` Greg Kurz
2016-07-08 5:21 ` David Gibson
2016-07-08 5:19 ` David Gibson
2016-07-08 11:11 ` Igor Mammedov
2016-07-11 3:22 ` David Gibson
2016-07-11 3:35 ` Bharata B Rao
2016-07-11 7:42 ` Igor Mammedov
2016-07-11 13:42 ` [Qemu-devel] [PATCH] VARIANT 1: reuse device compat logic to pick preffered CPU's migration instance_id Igor Mammedov
2016-07-11 13:42 ` [Qemu-devel] [PATCH] VARIANT 2: use machine specific callback to pick " Igor Mammedov
2016-07-11 14:15 ` [Qemu-devel] [PATCH] VARIANT 1: reuse device compat logic to pick preffered " Paolo Bonzini
2016-07-12 5:07 ` David Gibson
2016-07-12 8:11 ` Igor Mammedov
2016-07-13 1:39 ` David Gibson
2016-07-12 7:06 ` Bharata B Rao [this message]
2016-07-12 8:21 ` Igor Mammedov
2016-07-12 11:08 ` [Qemu-devel] [PATCH v2 1/2] cpu: add migration_id to allow board to provide " Igor Mammedov
2016-07-12 11:08 ` [Qemu-devel] [PATCH v2 2/2] pc: fix migration failure after cpu hot-unplung Igor Mammedov
2016-07-11 7:58 ` [Qemu-devel] [RFC PATCH v2 2/5] cpu: Introduce CPUState::stable_cpu_id Igor Mammedov
2016-07-12 5:09 ` David Gibson
2016-07-07 14:50 ` [Qemu-devel] [RFC PATCH v2 3/5] spapr: Set stable_cpu_id for threads of CPU cores Bharata B Rao
2016-07-07 16:11 ` Greg Kurz
2016-07-08 5:25 ` David Gibson
2016-07-08 7:46 ` Greg Kurz
2016-07-08 7:59 ` David Gibson
2016-07-08 15:24 ` Greg Kurz
2016-07-11 3:23 ` David Gibson
2016-07-08 5:24 ` David Gibson
2016-07-08 6:41 ` Bharata B Rao
2016-07-08 7:39 ` David Gibson
2016-07-08 10:59 ` Igor Mammedov
2016-07-11 3:12 ` Bharata B Rao
2016-07-11 3:26 ` David Gibson
2016-07-11 8:15 ` Igor Mammedov
2016-07-12 4:41 ` David Gibson
2016-07-07 14:50 ` [Qemu-devel] [RFC PATCH v2 4/5] xics: Use stable_cpu_id instead of cpu_index in XICS code Bharata B Rao
2016-07-08 5:32 ` David Gibson
2016-07-07 14:50 ` [Qemu-devel] [RFC PATCH v2 5/5] spapr: Enable the use of stable_cpu_id from pseries-2.7 onwards Bharata B Rao
2016-07-07 16:04 ` [Qemu-devel] [RFC PATCH v2 0/5] sPAPR: Fix migration when CPUs are removed in random order Greg Kurz
2016-07-08 5:34 ` David Gibson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160712070617.GO25522@in.ibm.com \
--to=bharata@linux.vnet.ibm.com \
--cc=david@gibson.dropbear.id.au \
--cc=ehabkost@redhat.com \
--cc=imammedo@redhat.com \
--cc=marcel@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.