diff --git a/hw/s390-virtio-bus.c b/hw/s390-virtio-bus.c index 43647a7a55041ad902393ca85e7a3a4b3217c088..1d38a8f5c5f3b32b1a1003ef71417954f41f87a4 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 960b9cfe3f589907b34a5476e9858a915f8f8e94..9f605d37cbbcd32c7bd056982ca65ce8682edba1 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 70564a188a3456ad901c6ead904cceb9d4769e85..d7850012bd023409628a55d9ef03fd45e6427744 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 a20c3cf6f235672bda30d7415e456491b0760d32..79b86f1aada448613e9ace9b738f9eff689dbc92 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),