qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [RESEND PATCH 1/2] qdev: Track runtime machine modifica


From: Markus Armbruster
Subject: Re: [Qemu-devel] [RESEND PATCH 1/2] qdev: Track runtime machine modifications
Date: Wed, 12 Jan 2011 13:09:34 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux)

Alex Williamson <address@hidden> 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 <address@hidden>
> Acked-by: Michael S. Tsirkin <address@hidden>
> Acked-by: Juan Quintela <address@hidden>
> ---
>
>  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.

[...]



reply via email to

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