Alex Williamson <alex.william...@redhat.com> writes: > Create a trivial interface to track whether the machine has been > modified since boot. Adding or removing devices will trigger this > to return true. An example usage scenario for such an interface is > the rtl8139 driver which includes a cpu_register_io_memory() value > in it's migration stream. For the majority of migrations, where > no hotplug has occured in the machine, this works correctly. Once > the machine is modified, we can use this interface to detect that > and include a subsection for the device to prevent migrations to > rtl8139 versions with this bug. > > Signed-off-by: Alex Williamson <alex.william...@redhat.com> > Acked-by: Michael S. Tsirkin <m...@redhat.com> > Acked-by: Juan Quintela <quint...@redhat.com> > --- > > hw/qdev.c | 10 ++++++++++ > hw/qdev.h | 1 + > 2 files changed, 11 insertions(+), 0 deletions(-) > > diff --git a/hw/qdev.c b/hw/qdev.c > index 6fc9b02..e450c21 100644 > --- a/hw/qdev.c > +++ b/hw/qdev.c > @@ -32,6 +32,8 @@ > #include "blockdev.h" > > static int qdev_hotplug = 0; > +static bool qdev_hot_added = false; > +static bool qdev_hot_removed = false; > > /* This is a nasty hack to allow passing a NULL bus to qdev_create. */ > static BusState *main_system_bus; > @@ -93,6 +95,7 @@ static DeviceState *qdev_create_from_info(BusState *bus, > DeviceInfo *info) > if (qdev_hotplug) { > assert(bus->allow_hotplug); > dev->hotplugged = 1; > + qdev_hot_added = true; > } > dev->instance_id_alias = -1; > dev->state = DEV_STATE_CREATED; > @@ -294,6 +297,8 @@ int qdev_unplug(DeviceState *dev) > } > assert(dev->info->unplug != NULL); > > + qdev_hot_removed = true; > + > return dev->info->unplug(dev); > } > > @@ -394,6 +399,11 @@ void qdev_machine_creation_done(void) > qdev_hotplug = 1; > } > > +bool qdev_machine_modified(void) > +{ > + return qdev_hot_added || qdev_hot_removed; > +} > + > /* Get a character (serial) device interface. */ > CharDriverState *qdev_init_chardev(DeviceState *dev) > {
Why do you track add/remove separately, in qdev_hot_added and qdev_hot_removed? I don't mind, just curious. [...]