OSDN Git Service

pc-bios/s390-ccw: Get Block Limits VPD device data
authorEric Farman <farman@linux.vnet.ibm.com>
Wed, 10 May 2017 15:53:57 +0000 (17:53 +0200)
committerCornelia Huck <cornelia.huck@de.ibm.com>
Fri, 19 May 2017 10:29:01 +0000 (12:29 +0200)
commitfe921fc8b7e92020bb140079a9f47f14fb8e9075
treeb40bd42284828ff0b2908e692369d2f0e84ce29c
parent8edfe85bef669d676ad17cd84b4e3dce43b110e4
pc-bios/s390-ccw: Get Block Limits VPD device data

The "Block Limits" Inquiry VPD page is optional for any SCSI device,
but if it's supported it provides a hint of the maximum I/O transfer
length for this particular device. If this page is supported by the
disk, let's issue that Inquiry and use the minimum of it and the
SCSI controller limit. That will cover this scenario:

  qemu-system-s390x ...
    -device virtio-scsi-ccw,id=scsi0,max_sectors=32768 ...
    -drive file=/dev/sda,if=none,id=drive0,format=raw ...
    -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,
            drive=drive0,id=disk0,max_io_size=1048576

controller: 32768 sectors x 512 bytes/sector = 16777216 bytes
      disk:                                     1048576 bytes

Now that we have a limit for a virtio-scsi disk, compare that with the
limit for the virtio-scsi controller when we actually build the I/O.
The minimum of these two limits should be the one we use.

Signed-off-by: Eric Farman <farman@linux.vnet.ibm.com>
Message-Id: <20170510155359.32727-7-farman@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
pc-bios/s390-ccw/scsi.h
pc-bios/s390-ccw/virtio-scsi.c
pc-bios/s390-ccw/virtio.h