On Wed, Jul 22, 2015 at 01:59:51PM +0800, Jason Wang wrote: > SCSI passthrough was no longer supported in virtio 1.0, so this patch > fail the get_features() when both 1.0 and scsi is set. And also only > advertise VIRTIO_BLK_F_SCSI for legacy virtio-blk device. > > Signed-off-by: Jason Wang <jasow...@redhat.com> > --- > hw/block/virtio-blk.c | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c > index 4c27974..4716c3e 100644 > --- a/hw/block/virtio-blk.c > +++ b/hw/block/virtio-blk.c > @@ -731,7 +731,14 @@ static uint64_t virtio_blk_get_features(VirtIODevice > *vdev, uint64_t features, > virtio_add_feature(&features, VIRTIO_BLK_F_GEOMETRY); > virtio_add_feature(&features, VIRTIO_BLK_F_TOPOLOGY); > virtio_add_feature(&features, VIRTIO_BLK_F_BLK_SIZE); > - virtio_add_feature(&features, VIRTIO_BLK_F_SCSI); > + if (__virtio_has_feature(features, VIRTIO_F_VERSION_1)) { > + if (s->conf.scsi) { > + error_setg(errp, "Virtio 1.0 does not support scsi > passthrough!");
A bit better: "Virtio modern does not support scsi passthrough - please set disable-modern=on". It might be even better if we could specify the device that failed the initialization, but I don't know how to do that in a way that's helpful to the user. Markus? > + return 0; > + } > + } else { > + virtio_add_feature(&features, VIRTIO_BLK_F_SCSI); > + } > > if (s->conf.config_wce) { > virtio_add_feature(&features, VIRTIO_BLK_F_CONFIG_WCE); > -- > 2.1.4