summary refs log tree commit diff stats
path: root/hw/qdev.c
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2009-09-01 09:56:12 +0200
committerAnthony Liguori <aliguori@us.ibm.com>2009-09-09 14:57:20 -0500
commit959f733a296a69564a075d60d8c821ad8e258623 (patch)
treee261867939613c7f7b4887f710bb9a50836e1b92 /hw/qdev.c
parent7fc2f2c0869f68eaa42446e5a394d79bb7c9f7f7 (diff)
downloadfocaccia-qemu-959f733a296a69564a075d60d8c821ad8e258623.tar.gz
focaccia-qemu-959f733a296a69564a075d60d8c821ad8e258623.zip
qdev: integrate reset
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'hw/qdev.c')
-rw-r--r--hw/qdev.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/hw/qdev.c b/hw/qdev.c
index 0e9732b1ca..675248fc12 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -214,12 +214,21 @@ DeviceState *qdev_device_add(QemuOpts *opts)
    calling this function.  */
 int qdev_init(DeviceState *dev)
 {
-    return dev->info->init(dev, dev->info);
+    int rc;
+
+    rc = dev->info->init(dev, dev->info);
+    if (rc < 0)
+        return rc;
+    if (dev->info->reset)
+        qemu_register_reset(dev->info->reset, dev);
+    return 0;
 }
 
 /* Unlink device from bus and free the structure.  */
 void qdev_free(DeviceState *dev)
 {
+    if (dev->info->reset)
+        qemu_unregister_reset(dev->info->reset, dev);
     LIST_REMOVE(dev, sibling);
     qemu_free(dev);
 }