@@ -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)
@@ -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;
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(-)