virtio: make VIRTIO_F_VERSION_1 a transport bit
authorMichael S. Tsirkin <mst@redhat.com>
Mon, 1 Dec 2014 13:52:40 +0000 (15:52 +0200)
committerMichael S. Tsirkin <mst@redhat.com>
Tue, 9 Dec 2014 10:06:32 +0000 (12:06 +0200)
Activate VIRTIO_F_VERSION_1 automatically unless legacy_only
is set.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
drivers/virtio/virtio.c
drivers/virtio/virtio_ring.c
include/uapi/linux/virtio_config.h

index f9ad99c8b35241681393670801f5aaa037cd6538..fa6b75db5f1fb2d89cb83804e99e2a3317db9f8a 100644 (file)
@@ -197,7 +197,11 @@ static int virtio_dev_probe(struct device *_d)
                driver_features_legacy = driver_features;
        }
 
-       if (driver_features & device_features & (1ULL << VIRTIO_F_VERSION_1))
+       /* Detect legacy-only drivers and disable VIRTIO_F_VERSION_1. */
+       if (drv->legacy_only)
+               device_features &= ~(1ULL << VIRTIO_F_VERSION_1);
+
+       if (device_features & (1ULL << VIRTIO_F_VERSION_1))
                dev->features = driver_features & device_features;
        else
                dev->features = driver_features_legacy & device_features;
index 55532a43ead3cfdeffe09af0337e4056c75e42fa..00ec6b3f96b2bf17abc94f8d31288a01b0c9af14 100644 (file)
@@ -780,6 +780,8 @@ void vring_transport_features(struct virtio_device *vdev)
                        break;
                case VIRTIO_RING_F_EVENT_IDX:
                        break;
+               case VIRTIO_F_VERSION_1:
+                       break;
                default:
                        /* We don't understand this bit. */
                        __virtio_clear_bit(vdev, i);
index 4d05671fbaec2f77827a0bbf4d588366143610ff..a6d0cdeaacd4dc86ed1feea096f540a8d4e0e4d1 100644 (file)
 /* We've given up on this device. */
 #define VIRTIO_CONFIG_S_FAILED         0x80
 
-/* Some virtio feature bits (currently bits 28 through 31) are reserved for the
+/* Some virtio feature bits (currently bits 28 through 32) are reserved for the
  * transport being used (eg. virtio_ring), the rest are per-device feature
  * bits. */
 #define VIRTIO_TRANSPORT_F_START       28
-#define VIRTIO_TRANSPORT_F_END         32
+#define VIRTIO_TRANSPORT_F_END         33
 
 /* Do we get callbacks when the ring is completely used, even if we've
  * suppressed them? */