Message ID | 1411559299-19042-24-git-send-email-imammedo@redhat.com |
---|---|
State | New |
Headers | show |
Il 24/09/2014 13:48, Igor Mammedov ha scritto: > Signed-off-by: Igor Mammedov <imammedo@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 <pbonzini@redhat.com>
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)
Signed-off-by: Igor Mammedov <imammedo@redhat.com> --- hw/scsi/virtio-scsi.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-)