summaryrefslogtreecommitdiff
path: root/pc-bios/s390-ccw
diff options
context:
space:
mode:
authorEric Farman <farman@linux.vnet.ibm.com>2017-05-10 17:53:58 +0200
committerCornelia Huck <cornelia.huck@de.ibm.com>2017-05-19 12:29:01 +0200
commitde4e3ae408ad29ca820ae68e09976e14d80289a6 (patch)
treec0f4dded38df10b4395505b923fd723c924d4a35 /pc-bios/s390-ccw
parentfe921fc8b7e92020bb140079a9f47f14fb8e9075 (diff)
downloadqemu-de4e3ae408ad29ca820ae68e09976e14d80289a6.tar.gz
pc-bios/s390-ccw: Build a reasonable max_sectors limit
Now that we've read all the possible limits that have been defined for a virtio-scsi controller and the disk we're booting from, it's possible that we are STILL going to exceed the limits of the host device. For example, a "-device scsi-generic" device does not support the Block Limits VPD page. So, let's fallback to something that seems to work for most boot configurations if larger values were specified (including if nothing was explicitly specified, and we took default values). Signed-off-by: Eric Farman <farman@linux.vnet.ibm.com> Message-Id: <20170510155359.32727-8-farman@linux.vnet.ibm.com> Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Diffstat (limited to 'pc-bios/s390-ccw')
-rw-r--r--pc-bios/s390-ccw/virtio-scsi.c9
-rw-r--r--pc-bios/s390-ccw/virtio-scsi.h2
2 files changed, 11 insertions, 0 deletions
diff --git a/pc-bios/s390-ccw/virtio-scsi.c b/pc-bios/s390-ccw/virtio-scsi.c
index b722f25ad7..f61ecf0205 100644
--- a/pc-bios/s390-ccw/virtio-scsi.c
+++ b/pc-bios/s390-ccw/virtio-scsi.c
@@ -399,6 +399,15 @@ void virtio_scsi_setup(VDev *vdev)
vdev->max_transfer = evpd_bl->max_transfer;
}
+ /*
+ * The host sg driver will often be unhappy with particularly large
+ * I/Os that exceed the block iovec limits. Let's enforce something
+ * reasonable, despite what the device configuration tells us.
+ */
+
+ vdev->max_transfer = MIN_NON_ZERO(VIRTIO_SCSI_MAX_SECTORS,
+ vdev->max_transfer);
+
if (!scsi_read_capacity(vdev, data, data_size)) {
virtio_scsi_verify_response(&resp, "virtio-scsi:setup:read_capacity");
}
diff --git a/pc-bios/s390-ccw/virtio-scsi.h b/pc-bios/s390-ccw/virtio-scsi.h
index f50b38b18b..4c4f4bbc31 100644
--- a/pc-bios/s390-ccw/virtio-scsi.h
+++ b/pc-bios/s390-ccw/virtio-scsi.h
@@ -19,6 +19,8 @@
#define VIRTIO_SCSI_CDB_SIZE SCSI_DEFAULT_CDB_SIZE
#define VIRTIO_SCSI_SENSE_SIZE SCSI_DEFAULT_SENSE_SIZE
+#define VIRTIO_SCSI_MAX_SECTORS 2048
+
/* command-specific response values */
#define VIRTIO_SCSI_S_OK 0x00
#define VIRTIO_SCSI_S_BAD_TARGET 0x03