Patchwork [2/7] qdev: add to BusState "hotplug-device" link

login
register
mail settings
Submitter Igor Mammedov
Date Dec. 6, 2013, 5:03 p.m.
Message ID <1386349395-5710-3-git-send-email-imammedo@redhat.com>
Download mbox | patch
Permalink /patch/298195/
State New
Headers show

Comments

Igor Mammedov - Dec. 6, 2013, 5:03 p.m.
It will allow to reuse field in different BUSes, reducing code duplication.
Field is intended fot replacing 'hotplug_qdev' field in PCIBus and also
will allow not to add equivalent field to DimmBus with possiblitity
to refactor other BUSes to use it instead of custom field.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
---
 hw/core/qdev.c         |    4 ++++
 include/hw/qdev-core.h |    4 ++++
 2 files changed, 8 insertions(+), 0 deletions(-)

Patch

diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index e374a93..43cf160 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -32,6 +32,7 @@ 
 #include "qapi/visitor.h"
 #include "qapi/qmp/qjson.h"
 #include "monitor/monitor.h"
+#include "hw/hotplug.h"
 
 int qdev_hotplug = 0;
 static bool qdev_hot_added = false;
@@ -868,6 +869,9 @@  static void qbus_initfn(Object *obj)
     BusState *bus = BUS(obj);
 
     QTAILQ_INIT(&bus->children);
+    object_property_add_link(obj, QDEV_HOTPLUG_DEVICE_PROPERTY,
+                             TYPE_HOTPLUG_DEVICE,
+                             (Object **)&bus->hotplug_device, NULL);
 }
 
 static char *default_bus_get_fw_dev_path(DeviceState *dev)
diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index f2043a6..9dc0fd1 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -169,14 +169,18 @@  typedef struct BusChild {
     QTAILQ_ENTRY(BusChild) sibling;
 } BusChild;
 
+#define QDEV_HOTPLUG_DEVICE_PROPERTY "hotplug-device"
+
 /**
  * BusState:
+ * @hotplug_device: link to a hotplug device associated with bus.
  */
 struct BusState {
     Object obj;
     DeviceState *parent;
     const char *name;
     int allow_hotplug;
+    DeviceState *hotplug_device;
     int max_index;
     QTAILQ_HEAD(ChildrenHead, BusChild) children;
     QLIST_ENTRY(BusState) sibling;