diff options
-rw-r--r-- | hw/s390-virtio-bus.c | 3 | ||||
-rw-r--r-- | hw/virtio-blk.c | 3 | ||||
-rw-r--r-- | hw/virtio-blk.h | 7 | ||||
-rw-r--r-- | hw/virtio-pci.c | 3 |
4 files changed, 9 insertions, 7 deletions
diff --git a/hw/s390-virtio-bus.c b/hw/s390-virtio-bus.c index 43647a7..1d38a8f 100644 --- a/hw/s390-virtio-bus.c +++ b/hw/s390-virtio-bus.c @@ -401,6 +401,9 @@ static TypeInfo s390_virtio_net = { static Property s390_virtio_blk_properties[] = { DEFINE_BLOCK_PROPERTIES(VirtIOS390Device, blk.conf), DEFINE_PROP_STRING("serial", VirtIOS390Device, blk.serial), +#ifdef __linux__ + DEFINE_PROP_BIT("scsi", VirtIOS390Device, blk.scsi, 0, true), +#endif DEFINE_PROP_END_OF_LIST(), }; diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c index 960b9cf..9f605d3 100644 --- a/hw/virtio-blk.c +++ b/hw/virtio-blk.c @@ -170,7 +170,7 @@ static void virtio_blk_handle_scsi(VirtIOBlockReq *req) */ req->scsi = (void *)req->elem.in_sg[req->elem.in_num - 2].iov_base; - if ((req->dev->vdev.guest_features & (1 << VIRTIO_BLK_F_SCSI)) == 0) { + if (!req->dev->blk->scsi) { status = VIRTIO_BLK_S_UNSUPP; goto fail; } @@ -504,6 +504,7 @@ static uint32_t virtio_blk_get_features(VirtIODevice *vdev, uint32_t features) features |= (1 << VIRTIO_BLK_F_GEOMETRY); features |= (1 << VIRTIO_BLK_F_TOPOLOGY); features |= (1 << VIRTIO_BLK_F_BLK_SIZE); + features |= (1 << VIRTIO_BLK_F_SCSI); if (bdrv_enable_write_cache(s->bs)) features |= (1 << VIRTIO_BLK_F_WCACHE); diff --git a/hw/virtio-blk.h b/hw/virtio-blk.h index 70564a1..d785001 100644 --- a/hw/virtio-blk.h +++ b/hw/virtio-blk.h @@ -101,15 +101,10 @@ struct VirtIOBlkConf { BlockConf conf; char *serial; + uint32_t scsi; }; -#ifdef __linux__ -#define DEFINE_VIRTIO_BLK_FEATURES(_state, _field) \ - DEFINE_VIRTIO_COMMON_FEATURES(_state, _field), \ - DEFINE_PROP_BIT("scsi", _state, _field, VIRTIO_BLK_F_SCSI, true) -#else #define DEFINE_VIRTIO_BLK_FEATURES(_state, _field) \ DEFINE_VIRTIO_COMMON_FEATURES(_state, _field) -#endif #endif diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c index a20c3cf..79b86f1 100644 --- a/hw/virtio-pci.c +++ b/hw/virtio-pci.c @@ -814,6 +814,9 @@ static Property virtio_blk_properties[] = { DEFINE_PROP_HEX32("class", VirtIOPCIProxy, class_code, 0), DEFINE_BLOCK_PROPERTIES(VirtIOPCIProxy, blk.conf), DEFINE_PROP_STRING("serial", VirtIOPCIProxy, blk.serial), +#ifdef __linux__ + DEFINE_PROP_BIT("scsi", VirtIOPCIProxy, blk.scsi, 0, true), +#endif DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags, VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, true), DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 2), DEFINE_VIRTIO_BLK_FEATURES(VirtIOPCIProxy, host_features), |