From: "Nicholas Piggin" <npiggin@gmail.com>
To: "Juan Quintela" <quintela@redhat.com>, <qemu-devel@nongnu.org>
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
"Harsh Prateek Bora" <harshpb@linux.ibm.com>,
"David Hildenbrand" <david@redhat.com>,
"Samuel Thibault" <samuel.thibault@ens-lyon.org>,
"Eric Farman" <farman@linux.ibm.com>,
qemu-arm@nongnu.org, qemu-ppc@nongnu.org,
"Thomas Huth" <thuth@redhat.com>,
"Gerd Hoffmann" <kraxel@redhat.com>,
"Fabiano Rosas" <farosas@suse.de>,
"David Gibson" <david@gibson.dropbear.id.au>,
"Corey Minyard" <cminyard@mvista.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
"Peter Xu" <peterx@redhat.com>, "Corey Minyard" <minyard@acm.org>,
"Stefan Berger" <stefanb@linux.vnet.ibm.com>,
"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Halil Pasic" <pasic@linux.ibm.com>,
"Leonardo Bras" <leobras@redhat.com>,
"John Snow" <jsnow@redhat.com>,
"Mark Cave-Ayland" <mark.cave-ayland@ilande.co.uk>,
"Christian Borntraeger" <borntraeger@linux.ibm.com>,
"Ilya Leoshkevich" <iii@linux.ibm.com>,
"Jason Wang" <jasowang@redhat.com>,
qemu-block@nongnu.org, qemu-s390x@nongnu.org,
"Cédric Le Goater" <clg@kaod.org>,
"Daniel Henrique Barboza" <danielhb413@gmail.com>,
"Stefan Weil" <sw@weilnetz.de>, "Greg Kurz" <groug@kaod.org>
Subject: Re: [PATCH v2 07/13] migration: Hack to maintain backwards compatibility for ppc
Date: Fri, 20 Oct 2023 20:19:09 +1000 [thread overview]
Message-ID: <CWD6UZ0F1TO8.2IUPVJO2IRM6X@wheely> (raw)
In-Reply-To: <20231020090731.28701-8-quintela@redhat.com>
On Fri Oct 20, 2023 at 7:07 PM AEST, Juan Quintela wrote:
> Current code does:
> - register pre_2_10_vmstate_dummy_icp with "icp/server" and instance
> dependinfg on cpu number
> - for newer machines, it register vmstate_icp with "icp/server" name
> and instance 0
> - now it unregisters "icp/server" for the 1st instance.
>
> This is wrong at many levels:
> - we shouldn't have two VMSTATEDescriptions with the same name
> - In case this is the only solution that we can came with, it needs to
> be:
> * register pre_2_10_vmstate_dummy_icp
> * unregister pre_2_10_vmstate_dummy_icp
> * register real vmstate_icp
>
> Created vmstate_replace_hack_for_ppc() with warnings left and right
> that it is a hack.
Thanks. We'll look at deprecating 2.9 soon so this can all be removed.
Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
>
> CC: Cedric Le Goater <clg@kaod.org>
> CC: Daniel Henrique Barboza <danielhb413@gmail.com>
> CC: David Gibson <david@gibson.dropbear.id.au>
> CC: Greg Kurz <groug@kaod.org>
>
> Signed-off-by: Juan Quintela <quintela@redhat.com>
> ---
> include/migration/vmstate.h | 11 +++++++++++
> hw/intc/xics.c | 17 +++++++++++++++--
> hw/ppc/spapr.c | 25 +++++++++++++++++++++++--
> migration/savevm.c | 18 ++++++++++++++++++
> 4 files changed, 67 insertions(+), 4 deletions(-)
>
> diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h
> index 9ca7e9cc48..65deaecc92 100644
> --- a/include/migration/vmstate.h
> +++ b/include/migration/vmstate.h
> @@ -1230,6 +1230,17 @@ static inline int vmstate_register(VMStateIf *obj, int instance_id,
> opaque, -1, 0, NULL);
> }
>
> +/**
> + * vmstate_replace_hack_for_ppc() - ppc used to abuse vmstate_register
> + *
> + * Don't even think about using this function in new code.
> + *
> + * Returns: 0 on success, -1 on failure
> + */
> +int vmstate_replace_hack_for_ppc(VMStateIf *obj, int instance_id,
> + const VMStateDescription *vmsd,
> + void *opaque);
> +
> /**
> * vmstate_register_any() - legacy function to register state
> * serialisation description and let the function choose the id
> diff --git a/hw/intc/xics.c b/hw/intc/xics.c
> index c7f8abd71e..a03979e72a 100644
> --- a/hw/intc/xics.c
> +++ b/hw/intc/xics.c
> @@ -335,8 +335,21 @@ static void icp_realize(DeviceState *dev, Error **errp)
> return;
> }
> }
> -
> - vmstate_register(NULL, icp->cs->cpu_index, &vmstate_icp_server, icp);
> + /*
> + * The way that pre_2_10_icp is handling is really, really hacky.
> + * We used to have here this call:
> + *
> + * vmstate_register(NULL, icp->cs->cpu_index, &vmstate_icp_server, icp);
> + *
> + * But we were doing:
> + * pre_2_10_vmstate_register_dummy_icp()
> + * this vmstate_register()
> + * pre_2_10_vmstate_unregister_dummy_icp()
> + *
> + * So for a short amount of time we had to vmstate entries with
> + * the same name. This fixes it.
> + */
> + vmstate_replace_hack_for_ppc(NULL, icp->cs->cpu_index, &vmstate_icp_server, icp);
> }
>
> static void icp_unrealize(DeviceState *dev)
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index cb840676d3..a75cf475ad 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -143,6 +143,11 @@ static bool pre_2_10_vmstate_dummy_icp_needed(void *opaque)
> }
>
> static const VMStateDescription pre_2_10_vmstate_dummy_icp = {
> + /*
> + * Hack ahead. We can't have two devices with the same name and
> + * instance id. So I rename this to pass make check.
> + * Real help from people who knows the hardware is needed.
> + */
> .name = "icp/server",
> .version_id = 1,
> .minimum_version_id = 1,
> @@ -155,16 +160,32 @@ static const VMStateDescription pre_2_10_vmstate_dummy_icp = {
> },
> };
>
> +/*
> + * See comment in hw/intc/xics.c:icp_realize()
> + *
> + * You have to remove vmstate_replace_hack_for_ppc() when you remove
> + * the machine types that need the following function.
> + */
> static void pre_2_10_vmstate_register_dummy_icp(int i)
> {
> vmstate_register(NULL, i, &pre_2_10_vmstate_dummy_icp,
> (void *)(uintptr_t) i);
> }
>
> +/*
> + * See comment in hw/intc/xics.c:icp_realize()
> + *
> + * You have to remove vmstate_replace_hack_for_ppc() when you remove
> + * the machine types that need the following function.
> + */
> static void pre_2_10_vmstate_unregister_dummy_icp(int i)
> {
> - vmstate_unregister(NULL, &pre_2_10_vmstate_dummy_icp,
> - (void *)(uintptr_t) i);
> + /*
> + * This used to be:
> + *
> + * vmstate_unregister(NULL, &pre_2_10_vmstate_dummy_icp,
> + * (void *)(uintptr_t) i);
> + */
> }
>
> int spapr_max_server_number(SpaprMachineState *spapr)
> diff --git a/migration/savevm.c b/migration/savevm.c
> index 8622f229e5..d3a30686d4 100644
> --- a/migration/savevm.c
> +++ b/migration/savevm.c
> @@ -846,6 +846,24 @@ static void vmstate_check(const VMStateDescription *vmsd)
> }
> }
>
> +/*
> + * See comment in hw/intc/xics.c:icp_realize()
> + *
> + * This function can be removed when
> + * pre_2_10_vmstate_register_dummy_icp() is removed.
> + */
> +int vmstate_replace_hack_for_ppc(VMStateIf *obj, int instance_id,
> + const VMStateDescription *vmsd,
> + void *opaque)
> +{
> + SaveStateEntry *se = find_se(vmsd->name, instance_id);
> +
> + if (se) {
> + savevm_state_handler_remove(se);
> + }
> + return vmstate_register(obj, instance_id, vmsd, opaque);
> +}
> +
> int vmstate_register_with_alias_id(VMStateIf *obj, uint32_t instance_id,
> const VMStateDescription *vmsd,
> void *opaque, int alias_id,
next prev parent reply other threads:[~2023-10-20 10:19 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-20 9:07 [PATCH v2 00/13] migration: Check for duplicates on vmstate_register() Juan Quintela
2023-10-20 9:07 ` [PATCH v2 01/13] migration: Create vmstate_register_any() Juan Quintela
2023-10-20 9:07 ` [PATCH v2 02/13] migration: Use vmstate_register_any() Juan Quintela
2023-10-20 9:07 ` [PATCH v2 03/13] migration: Use vmstate_register_any() for isa-ide Juan Quintela
2023-10-20 14:12 ` Thomas Huth
2023-10-20 19:42 ` Juan Quintela
2023-10-23 6:02 ` Thomas Huth
2023-10-24 10:55 ` Juan Quintela
2023-10-20 9:07 ` [PATCH v2 04/13] migration: Use vmstate_register_any() for ipmi-bt* Juan Quintela
2023-10-20 13:11 ` Thomas Huth
2023-10-20 14:58 ` Thomas Huth
2023-10-20 9:07 ` [PATCH v2 05/13] migration: Use VMSTATE_INSTANCE_ID_ANY for slirp Juan Quintela
2023-10-20 9:07 ` [PATCH v2 06/13] migration: Use VMSTATE_INSTANCE_ID_ANY for s390 devices Juan Quintela
2023-10-20 9:26 ` Christian Borntraeger
2023-10-20 9:54 ` Juan Quintela
2023-10-20 10:04 ` Thomas Huth
2023-10-20 15:08 ` Thomas Huth
2023-10-20 9:07 ` [PATCH v2 07/13] migration: Hack to maintain backwards compatibility for ppc Juan Quintela
2023-10-20 10:19 ` Nicholas Piggin [this message]
2023-10-20 9:07 ` [PATCH v2 08/13] migration: vmstate_register() check that instance_id is valid Juan Quintela
2023-10-20 9:07 ` [PATCH v2 09/13] migration: Check in savevm_state_handler_insert for dups Juan Quintela
2023-10-20 9:07 ` [PATCH v2 10/13] migration: Improve example and documentation of vmstate_register() Juan Quintela
2023-10-20 12:22 ` Stefan Berger
2023-10-20 9:07 ` [PATCH v2 11/13] migration: Use vmstate_register_any() for audio Juan Quintela
2023-10-21 14:55 ` Volker Rümelin
2023-10-23 16:29 ` Juan Quintela
2023-10-20 9:07 ` [PATCH v2 12/13] migration: Use vmstate_register_any() for eeprom93xx Juan Quintela
2023-10-20 9:07 ` [PATCH v2 13/13] migration: Use vmstate_register_any() for vmware_vga Juan Quintela
2023-10-20 14:22 ` Thomas Huth
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=CWD6UZ0F1TO8.2IUPVJO2IRM6X@wheely \
--to=npiggin@gmail.com \
--cc=borntraeger@linux.ibm.com \
--cc=clg@kaod.org \
--cc=cminyard@mvista.com \
--cc=danielhb413@gmail.com \
--cc=david@gibson.dropbear.id.au \
--cc=david@redhat.com \
--cc=farman@linux.ibm.com \
--cc=farosas@suse.de \
--cc=groug@kaod.org \
--cc=harshpb@linux.ibm.com \
--cc=iii@linux.ibm.com \
--cc=jasowang@redhat.com \
--cc=jsnow@redhat.com \
--cc=kraxel@redhat.com \
--cc=leobras@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=mark.cave-ayland@ilande.co.uk \
--cc=minyard@acm.org \
--cc=mst@redhat.com \
--cc=pasic@linux.ibm.com \
--cc=peter.maydell@linaro.org \
--cc=peterx@redhat.com \
--cc=qemu-arm@nongnu.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=qemu-s390x@nongnu.org \
--cc=quintela@redhat.com \
--cc=richard.henderson@linaro.org \
--cc=samuel.thibault@ens-lyon.org \
--cc=stefanb@linux.vnet.ibm.com \
--cc=sw@weilnetz.de \
--cc=thuth@redhat.com \
/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.