Il 24/09/2014 13:48, Igor Mammedov ha scritto: > Signed-off-by: Igor Mammedov <imamm...@redhat.com> > --- > hw/scsi/virtio-scsi.c | 28 ++++++++++++++++++---------- > 1 file changed, 18 insertions(+), 10 deletions(-) > > diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c > index 86aba88..aeda1cf 100644 > --- a/hw/scsi/virtio-scsi.c > +++ b/hw/scsi/virtio-scsi.c > @@ -649,26 +649,29 @@ static void virtio_scsi_change(SCSIBus *bus, SCSIDevice > *dev, SCSISense sense) > } > } > > -static void virtio_scsi_hotplug(SCSIBus *bus, SCSIDevice *dev) > +static void virtio_scsi_hotplug(HotplugHandler *hotplug_dev, DeviceState > *dev, > + Error **errp) > { > - VirtIOSCSI *s = container_of(bus, VirtIOSCSI, bus); > - VirtIODevice *vdev = VIRTIO_DEVICE(s); > + VirtIODevice *vdev = VIRTIO_DEVICE(hotplug_dev); > > if ((vdev->guest_features >> VIRTIO_SCSI_F_HOTPLUG) & 1) { > - virtio_scsi_push_event(s, dev, VIRTIO_SCSI_T_TRANSPORT_RESET, > + virtio_scsi_push_event(VIRTIO_SCSI(hotplug_dev), SCSI_DEVICE(dev), > + VIRTIO_SCSI_T_TRANSPORT_RESET, > VIRTIO_SCSI_EVT_RESET_RESCAN); > } > } > > -static void virtio_scsi_hot_unplug(SCSIBus *bus, SCSIDevice *dev) > +static void virtio_scsi_hotunplug(HotplugHandler *hotplug_dev, DeviceState > *dev, > + Error **errp) > { > - VirtIOSCSI *s = container_of(bus, VirtIOSCSI, bus); > - VirtIODevice *vdev = VIRTIO_DEVICE(s); > + VirtIODevice *vdev = VIRTIO_DEVICE(hotplug_dev); > > if ((vdev->guest_features >> VIRTIO_SCSI_F_HOTPLUG) & 1) { > - virtio_scsi_push_event(s, dev, VIRTIO_SCSI_T_TRANSPORT_RESET, > + virtio_scsi_push_event(VIRTIO_SCSI(hotplug_dev), SCSI_DEVICE(dev), > + VIRTIO_SCSI_T_TRANSPORT_RESET, > VIRTIO_SCSI_EVT_RESET_REMOVED); > } > + qdev_simple_device_unplug_cb(hotplug_dev, dev, errp); > } > > static struct SCSIBusInfo virtio_scsi_scsi_info = { > @@ -680,8 +683,6 @@ static struct SCSIBusInfo virtio_scsi_scsi_info = { > .complete = virtio_scsi_command_complete, > .cancel = virtio_scsi_request_cancelled, > .change = virtio_scsi_change, > - .hotplug = virtio_scsi_hotplug, > - .hot_unplug = virtio_scsi_hot_unplug, > .parse_cdb = virtio_scsi_parse_cdb, > .get_sg_list = virtio_scsi_get_sg_list, > .save_request = virtio_scsi_save_request, > @@ -785,6 +786,7 @@ static void virtio_scsi_class_init(ObjectClass *klass, > void *data) > { > DeviceClass *dc = DEVICE_CLASS(klass); > VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass); > + HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(klass); > > dc->props = virtio_scsi_properties; > set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); > @@ -793,6 +795,8 @@ static void virtio_scsi_class_init(ObjectClass *klass, > void *data) > vdc->set_config = virtio_scsi_set_config; > vdc->get_features = virtio_scsi_get_features; > vdc->reset = virtio_scsi_reset; > + hc->plug = virtio_scsi_hotplug; > + hc->unplug = virtio_scsi_hotunplug; > } > > static const TypeInfo virtio_scsi_common_info = { > @@ -808,6 +812,10 @@ static const TypeInfo virtio_scsi_info = { > .parent = TYPE_VIRTIO_SCSI_COMMON, > .instance_size = sizeof(VirtIOSCSI), > .class_init = virtio_scsi_class_init, > + .interfaces = (InterfaceInfo[]) { > + { TYPE_HOTPLUG_HANDLER }, > + { } > + } > }; > > static void virtio_register_types(void) >
Reviewed-by: Paolo Bonzini <pbonz...@redhat.com>