[Top][All Lists]
[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.
[...]