aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/kvm
diff options
context:
space:
mode:
authorMichael S. Tsirkin <mst@redhat.com>2014-12-04 19:16:43 +0200
committerMichael S. Tsirkin <mst@redhat.com>2014-12-09 21:41:58 +0200
commit4d23676fb645f683b61943de9901d58c1e728a25 (patch)
treec616b24dba9ede573ede98f4ba627cadac3adb31 /drivers/s390/kvm
parentvirtio: allow finalize_features to fail (diff)
downloadlinux-dev-4d23676fb645f683b61943de9901d58c1e728a25.tar.xz
linux-dev-4d23676fb645f683b61943de9901d58c1e728a25.zip
virtio_ccw: rev 1 devices set VIRTIO_F_VERSION_1
What does it mean if rev 1 device does not set VIRTIO_F_VERSION_1? E.g. is it native endian? Let's not even try to drive such devices: fail attempts to finalize features. virtio core will detect this and bail out. Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'drivers/s390/kvm')
-rw-r--r--drivers/s390/kvm/virtio_ccw.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/s390/kvm/virtio_ccw.c b/drivers/s390/kvm/virtio_ccw.c
index 789275fb577f..f9f87ba013c9 100644
--- a/drivers/s390/kvm/virtio_ccw.c
+++ b/drivers/s390/kvm/virtio_ccw.c
@@ -758,6 +758,13 @@ static int virtio_ccw_finalize_features(struct virtio_device *vdev)
struct virtio_feature_desc *features;
struct ccw1 *ccw;
+ if (vcdev->revision == 1 &&
+ !__virtio_test_bit(vdev, VIRTIO_F_VERSION_1)) {
+ dev_err(&vdev->dev, "virtio: device uses revision 1 "
+ "but does not have VIRTIO_F_VERSION_1\n");
+ return -EINVAL;
+ }
+
ccw = kzalloc(sizeof(*ccw), GFP_DMA | GFP_KERNEL);
if (!ccw)
return 0;