diff mbox

[1/3] ide: qdev: register ide bus unrealize function

Message ID 1488449293-80280-2-git-send-email-liqiang6-s@360.cn
State New
Headers show

Commit Message

Li Qiang March 2, 2017, 10:08 a.m. UTC
we have an idebus unrealize function, but it was being
registered as the unrealize function for the IDE Device,
so it was not getting invoked on device teardown because
nothing is "unrealizing" the IDE devices themselves.

Suggested-by: John Snow <jsnow@redhat.com>
Signed-off-by: Li Qiang <liqiang6-s@360.cn>
---
 hw/ide/qdev.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

Comments

Philippe Mathieu-Daudé March 2, 2017, 11:46 p.m. UTC | #1
On 03/02/2017 07:08 AM, Li Qiang wrote:
> we have an idebus unrealize function, but it was being
> registered as the unrealize function for the IDE Device,
> so it was not getting invoked on device teardown because
> nothing is "unrealizing" the IDE devices themselves.

nice catch

>
> Suggested-by: John Snow <jsnow@redhat.com>
> Signed-off-by: Li Qiang <liqiang6-s@360.cn>

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

> ---
>  hw/ide/qdev.c | 12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c
> index dbaa75c..fbf7aa5 100644
> --- a/hw/ide/qdev.c
> +++ b/hw/ide/qdev.c
> @@ -31,7 +31,7 @@
>  /* --------------------------------- */
>
>  static char *idebus_get_fw_dev_path(DeviceState *dev);
> -static void idebus_unrealize(DeviceState *qdev, Error **errp);
> +static void idebus_unrealize(BusState *qdev, Error **errp);
>
>  static Property ide_props[] = {
>      DEFINE_PROP_UINT32("unit", IDEDevice, unit, -1),
> @@ -43,14 +43,15 @@ static void ide_bus_class_init(ObjectClass *klass, void *data)
>      BusClass *k = BUS_CLASS(klass);
>
>      k->get_fw_dev_path = idebus_get_fw_dev_path;
> +    k->unrealize = idebus_unrealize;
>  }
>
> -static void idebus_unrealize(DeviceState *qdev, Error **errp)
> +static void idebus_unrealize(BusState *bus, Error **errp)
>  {
> -    IDEBus *bus = DO_UPCAST(IDEBus, qbus, qdev->parent_bus);
> +    IDEBus *ibus = IDE_BUS(bus);

:)

>
> -    if (bus->vmstate) {
> -        qemu_del_vm_change_state_handler(bus->vmstate);
> +    if (ibus->vmstate) {
> +        qemu_del_vm_change_state_handler(ibus->vmstate);
>      }
>  }
>
> @@ -365,7 +366,6 @@ static void ide_device_class_init(ObjectClass *klass, void *data)
>      k->init = ide_qdev_init;
>      set_bit(DEVICE_CATEGORY_STORAGE, k->categories);
>      k->bus_type = TYPE_IDE_BUS;
> -    k->unrealize = idebus_unrealize;
>      k->props = ide_props;
>  }
>
>
diff mbox

Patch

diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c
index dbaa75c..fbf7aa5 100644
--- a/hw/ide/qdev.c
+++ b/hw/ide/qdev.c
@@ -31,7 +31,7 @@ 
 /* --------------------------------- */
 
 static char *idebus_get_fw_dev_path(DeviceState *dev);
-static void idebus_unrealize(DeviceState *qdev, Error **errp);
+static void idebus_unrealize(BusState *qdev, Error **errp);
 
 static Property ide_props[] = {
     DEFINE_PROP_UINT32("unit", IDEDevice, unit, -1),
@@ -43,14 +43,15 @@  static void ide_bus_class_init(ObjectClass *klass, void *data)
     BusClass *k = BUS_CLASS(klass);
 
     k->get_fw_dev_path = idebus_get_fw_dev_path;
+    k->unrealize = idebus_unrealize;
 }
 
-static void idebus_unrealize(DeviceState *qdev, Error **errp)
+static void idebus_unrealize(BusState *bus, Error **errp)
 {
-    IDEBus *bus = DO_UPCAST(IDEBus, qbus, qdev->parent_bus);
+    IDEBus *ibus = IDE_BUS(bus);
 
-    if (bus->vmstate) {
-        qemu_del_vm_change_state_handler(bus->vmstate);
+    if (ibus->vmstate) {
+        qemu_del_vm_change_state_handler(ibus->vmstate);
     }
 }
 
@@ -365,7 +366,6 @@  static void ide_device_class_init(ObjectClass *klass, void *data)
     k->init = ide_qdev_init;
     set_bit(DEVICE_CATEGORY_STORAGE, k->categories);
     k->bus_type = TYPE_IDE_BUS;
-    k->unrealize = idebus_unrealize;
     k->props = ide_props;
 }