Cc'ing Markus On 8/20/20 9:06 PM, Daniel Henrique Barboza wrote: > We do not implement hotplug in the vscsi bus, but we forgot to > tell qdev about it. The result is that users are able to hotplug > devices in the vscsi bus, the devices appear in qdev, but they > aren't usable by the guest OS unless the user reboots it first. > > Setting qbus hotplug_handler to NULL will tell qdev-monitor, via > qbus_is_hotpluggable(), that we do not support hotplug operations > in spapr_vscsi. > > Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1862059 > > Signed-off-by: Daniel Henrique Barboza <danielhb...@gmail.com> > --- > hw/scsi/spapr_vscsi.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/hw/scsi/spapr_vscsi.c b/hw/scsi/spapr_vscsi.c > index d17dc03c73..57f0a1336f 100644 > --- a/hw/scsi/spapr_vscsi.c > +++ b/hw/scsi/spapr_vscsi.c > @@ -1219,6 +1219,9 @@ static void spapr_vscsi_realize(SpaprVioDevice *dev, > Error **errp) > > scsi_bus_new(&s->bus, sizeof(s->bus), DEVICE(dev), > &vscsi_scsi_info, NULL); > + > + /* ibmvscsi SCSI bus does not allow hotplug. */ > + qbus_set_hotplug_handler(BUS(&s->bus), NULL);
Can't this be a problem later in DeviceClass::unrealize()? I was expecting something like, overwriting the parent bus type: -- >8 -- @@ -1271,6 +1271,7 @@ static void spapr_vscsi_class_init(ObjectClass *klass, void *data) DeviceClass *dc = DEVICE_CLASS(klass); SpaprVioDeviceClass *k = VIO_SPAPR_DEVICE_CLASS(klass); + k->bus_type = NULL; /* ibmvscsi SCSI bus does not allow hotplug. */ k->realize = spapr_vscsi_realize; k->reset = spapr_vscsi_reset; k->devnode = spapr_vscsi_devnode; --- > } > > void spapr_vscsi_create(SpaprVioBus *bus) >