From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Jianjun Duan <duanj@linux.vnet.ibm.com>
Cc: qemu-devel@nongnu.org, qemu-ppc@nongnu.org, dmitry@daynix.com,
peter.maydell@linaro.org, kraxel@redhat.com, mst@redhat.com,
david@gibson.dropbear.id.au, pbonzini@redhat.com,
veroniabahaa@gmail.com, quintela@redhat.com,
amit.shah@redhat.com, mreitz@redhat.com, kwolf@redhat.com,
rth@twiddle.net, aurelien@aurel32.net, leon.alrae@imgtec.com,
blauwirbel@gmail.com, mark.cave-ayland@ilande.co.uk,
mdroth@linux.vnet.ibm.com
Subject: Re: [Qemu-devel] [QEMU PATCH v5 1/6] migration: alternative way to set instance_id in SaveStateEntry
Date: Wed, 5 Oct 2016 11:12:55 +0100 [thread overview]
Message-ID: <20161005101254.GD2036@work-vm> (raw)
In-Reply-To: <1475519097-27611-2-git-send-email-duanj@linux.vnet.ibm.com>
* Jianjun Duan (duanj@linux.vnet.ibm.com) wrote:
> In QOM(QEMU Object Model) migrated objects are identified with instance_id
> which is calculated automatically using their path in the QOM composition
> tree. For some objects, this path could change from source to target in
> migration. To migrate such objects, we need to make sure the instance_id does
> not change from source to target. We add a hook in DeviceClass to do customized
> instance_id calculation in such cases.
Can you explain a bit about why the path changes from source to destination;
the path here should be a feature of the guest state not the host, and so I
don't understand why it changes.
> As a result, in these cases compat will not be set in the concerned
> SaveStateEntry. This will prevent the inconsistent idstr to be sent over in
> migration. We could have set alias_id in a similar way. But that will be
> overloading the purpose of alias_id.
>
> The first application will be setting instance_id for DRC using its unique
> index. Doing this makes the instance_id of DRC to be consistent across migration
> and supports flexible management of DRC objects in migration.
Is there a reason to use a custom instance_id rather than a custom idstr?
>
> Signed-off-by: Jianjun Duan <duanj@linux.vnet.ibm.com>
> ---
> include/hw/qdev-core.h | 6 ++++++
> migration/savevm.c | 20 ++++++++++++++++++--
> 2 files changed, 24 insertions(+), 2 deletions(-)
>
> diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
> index 2c97347..a012e8e 100644
> --- a/include/hw/qdev-core.h
> +++ b/include/hw/qdev-core.h
> @@ -139,6 +139,12 @@ typedef struct DeviceClass {
> qdev_initfn init; /* TODO remove, once users are converted to realize */
> qdev_event exit; /* TODO remove, once users are converted to unrealize */
> const char *bus_type;
> +
> + /* When this field is set, qemu will use it to get an unique instance_id
> + * instead of calculating an auto idstr and instanc_id for the relevant
> + * SaveStateEntry
> + */
> + int (*dev_get_instance_id)(DeviceState *dev);
> } DeviceClass;
>
> typedef struct NamedGPIOList NamedGPIOList;
> diff --git a/migration/savevm.c b/migration/savevm.c
> index 33a2911..ef5c3d1 100644
> --- a/migration/savevm.c
> +++ b/migration/savevm.c
> @@ -495,6 +495,11 @@ int register_savevm_live(DeviceState *dev,
> void *opaque)
> {
> SaveStateEntry *se;
> + /* when it is a device and it provides a way to get instance_id,
> + * we will use it and skip setting idstr and compat.
> + */
> + bool flag = (dev != NULL) &&
> + (DEVICE_GET_CLASS(dev)->dev_get_instance_id != NULL);
We must be able to get a more descriptive name than 'flag'; how about
'has_custom_id'
> se = g_new0(SaveStateEntry, 1);
> se->version_id = version_id;
> @@ -507,7 +512,7 @@ int register_savevm_live(DeviceState *dev,
> se->is_ram = 1;
> }
>
> - if (dev) {
> + if (dev && !flag) {
> char *id = qdev_get_dev_path(dev);
> if (id) {
> pstrcpy(se->idstr, sizeof(se->idstr), id);
> @@ -523,6 +528,9 @@ int register_savevm_live(DeviceState *dev,
> }
> pstrcat(se->idstr, sizeof(se->idstr), idstr);
>
> + if (flag) {
> + instance_id = DEVICE_GET_CLASS(dev)->dev_get_instance_id(dev);
> + }
> if (instance_id == -1) {
> se->instance_id = calculate_new_instance_id(se->idstr);
> } else {
> @@ -580,6 +588,11 @@ int vmstate_register_with_alias_id(DeviceState *dev, int instance_id,
> int required_for_version)
> {
> SaveStateEntry *se;
> + /* when it is a device and it provides a way to get instance_id,
> + * we will use it and skip setting idstr and compat.
> + */
> + bool flag = (dev != NULL) &&
> + (DEVICE_GET_CLASS(dev)->dev_get_instance_id != NULL);
>
> /* If this triggers, alias support can be dropped for the vmsd. */
> assert(alias_id == -1 || required_for_version >= vmsd->minimum_version_id);
> @@ -591,7 +604,7 @@ int vmstate_register_with_alias_id(DeviceState *dev, int instance_id,
> se->vmsd = vmsd;
> se->alias_id = alias_id;
>
> - if (dev) {
> + if (dev && !flag) {
> char *id = qdev_get_dev_path(dev);
> if (id) {
> pstrcpy(se->idstr, sizeof(se->idstr), id);
> @@ -607,6 +620,9 @@ int vmstate_register_with_alias_id(DeviceState *dev, int instance_id,
> }
> pstrcat(se->idstr, sizeof(se->idstr), vmsd->name);
>
> + if (flag) {
> + instance_id = DEVICE_GET_CLASS(dev)->dev_get_instance_id(dev);
> + }
> if (instance_id == -1) {
> se->instance_id = calculate_new_instance_id(se->idstr);
> } else {
> --
> 1.9.1
Dave
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2016-10-05 10:13 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-03 18:24 [Qemu-devel] [QEMU PATCH v5 0/6] migration: ensure hotplug and migration work together Jianjun Duan
2016-10-03 18:24 ` [Qemu-devel] [QEMU PATCH v5 1/6] migration: alternative way to set instance_id in SaveStateEntry Jianjun Duan
2016-10-05 10:12 ` Dr. David Alan Gilbert [this message]
2016-10-05 16:44 ` Jianjun Duan
2016-10-07 2:54 ` David Gibson
2016-10-07 8:07 ` Dr. David Alan Gilbert
2016-10-10 5:31 ` David Gibson
2016-10-11 16:17 ` Michael Roth
2016-10-11 23:37 ` David Gibson
2016-11-15 23:45 ` Michael Roth
2016-10-05 16:46 ` [Qemu-devel] [Qemu-ppc] " Jianjun Duan
2016-10-03 18:24 ` [Qemu-devel] [QEMU PATCH v5 2/6] migration: spapr_drc: defined VMStateDescription struct Jianjun Duan
2016-10-05 11:38 ` Dr. David Alan Gilbert
2016-10-07 3:17 ` David Gibson
2016-10-07 3:12 ` David Gibson
2016-10-07 17:17 ` Jianjun Duan
2016-10-10 5:09 ` David Gibson
2016-10-10 16:48 ` [Qemu-devel] [Qemu-ppc] " Jianjun Duan
2016-10-03 18:24 ` [Qemu-devel] [QEMU PATCH v5 3/6] migration: extend VMStateInfo Jianjun Duan
2016-10-07 12:08 ` Dr. David Alan Gilbert
2016-10-07 16:35 ` [Qemu-devel] [Qemu-ppc] " Jianjun Duan
2016-10-07 18:42 ` Dr. David Alan Gilbert
2016-10-10 5:02 ` David Gibson
2016-10-12 11:59 ` [Qemu-devel] " Halil Pasic
2016-10-12 12:07 ` Paolo Bonzini
2016-10-12 12:30 ` Halil Pasic
2016-10-12 14:59 ` Dr. David Alan Gilbert
2016-10-13 10:33 ` Halil Pasic
2016-10-13 11:12 ` Dr. David Alan Gilbert
2016-10-12 17:27 ` [Qemu-devel] [Qemu-ppc] " Jianjun Duan
2016-10-13 8:22 ` Paolo Bonzini
2016-10-13 10:48 ` Halil Pasic
2016-10-13 11:20 ` Paolo Bonzini
2016-10-13 16:23 ` Jianjun Duan
2016-10-13 16:32 ` Halil Pasic
2016-10-13 16:35 ` Jianjun Duan
2016-10-03 18:24 ` [Qemu-devel] [QEMU PATCH v5 4/6] migration: migrate QTAILQ Jianjun Duan
2016-10-05 16:56 ` Dr. David Alan Gilbert
2016-10-05 17:19 ` Jianjun Duan
2016-10-06 19:01 ` Dr. David Alan Gilbert
2016-10-06 19:49 ` Jianjun Duan
2016-10-07 3:25 ` David Gibson
2016-10-07 14:31 ` Paolo Bonzini
2016-10-07 14:34 ` Dr. David Alan Gilbert
2016-10-07 16:31 ` [Qemu-devel] [Qemu-ppc] " Jianjun Duan
2016-10-07 16:32 ` Paolo Bonzini
2016-10-07 17:25 ` Jianjun Duan
2016-10-07 17:34 ` Dr. David Alan Gilbert
2016-10-07 17:43 ` Jianjun Duan
2016-10-08 11:37 ` Paolo Bonzini
2016-10-08 19:28 ` Halil Pasic
2016-10-10 21:29 ` Jianjun Duan
2016-10-11 7:33 ` Paolo Bonzini
2016-10-10 21:40 ` Jianjun Duan
2016-10-06 11:05 ` [Qemu-devel] " Paolo Bonzini
2016-10-06 11:56 ` Dr. David Alan Gilbert
2016-10-06 12:23 ` Paolo Bonzini
2016-10-06 15:21 ` Dr. David Alan Gilbert
2016-10-03 18:24 ` [Qemu-devel] [QEMU PATCH v5 5/6] migration: spapr: migrate ccs_list in spapr state Jianjun Duan
2016-10-07 3:36 ` David Gibson
2016-10-07 14:52 ` Michael Roth
2016-10-10 5:05 ` David Gibson
2016-10-03 18:24 ` [Qemu-devel] [QEMU PATCH v5 6/6] migration: spapr: migrate pending_events of " Jianjun Duan
2016-10-03 18:35 ` [Qemu-devel] [QEMU PATCH v5 0/6] migration: ensure hotplug and migration work together no-reply
2016-10-03 19:00 ` no-reply
2016-10-03 19:11 ` Jianjun Duan
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=20161005101254.GD2036@work-vm \
--to=dgilbert@redhat.com \
--cc=amit.shah@redhat.com \
--cc=aurelien@aurel32.net \
--cc=blauwirbel@gmail.com \
--cc=david@gibson.dropbear.id.au \
--cc=dmitry@daynix.com \
--cc=duanj@linux.vnet.ibm.com \
--cc=kraxel@redhat.com \
--cc=kwolf@redhat.com \
--cc=leon.alrae@imgtec.com \
--cc=mark.cave-ayland@ilande.co.uk \
--cc=mdroth@linux.vnet.ibm.com \
--cc=mreitz@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=quintela@redhat.com \
--cc=rth@twiddle.net \
--cc=veroniabahaa@gmail.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.