qemu-ppc
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-ppc] [Qemu-devel] [PATCH 1/4] migration: alternative way to se


From: Michael Roth
Subject: Re: [Qemu-ppc] [Qemu-devel] [PATCH 1/4] migration: alternative way to set instance_id in SaveStateEntry
Date: Tue, 25 Apr 2017 17:26:40 -0500
User-agent: alot/0.5.1

Quoting Daniel Henrique Barboza (2017-04-24 17:08:25)
> From: Jianjun Duan <address@hidden>
> 
> 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.

When I tried to pluck a subset of these patches for another series it
was noticed that we don't actually need this patch anymore:

  https://lists.gnu.org/archive/html/qemu-devel/2016-11/msg05475.html

hw/ppc/spapr_iommu.c already implements an approach for registering DRCs
that would work for our case as well since DRCs are bus-less and do not sit
on a BusClass that implements bc->get_dev_path, so using
vmstate_register(DEVICE(drc), drck->get_index(drc), ...) will work in
the same way this patch expects it to.

> 
> 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 pseries DRC objects 
> 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.
> 
> Signed-off-by: Jianjun Duan <address@hidden>
> Signed-off-by: Daniel Henrique Barboza <address@hidden>
> ---
>  include/hw/qdev-core.h | 6 ++++++
>  migration/savevm.c     | 6 ++++++
>  2 files changed, 12 insertions(+)
> 
> diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
> index 4bf86b0..9b3914c 100644
> --- a/include/hw/qdev-core.h
> +++ b/include/hw/qdev-core.h
> @@ -127,6 +127,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 instance_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 03ae1bd..5d8135f 100644
> --- a/migration/savevm.c
> +++ b/migration/savevm.c
> @@ -606,6 +606,9 @@ int register_savevm_live(DeviceState *dev,
>                           calculate_compat_instance_id(idstr) : instance_id;
>              instance_id = -1;
>          }
> +        if (DEVICE_GET_CLASS(dev)->dev_get_instance_id) {
> +            instance_id = DEVICE_GET_CLASS(dev)->dev_get_instance_id(dev);
> +        }
>      }
>      pstrcat(se->idstr, sizeof(se->idstr), idstr);
> 
> @@ -696,6 +699,9 @@ int vmstate_register_with_alias_id(DeviceState *dev, int 
> instance_id,
>                           calculate_compat_instance_id(vmsd->name) : 
> instance_id;
>              instance_id = -1;
>          }
> +        if (DEVICE_GET_CLASS(dev)->dev_get_instance_id) {
> +            instance_id = DEVICE_GET_CLASS(dev)->dev_get_instance_id(dev);
> +        }
>      }
>      pstrcat(se->idstr, sizeof(se->idstr), vmsd->name);
> 
> -- 
> 2.9.3
> 
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]