qemu-e2k/hw/scsi
Daniel Henrique Barboza 29e560f00e hw/scsi: support SCSI-2 passthrough without PI
QEMU SCSI code makes assumptions about how the PROTECT and BYTCHK
works in the protocol, denying support for PI (Protection
Information) in case the guest OS requests it. However, in SCSI versions 2
and older, there is no PI concept in the protocol.

This means that when dealing with such devices:

- there is no PROTECT bit in byte 5 of the standard INQUIRY response. The
whole byte is marked as "Reserved";

- there is no RDPROTECT in byte 2 of READ. We have 'Logical Unit Number'
in this field instead;

- there is no VRPROTECT in byte 2 of VERIFY. We have 'Logical Unit Number'
in this field instead. This also means that the BYTCHK bit in this case
is not related to PI.

Since QEMU does not consider these changes, a SCSI passthrough using
a SCSI-2 device will not work. It will mistake these fields with
PI information and return Illegal Request SCSI SENSE thinking
that the driver is asking for PI support.

This patch fixes it by adding a new attribute called 'scsi_version'
that is read from the standard INQUIRY response of passthrough
devices. This allows for a version verification before applying
conditions related to PI that doesn't apply for older versions.

Reported-by: Dac Nguyen <dacng@us.ibm.com>
Signed-off-by: Daniel Henrique Barboza <danielhb@linux.vnet.ibm.com>
Message-Id: <20180327211451.14647-1-danielhb@linux.vnet.ibm.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2018-04-09 16:36:39 +02:00
..
esp-pci.c pci: Add INTERFACE_CONVENTIONAL_PCI_DEVICE to Conventional PCI devices 2017-10-15 05:54:43 +03:00
esp.c hw/mips/jazz: Fix implicit creation of "-drive if=scsi" devices 2018-03-12 16:12:47 +01:00
lsi53c895a.c hw/ppc/prep: Fix implicit creation of "-drive if=scsi" devices 2018-03-18 18:27:23 +11:00
Makefile.objs vhost-user-scsi: Introduce vhost-user-scsi host device 2017-06-15 11:18:40 +02:00
megasas.c pci: removed the is_express field since a uniform interface was inserted 2018-02-08 21:06:41 +02:00
mfi.h
mpi.h
mptconfig.c
mptendian.c hw: Do not include "sysemu/block-backend.h" if it is not necessary 2018-03-12 16:12:46 +01:00
mptsas.c pci: Add pci_dev_bus_num() helper 2017-12-05 19:13:45 +02:00
mptsas.h
scsi-bus.c scsi: support NDOB (no data-out buffer) for WRITE SAME commands 2018-03-12 16:12:46 +01:00
scsi-disk.c hw/scsi: support SCSI-2 passthrough without PI 2018-04-09 16:36:39 +02:00
scsi-generic.c hw/scsi: support SCSI-2 passthrough without PI 2018-04-09 16:36:39 +02:00
spapr_vscsi.c scsi: Remove automatic creation of SCSI controllers with -drive if=scsi 2018-03-06 14:00:59 +01:00
srp.h
trace-events trace-events: fix code style: print 0x before hex numbers 2017-08-01 12:13:07 +01:00
vhost-scsi-common.c Include qapi/error.h exactly where needed 2018-02-09 13:50:17 +01:00
vhost-scsi.c vhost-scsi: add missing virtqueue_size parameter 2017-12-05 12:38:31 +00:00
vhost-user-scsi.c misc: remove headers implicitly included 2017-12-18 17:07:02 +03:00
viosrp.h
virtio-scsi-dataplane.c virtio-scsi: fix race between .ioeventfd_stop() and vq handler 2018-03-08 17:38:51 +00:00
virtio-scsi.c scsi: move block/scsi.h to include/scsi/constants.h 2017-09-19 14:09:31 +02:00
vmw_pvscsi.c qdev: use device_class_set_parent_realize/unrealize/reset() 2018-02-05 13:54:38 +01:00
vmw_pvscsi.h