virtio-scsi.c (019adbd3715e98b5a09fab1370cc2c6904f79b6d) | virtio-scsi.c (ef546f1275f6563e8934dd5e338d29d9f9909ca6) |
---|---|
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 ((vdev->guest_features & (1 << VIRTIO_F_ANY_LAYOUT)) == 0) { | 148 if (!virtio_has_feature(vdev, VIRTIO_F_ANY_LAYOUT)) { |
149 req_size = req->elem.out_sg[0].iov_len; 150 resp_size = req->elem.in_sg[0].iov_len; 151 } 152 153 out_size = qemu_sgl_concat(req, req->elem.out_sg, 154 &req->elem.out_addr[0], req->elem.out_num, 155 req_size); 156 in_size = qemu_sgl_concat(req, req->elem.in_sg, --- 587 unchanged lines hidden (view full) --- 744 } 745} 746 747static void virtio_scsi_change(SCSIBus *bus, SCSIDevice *dev, SCSISense sense) 748{ 749 VirtIOSCSI *s = container_of(bus, VirtIOSCSI, bus); 750 VirtIODevice *vdev = VIRTIO_DEVICE(s); 751 | 149 req_size = req->elem.out_sg[0].iov_len; 150 resp_size = req->elem.in_sg[0].iov_len; 151 } 152 153 out_size = qemu_sgl_concat(req, req->elem.out_sg, 154 &req->elem.out_addr[0], req->elem.out_num, 155 req_size); 156 in_size = qemu_sgl_concat(req, req->elem.in_sg, --- 587 unchanged lines hidden (view full) --- 744 } 745} 746 747static void virtio_scsi_change(SCSIBus *bus, SCSIDevice *dev, SCSISense sense) 748{ 749 VirtIOSCSI *s = container_of(bus, VirtIOSCSI, bus); 750 VirtIODevice *vdev = VIRTIO_DEVICE(s); 751 |
752 if (((vdev->guest_features >> VIRTIO_SCSI_F_CHANGE) & 1) && | 752 if (virtio_has_feature(vdev, VIRTIO_SCSI_F_CHANGE) && |
753 dev->type != TYPE_ROM) { 754 virtio_scsi_push_event(s, dev, VIRTIO_SCSI_T_PARAM_CHANGE, 755 sense.asc | (sense.ascq << 8)); 756 } 757} 758 759static void virtio_scsi_hotplug(HotplugHandler *hotplug_dev, DeviceState *dev, 760 Error **errp) --- 4 unchanged lines hidden (view full) --- 765 766 if (s->ctx && !s->dataplane_disabled) { 767 if (blk_op_is_blocked(sd->conf.blk, BLOCK_OP_TYPE_DATAPLANE, errp)) { 768 return; 769 } 770 blk_op_block_all(sd->conf.blk, s->blocker); 771 } 772 | 753 dev->type != TYPE_ROM) { 754 virtio_scsi_push_event(s, dev, VIRTIO_SCSI_T_PARAM_CHANGE, 755 sense.asc | (sense.ascq << 8)); 756 } 757} 758 759static void virtio_scsi_hotplug(HotplugHandler *hotplug_dev, DeviceState *dev, 760 Error **errp) --- 4 unchanged lines hidden (view full) --- 765 766 if (s->ctx && !s->dataplane_disabled) { 767 if (blk_op_is_blocked(sd->conf.blk, BLOCK_OP_TYPE_DATAPLANE, errp)) { 768 return; 769 } 770 blk_op_block_all(sd->conf.blk, s->blocker); 771 } 772 |
773 if ((vdev->guest_features >> VIRTIO_SCSI_F_HOTPLUG) & 1) { | 773 if (virtio_has_feature(vdev, VIRTIO_SCSI_F_HOTPLUG)) { |
774 virtio_scsi_push_event(s, sd, 775 VIRTIO_SCSI_T_TRANSPORT_RESET, 776 VIRTIO_SCSI_EVT_RESET_RESCAN); 777 } 778} 779 780static void virtio_scsi_hotunplug(HotplugHandler *hotplug_dev, DeviceState *dev, 781 Error **errp) 782{ 783 VirtIODevice *vdev = VIRTIO_DEVICE(hotplug_dev); 784 VirtIOSCSI *s = VIRTIO_SCSI(vdev); 785 SCSIDevice *sd = SCSI_DEVICE(dev); 786 | 774 virtio_scsi_push_event(s, sd, 775 VIRTIO_SCSI_T_TRANSPORT_RESET, 776 VIRTIO_SCSI_EVT_RESET_RESCAN); 777 } 778} 779 780static void virtio_scsi_hotunplug(HotplugHandler *hotplug_dev, DeviceState *dev, 781 Error **errp) 782{ 783 VirtIODevice *vdev = VIRTIO_DEVICE(hotplug_dev); 784 VirtIOSCSI *s = VIRTIO_SCSI(vdev); 785 SCSIDevice *sd = SCSI_DEVICE(dev); 786 |
787 if ((vdev->guest_features >> VIRTIO_SCSI_F_HOTPLUG) & 1) { | 787 if (virtio_has_feature(vdev, VIRTIO_SCSI_F_HOTPLUG)) { |
788 virtio_scsi_push_event(s, sd, 789 VIRTIO_SCSI_T_TRANSPORT_RESET, 790 VIRTIO_SCSI_EVT_RESET_REMOVED); 791 } 792 793 if (s->ctx) { 794 blk_op_unblock_all(sd->conf.blk, s->blocker); 795 } --- 201 unchanged lines hidden --- | 788 virtio_scsi_push_event(s, sd, 789 VIRTIO_SCSI_T_TRANSPORT_RESET, 790 VIRTIO_SCSI_EVT_RESET_REMOVED); 791 } 792 793 if (s->ctx) { 794 blk_op_unblock_all(sd->conf.blk, s->blocker); 795 } --- 201 unchanged lines hidden --- |