Although virtio-pci-bus is internal object of composite virtio-pci device and it doesn't participate in -device/device_add hotplug flow, it's required by bus_add_child() that bus must be hotpluggable to be able to add child at runtime. Set parent of virtio-pci-bus as NOP hotplug controller, so that bus_add_child() would allow to add child device during hotplug time when BusState.allow_hotplug is dropped.
Signed-off-by: Igor Mammedov <imamm...@redhat.com> --- hw/virtio/virtio-pci.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c index f560814..0486b25 100644 --- a/hw/virtio/virtio-pci.c +++ b/hw/virtio/virtio-pci.c @@ -1070,6 +1070,10 @@ static const TypeInfo virtio_pci_info = { .class_init = virtio_pci_class_init, .class_size = sizeof(VirtioPCIClass), .abstract = true, + .interfaces = (InterfaceInfo[]) { + { TYPE_HOTPLUG_HANDLER }, + { } + } }; /* virtio-blk-pci */ @@ -1543,13 +1547,11 @@ static void virtio_pci_bus_new(VirtioBusState *bus, size_t bus_size, VirtIOPCIProxy *dev) { DeviceState *qdev = DEVICE(dev); - BusState *qbus; char virtio_bus_name[] = "virtio-bus"; qbus_create_inplace(bus, bus_size, TYPE_VIRTIO_PCI_BUS, qdev, virtio_bus_name); - qbus = BUS(bus); - qbus->allow_hotplug = 1; + qbus_set_hotplug_handler(BUS(bus), qdev, &error_abort); } static void virtio_pci_bus_class_init(ObjectClass *klass, void *data) -- 1.8.3.1