[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PATCH RFC 02/10] qdev: Let machine hotplug handler to overri
From: |
David Hildenbrand |
Subject: |
[Qemu-ppc] [PATCH RFC 02/10] qdev: Let machine hotplug handler to override bus hotplug handler |
Date: |
Wed, 16 Jan 2019 12:35:15 +0100 |
From: Igor Mammedov <address@hidden>
it will allow to return another hotplug handler than the default
one for a specific bus based device type. Which is needed to handle
non trivial plug/unplug sequences that need the access to resources
configured outside of bus where device is attached.
That will allow for returned hotplug handler to orchestrate wiring
in arbitrary order, by chaining other hotplug handlers when
it's needed.
PS:
It could be used for hybrid virtio-mem and virtio-pmem devices
where it will return machine as hotplug handler which will do
necessary wiring at machine level and then pass control down
the chain to bus specific hotplug handler.
Example of top level hotplug handler override and custom plug sequence:
some_machine_get_hotplug_handler(machine){
if (object_dynamic_cast(OBJECT(dev), TYPE_SOME_BUS_DEVICE)) {
return HOTPLUG_HANDLER(machine);
}
return NULL;
}
some_machine_device_plug(hotplug_dev, dev) {
if (object_dynamic_cast(OBJECT(dev), TYPE_SOME_BUS_DEVICE)) {
/* do machine specific initialization */
some_machine_init_special_device(dev)
/* pass control to bus specific handler */
hotplug_handler_plug(dev->parent_bus->hotplug_handler, dev)
}
}
Reviewed-by: David Gibson <address@hidden>
Signed-off-by: Igor Mammedov <address@hidden>
Signed-off-by: David Hildenbrand <address@hidden>
---
hw/core/qdev.c | 6 ++----
include/hw/qdev-core.h | 11 +++++++++++
2 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 278cc094ec..7ad45c0bd6 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -235,12 +235,10 @@ HotplugHandler
*qdev_get_machine_hotplug_handler(DeviceState *dev)
HotplugHandler *qdev_get_hotplug_handler(DeviceState *dev)
{
- HotplugHandler *hotplug_ctrl;
+ HotplugHandler *hotplug_ctrl = qdev_get_machine_hotplug_handler(dev);
- if (dev->parent_bus && dev->parent_bus->hotplug_handler) {
+ if (hotplug_ctrl == NULL && dev->parent_bus) {
hotplug_ctrl = dev->parent_bus->hotplug_handler;
- } else {
- hotplug_ctrl = qdev_get_machine_hotplug_handler(dev);
}
return hotplug_ctrl;
}
diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index 9614f76ae6..0632057fd6 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -278,6 +278,17 @@ void qdev_init_nofail(DeviceState *dev);
void qdev_set_legacy_instance_id(DeviceState *dev, int alias_id,
int required_for_version);
HotplugHandler *qdev_get_machine_hotplug_handler(DeviceState *dev);
+/**
+ * qdev_get_hotplug_handler: Get handler responsible for device wiring
+ *
+ * Find HOTPLUG_HANDLER for @dev that provides [pre|un]plug callbacks for it.
+ *
+ * Note: in case @dev has a parent bus, it will be returned as handler unless
+ * machine handler overrides it.
+ *
+ * Returns: pointer to object that implements TYPE_HOTPLUG_HANDLER interface
+ * or NULL if there aren't any.
+ */
HotplugHandler *qdev_get_hotplug_handler(DeviceState *dev);
void qdev_unplug(DeviceState *dev, Error **errp);
void qdev_simple_device_unplug_cb(HotplugHandler *hotplug_dev,
--
2.17.2
- [Qemu-ppc] [PATCH RFC 00/10] qdev: Hotplug handler chaining + virtio-pmem, David Hildenbrand, 2019/01/16
- [Qemu-ppc] [PATCH RFC 05/10] virtio-pci: Allow to specify additional interfaces for the base type, David Hildenbrand, 2019/01/16
- [Qemu-ppc] [PATCH RFC 02/10] qdev: Let machine hotplug handler to override bus hotplug handler,
David Hildenbrand <=
- [Qemu-ppc] [PATCH RFC 07/10] hmp: Handle virtio-pmem when printing memory device infos, David Hildenbrand, 2019/01/16
- [Qemu-ppc] [PATCH RFC 10/10] pc: Enable support for virtio-pmem, David Hildenbrand, 2019/01/16
- [Qemu-ppc] [PATCH RFC 06/10] virtio-pci: Proxy for virtio-pmem, David Hildenbrand, 2019/01/16
- [Qemu-ppc] [PATCH RFC 09/10] pc: Support for PCI based memory devices, David Hildenbrand, 2019/01/16
[Qemu-ppc] [PATCH RFC 08/10] numa: Handle virtio-pmem in NUMA stats, David Hildenbrand, 2019/01/16
[Qemu-ppc] [PATCH RFC 03/10] qdev: Provide qdev_get_bus_hotplug_handler(), David Hildenbrand, 2019/01/16