virtio-scsi.c (5452b6f61ae943aff5c13cdd65fb476efff636d3) virtio-scsi.c (95129d6fc9ead97155627a4ca0cfd37282883658)
1/*
2 * Virtio SCSI HBA
3 *
4 * Copyright IBM, Corp. 2010
5 * Copyright Red Hat, Inc. 2011
6 *
7 * Authors:
8 * Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>

--- 131 unchanged lines hidden (view full) ---

140 * request/response, making the payload start at the second element
141 * of the iovec.
142 *
143 * The actual length of the response header, stored in req->resp_size,
144 * does not change.
145 *
146 * TODO: always disable this workaround for virtio 1.0 devices.
147 */
1/*
2 * Virtio SCSI HBA
3 *
4 * Copyright IBM, Corp. 2010
5 * Copyright Red Hat, Inc. 2011
6 *
7 * Authors:
8 * Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>

--- 131 unchanged lines hidden (view full) ---

140 * request/response, making the payload start at the second element
141 * of the iovec.
142 *
143 * The actual length of the response header, stored in req->resp_size,
144 * does not change.
145 *
146 * TODO: always disable this workaround for virtio 1.0 devices.
147 */
148 if (!virtio_has_feature(vdev, VIRTIO_F_ANY_LAYOUT)) {
148 if (!virtio_vdev_has_feature(vdev, VIRTIO_F_ANY_LAYOUT)) {
149 if (req->elem.out_num) {
150 req_size = req->elem.out_sg[0].iov_len;
151 }
152 if (req->elem.in_num) {
153 resp_size = req->elem.in_sg[0].iov_len;
154 }
155 }
156

--- 597 unchanged lines hidden (view full) ---

754 }
755}
756
757static void virtio_scsi_change(SCSIBus *bus, SCSIDevice *dev, SCSISense sense)
758{
759 VirtIOSCSI *s = container_of(bus, VirtIOSCSI, bus);
760 VirtIODevice *vdev = VIRTIO_DEVICE(s);
761
149 if (req->elem.out_num) {
150 req_size = req->elem.out_sg[0].iov_len;
151 }
152 if (req->elem.in_num) {
153 resp_size = req->elem.in_sg[0].iov_len;
154 }
155 }
156

--- 597 unchanged lines hidden (view full) ---

754 }
755}
756
757static void virtio_scsi_change(SCSIBus *bus, SCSIDevice *dev, SCSISense sense)
758{
759 VirtIOSCSI *s = container_of(bus, VirtIOSCSI, bus);
760 VirtIODevice *vdev = VIRTIO_DEVICE(s);
761
762 if (virtio_has_feature(vdev, VIRTIO_SCSI_F_CHANGE) &&
762 if (virtio_vdev_has_feature(vdev, VIRTIO_SCSI_F_CHANGE) &&
763 dev->type != TYPE_ROM) {
764 virtio_scsi_push_event(s, dev, VIRTIO_SCSI_T_PARAM_CHANGE,
765 sense.asc | (sense.ascq << 8));
766 }
767}
768
769static void virtio_scsi_hotplug(HotplugHandler *hotplug_dev, DeviceState *dev,
770 Error **errp)

--- 7 unchanged lines hidden (view full) ---

778 return;
779 }
780 blk_op_block_all(sd->conf.blk, s->blocker);
781 aio_context_acquire(s->ctx);
782 blk_set_aio_context(sd->conf.blk, s->ctx);
783 aio_context_release(s->ctx);
784 }
785
763 dev->type != TYPE_ROM) {
764 virtio_scsi_push_event(s, dev, VIRTIO_SCSI_T_PARAM_CHANGE,
765 sense.asc | (sense.ascq << 8));
766 }
767}
768
769static void virtio_scsi_hotplug(HotplugHandler *hotplug_dev, DeviceState *dev,
770 Error **errp)

--- 7 unchanged lines hidden (view full) ---

778 return;
779 }
780 blk_op_block_all(sd->conf.blk, s->blocker);
781 aio_context_acquire(s->ctx);
782 blk_set_aio_context(sd->conf.blk, s->ctx);
783 aio_context_release(s->ctx);
784 }
785
786 if (virtio_has_feature(vdev, VIRTIO_SCSI_F_HOTPLUG)) {
786 if (virtio_vdev_has_feature(vdev, VIRTIO_SCSI_F_HOTPLUG)) {
787 virtio_scsi_push_event(s, sd,
788 VIRTIO_SCSI_T_TRANSPORT_RESET,
789 VIRTIO_SCSI_EVT_RESET_RESCAN);
790 }
791}
792
793static void virtio_scsi_hotunplug(HotplugHandler *hotplug_dev, DeviceState *dev,
794 Error **errp)
795{
796 VirtIODevice *vdev = VIRTIO_DEVICE(hotplug_dev);
797 VirtIOSCSI *s = VIRTIO_SCSI(vdev);
798 SCSIDevice *sd = SCSI_DEVICE(dev);
799
787 virtio_scsi_push_event(s, sd,
788 VIRTIO_SCSI_T_TRANSPORT_RESET,
789 VIRTIO_SCSI_EVT_RESET_RESCAN);
790 }
791}
792
793static void virtio_scsi_hotunplug(HotplugHandler *hotplug_dev, DeviceState *dev,
794 Error **errp)
795{
796 VirtIODevice *vdev = VIRTIO_DEVICE(hotplug_dev);
797 VirtIOSCSI *s = VIRTIO_SCSI(vdev);
798 SCSIDevice *sd = SCSI_DEVICE(dev);
799
800 if (virtio_has_feature(vdev, VIRTIO_SCSI_F_HOTPLUG)) {
800 if (virtio_vdev_has_feature(vdev, VIRTIO_SCSI_F_HOTPLUG)) {
801 virtio_scsi_push_event(s, sd,
802 VIRTIO_SCSI_T_TRANSPORT_RESET,
803 VIRTIO_SCSI_EVT_RESET_REMOVED);
804 }
805
806 if (s->ctx) {
807 blk_op_unblock_all(sd->conf.blk, s->blocker);
808 }

--- 213 unchanged lines hidden ---
801 virtio_scsi_push_event(s, sd,
802 VIRTIO_SCSI_T_TRANSPORT_RESET,
803 VIRTIO_SCSI_EVT_RESET_REMOVED);
804 }
805
806 if (s->ctx) {
807 blk_op_unblock_all(sd->conf.blk, s->blocker);
808 }

--- 213 unchanged lines hidden ---