[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v6 2/9] qdev: add to BusState "hotplug-handler" link
From: |
Igor Mammedov |
Subject: |
[Qemu-devel] [PATCH v6 2/9] qdev: add to BusState "hotplug-handler" link |
Date: |
Wed, 5 Feb 2014 16:36:45 +0100 |
It will allow to reuse field with different BUSes,
reducing code duplication. Field is intended for
replacing 'hotplug_qdev' field in PCIBus and also
will allow to avoid adding equivalent field to
DimmBus with possiblitity to refactor other BUSes
to use it instead of custom field.
In addition once all users of allow_hotplug field
are converted to new API, link could replace
allow_hotplug field in qdev hotplug code.
Signed-off-by: Igor Mammedov <address@hidden>
---
hw/core/qdev.c | 4 ++++
include/hw/qdev-core.h | 12 ++++++++++++
2 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 82a9123..c9f0c33 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;
@@ -870,6 +871,9 @@ static void qbus_initfn(Object *obj)
BusState *bus = BUS(obj);
QTAILQ_INIT(&bus->children);
+ object_property_add_link(obj, QDEV_HOTPLUG_HANDLER_PROPERTY,
+ TYPE_HOTPLUG_HANDLER,
+ (Object **)&bus->hotplug_handler, 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 2c4f140..41ec533 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -8,6 +8,7 @@
#include "qom/object.h"
#include "hw/irq.h"
#include "qapi/error.h"
+#include "hw/hotplug.h"
enum {
DEV_NVECTORS_UNSPECIFIED = -1,
@@ -180,14 +181,18 @@ typedef struct BusChild {
QTAILQ_ENTRY(BusChild) sibling;
} BusChild;
+#define QDEV_HOTPLUG_HANDLER_PROPERTY "hotplug-handler"
+
/**
* BusState:
+ * @hotplug_device: link to a hotplug device associated with bus.
*/
struct BusState {
Object obj;
DeviceState *parent;
const char *name;
int allow_hotplug;
+ HotplugHandler *hotplug_handler;
int max_index;
QTAILQ_HEAD(ChildrenHead, BusChild) children;
QLIST_ENTRY(BusState) sibling;
@@ -321,4 +326,11 @@ extern int qdev_hotplug;
char *qdev_get_dev_path(DeviceState *dev);
+static inline void qbus_set_hotplug_handler(BusState *bus, DeviceState
*handler,
+ Error **errp)
+{
+ object_property_set_link(OBJECT(bus), OBJECT(handler),
+ QDEV_HOTPLUG_HANDLER_PROPERTY, errp);
+ bus->allow_hotplug = 1;
+}
#endif
--
1.7.1
- [Qemu-devel] [PATCH v6 0/9] Refactor PCI/SHPC/PCIE hotplug to use a more generic hotplug API, Igor Mammedov, 2014/02/05
- [Qemu-devel] [PATCH v6 2/9] qdev: add to BusState "hotplug-handler" link,
Igor Mammedov <=
- [Qemu-devel] [PATCH v6 1/9] define hotplug interface, Igor Mammedov, 2014/02/05
- [Qemu-devel] [PATCH v6 3/9] qdev: add "hotpluggable" property to Device, Igor Mammedov, 2014/02/05
- [Qemu-devel] [PATCH v6 4/9] hw/acpi: move typeinfo to the file end, Igor Mammedov, 2014/02/05
- [Qemu-devel] [PATCH v6 5/9] qdev:pci: refactor PCIDevice to use generic "hotpluggable" property, Igor Mammedov, 2014/02/05
- [Qemu-devel] [PATCH v6 7/9] pci/shpc: convert SHPC hotplug to use hotplug-handler API, Igor Mammedov, 2014/02/05
- [Qemu-devel] [PATCH v6 8/9] pci/pcie: convert PCIE hotplug to use hotplug-handler API, Igor Mammedov, 2014/02/05
- [Qemu-devel] [PATCH v6 6/9] acpi/piix4pm: convert ACPI PCI hotplug to use hotplug-handler API, Igor Mammedov, 2014/02/05