From: Sergio Lopez <slp@redhat.com>
To: Liam Merwick <liam.merwick@oracle.com>
Cc: ehabkost@redhat.com, mst@redhat.com, qemu-devel@nongnu.org,
darren.kenny@oracle.com, pbonzini@redhat.com, rth@twiddle.net
Subject: Re: [PATCH v2] hw/i386: Move save_tsc_khz from PCMachineClass to X86MachineClass
Date: Mon, 18 Nov 2019 12:34:57 +0100 [thread overview]
Message-ID: <87eey5s9i6.fsf@redhat.com> (raw)
In-Reply-To: <1574075605-25215-1-git-send-email-liam.merwick@oracle.com>
[-- Attachment #1: Type: text/plain, Size: 5708 bytes --]
Liam Merwick <liam.merwick@oracle.com> writes:
> Attempting to migrate a VM using the microvm machine class results in the source
> QEMU aborting with the following message/backtrace:
>
> target/i386/machine.c:955:tsc_khz_needed: Object 0x555556608fa0 is not an
> instance of type generic-pc-machine
>
> abort()
> object_class_dynamic_cast_assert()
> vmstate_save_state_v()
> vmstate_save_state()
> vmstate_save()
> qemu_savevm_state_complete_precopy()
> migration_thread()
> migration_thread()
> migration_thread()
> qemu_thread_start()
> start_thread()
> clone()
>
> The access to the machine class returned by MACHINE_GET_CLASS() in
> tsc_khz_needed() is crashing as it is trying to dereference a different
> type of machine class object (TYPE_PC_MACHINE) to that of this microVM.
>
> This can be resolved by extending the changes in the following commit
> f0bb276bf8d5 ("hw/i386: split PCMachineState deriving X86MachineState from it")
> and moving the save_tsc_khz field in PCMachineClass to X86MachineClass.
>
> Fixes: f0bb276bf8d5 ("hw/i386: split PCMachineState deriving X86MachineState from it")
> Signed-off-by: Liam Merwick <liam.merwick@oracle.com>
> Reviewed-by: Darren Kenny <darren.kenny@oracle.com>
> ---
>
> v1 -> v2 - fix SHA1 of patch being referenced.
>
> hw/i386/pc.c | 1 -
> hw/i386/pc_piix.c | 4 ++--
> hw/i386/pc_q35.c | 4 ++--
> hw/i386/x86.c | 1 +
> include/hw/i386/pc.h | 2 --
> include/hw/i386/x86.h | 2 ++
> target/i386/machine.c | 4 ++--
> 7 files changed, 9 insertions(+), 9 deletions(-)
>
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index 96715f8a3f99..ac08e6360437 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -2195,7 +2195,6 @@ static void pc_machine_class_init(ObjectClass *oc, void *data)
> /* BIOS ACPI tables: 128K. Other BIOS datastructures: less than 4K reported
> * to be used at the moment, 32K should be enough for a while. */
> pcmc->acpi_data_size = 0x20000 + 0x8000;
> - pcmc->save_tsc_khz = true;
> pcmc->linuxboot_dma_enabled = true;
> pcmc->pvh_enabled = true;
> assert(!mc->get_hotplug_handler);
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index 2aefa3b8dfe3..0548c259dc74 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -567,10 +567,10 @@ DEFINE_I440FX_MACHINE(v2_6, "pc-i440fx-2.6", NULL,
>
> static void pc_i440fx_2_5_machine_options(MachineClass *m)
> {
> - PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
> + X86MachineClass *x86mc = X86_MACHINE_CLASS(m);
>
> pc_i440fx_2_6_machine_options(m);
> - pcmc->save_tsc_khz = false;
> + x86mc->save_tsc_khz = false;
> m->legacy_fw_cfg_order = 1;
> compat_props_add(m->compat_props, hw_compat_2_5, hw_compat_2_5_len);
> compat_props_add(m->compat_props, pc_compat_2_5, pc_compat_2_5_len);
> diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
> index d51f5247276d..385e5cffb167 100644
> --- a/hw/i386/pc_q35.c
> +++ b/hw/i386/pc_q35.c
> @@ -508,10 +508,10 @@ DEFINE_Q35_MACHINE(v2_6, "pc-q35-2.6", NULL,
>
> static void pc_q35_2_5_machine_options(MachineClass *m)
> {
> - PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
> + X86MachineClass *x86mc = X86_MACHINE_CLASS(m);
>
> pc_q35_2_6_machine_options(m);
> - pcmc->save_tsc_khz = false;
> + x86mc->save_tsc_khz = false;
> m->legacy_fw_cfg_order = 1;
> compat_props_add(m->compat_props, hw_compat_2_5, hw_compat_2_5_len);
> compat_props_add(m->compat_props, pc_compat_2_5, pc_compat_2_5_len);
> diff --git a/hw/i386/x86.c b/hw/i386/x86.c
> index fd84b23124e6..394edc2f7209 100644
> --- a/hw/i386/x86.c
> +++ b/hw/i386/x86.c
> @@ -763,6 +763,7 @@ static void x86_machine_class_init(ObjectClass *oc, void *data)
> mc->get_default_cpu_node_id = x86_get_default_cpu_node_id;
> mc->possible_cpu_arch_ids = x86_possible_cpu_arch_ids;
> x86mc->compat_apic_id_mode = false;
> + x86mc->save_tsc_khz = true;
> nc->nmi_monitor_handler = x86_nmi;
>
> object_class_property_add(oc, X86_MACHINE_MAX_RAM_BELOW_4G, "size",
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index e6fa8418ca61..1f86eba3f998 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -116,8 +116,6 @@ typedef struct PCMachineClass {
> bool enforce_aligned_dimm;
> bool broken_reserved_end;
>
> - /* TSC rate migration: */
> - bool save_tsc_khz;
> /* generate legacy CPU hotplug AML */
> bool legacy_cpu_hotplug;
>
> diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h
> index 82d09fd7d099..4b8491788526 100644
> --- a/include/hw/i386/x86.h
> +++ b/include/hw/i386/x86.h
> @@ -30,6 +30,8 @@ typedef struct {
>
> /*< public >*/
>
> + /* TSC rate migration: */
> + bool save_tsc_khz;
> /* Enables contiguous-apic-ID mode */
> bool compat_apic_id_mode;
> } X86MachineClass;
> diff --git a/target/i386/machine.c b/target/i386/machine.c
> index 6481f846f6e9..7bdeb7815755 100644
> --- a/target/i386/machine.c
> +++ b/target/i386/machine.c
> @@ -988,8 +988,8 @@ static bool tsc_khz_needed(void *opaque)
> X86CPU *cpu = opaque;
> CPUX86State *env = &cpu->env;
> MachineClass *mc = MACHINE_GET_CLASS(qdev_get_machine());
> - PCMachineClass *pcmc = PC_MACHINE_CLASS(mc);
> - return env->tsc_khz && pcmc->save_tsc_khz;
> + X86MachineClass *x86mc = X86_MACHINE_CLASS(mc);
> + return env->tsc_khz && x86mc->save_tsc_khz;
> }
>
> static const VMStateDescription vmstate_tsc_khz = {
LGTM, thanks.
Reviewed-by: Sergio Lopez <slp@redhat.com>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]
next prev parent reply other threads:[~2019-11-18 11:36 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-18 11:13 [PATCH v2] hw/i386: Move save_tsc_khz from PCMachineClass to X86MachineClass Liam Merwick
2019-11-18 11:34 ` Sergio Lopez [this message]
2019-11-18 11:40 ` Paolo Bonzini
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=87eey5s9i6.fsf@redhat.com \
--to=slp@redhat.com \
--cc=darren.kenny@oracle.com \
--cc=ehabkost@redhat.com \
--cc=liam.merwick@oracle.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
/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.