* Jens Freimann ([email protected]) wrote:
> In "b06424de62 migration: Disable hotplug/unplug during migration" we
> added a check to disable unplug for all devices until we have figured
> out what works. For failover primary devices qdev_unplug() is called
> from the migration handler, i.e. during migration.
>
> This patch adds a flag to DeviceState which is set to false for all
> devices and makes an exception for vfio-pci devices that are also
> primary devices in a failover pair.
>
> Signed-off-by: Jens Freimann <[email protected]>
So I think this is safe in your case, because you trigger the unplug
right at the start of migration during setup and plug after failure;
however it's not generally safe - I can't unplug a device while the
migration is actually in progress.
Dave
> ---
> hw/core/qdev.c | 1 +
> include/hw/qdev-core.h | 1 +
> qdev-monitor.c | 2 +-
> 3 files changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/hw/core/qdev.c b/hw/core/qdev.c
> index f9b6efe509..98cdaa6bf7 100644
> --- a/hw/core/qdev.c
> +++ b/hw/core/qdev.c
> @@ -954,6 +954,7 @@ static void device_initfn(Object *obj)
>
> dev->instance_id_alias = -1;
> dev->realized = false;
> + dev->allow_unplug_during_migration = false;
>
> object_property_add_bool(obj, "realized",
> device_get_realized, device_set_realized, NULL);
> diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
> index 33ed3b8dde..5437395779 100644
> --- a/include/hw/qdev-core.h
> +++ b/include/hw/qdev-core.h
> @@ -146,6 +146,7 @@ struct DeviceState {
> bool pending_deleted_event;
> QemuOpts *opts;
> int hotplugged;
> + bool allow_unplug_during_migration;
> BusState *parent_bus;
> QLIST_HEAD(, NamedGPIOList) gpios;
> QLIST_HEAD(, BusState) child_bus;
> diff --git a/qdev-monitor.c b/qdev-monitor.c
> index 373b9ad445..9cce8b93c2 100644
> --- a/qdev-monitor.c
> +++ b/qdev-monitor.c
> @@ -867,7 +867,7 @@ void qdev_unplug(DeviceState *dev, Error **errp)
> return;
> }
>
> - if (!migration_is_idle()) {
> + if (!migration_is_idle() && !dev->allow_unplug_during_migration) {
> error_setg(errp, "device_del not allowed while migrating");
> return;
> }
> --
> 2.21.0
>
>
--
Dr. David Alan Gilbert / [email protected] / Manchester, UK