aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael S. Tsirkin <mst@redhat.com>2014-12-01 08:52:40 -0500
committerMichael S. Tsirkin <mst@redhat.com>2014-12-09 05:06:32 -0500
commit747ae34a6ef681fbd993be214d8c0a30bd4a2fda (patch)
tree3905b0413ec10b96e9a62af9d19acc682c8390dc
parentdf1b57fe59bc5b1486fe142e6ee76c493c52c543 (diff)
virtio: make VIRTIO_F_VERSION_1 a transport bit
Activate VIRTIO_F_VERSION_1 automatically unless legacy_only is set. Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
-rw-r--r--drivers/virtio/virtio.c6
-rw-r--r--drivers/virtio/virtio_ring.c2
-rw-r--r--include/uapi/linux/virtio_config.h4
3 files changed, 9 insertions, 3 deletions
diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c
index f9ad99c8b352..fa6b75db5f1f 100644
--- a/drivers/virtio/virtio.c
+++ b/drivers/virtio/virtio.c
@@ -197,7 +197,11 @@ static int virtio_dev_probe(struct device *_d)
197 driver_features_legacy = driver_features; 197 driver_features_legacy = driver_features;
198 } 198 }
199 199
200 if (driver_features & device_features & (1ULL << VIRTIO_F_VERSION_1)) 200 /* Detect legacy-only drivers and disable VIRTIO_F_VERSION_1. */
201 if (drv->legacy_only)
202 device_features &= ~(1ULL << VIRTIO_F_VERSION_1);
203
204 if (device_features & (1ULL << VIRTIO_F_VERSION_1))
201 dev->features = driver_features & device_features; 205 dev->features = driver_features & device_features;
202 else 206 else
203 dev->features = driver_features_legacy & device_features; 207 dev->features = driver_features_legacy & device_features;
diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
index 55532a43ead3..00ec6b3f96b2 100644
--- a/drivers/virtio/virtio_ring.c
+++ b/drivers/virtio/virtio_ring.c
@@ -780,6 +780,8 @@ void vring_transport_features(struct virtio_device *vdev)
780 break; 780 break;
781 case VIRTIO_RING_F_EVENT_IDX: 781 case VIRTIO_RING_F_EVENT_IDX:
782 break; 782 break;
783 case VIRTIO_F_VERSION_1:
784 break;
783 default: 785 default:
784 /* We don't understand this bit. */ 786 /* We don't understand this bit. */
785 __virtio_clear_bit(vdev, i); 787 __virtio_clear_bit(vdev, i);
diff --git a/include/uapi/linux/virtio_config.h b/include/uapi/linux/virtio_config.h
index 4d05671fbaec..a6d0cdeaacd4 100644
--- a/include/uapi/linux/virtio_config.h
+++ b/include/uapi/linux/virtio_config.h
@@ -43,11 +43,11 @@
43/* We've given up on this device. */ 43/* We've given up on this device. */
44#define VIRTIO_CONFIG_S_FAILED 0x80 44#define VIRTIO_CONFIG_S_FAILED 0x80
45 45
46/* Some virtio feature bits (currently bits 28 through 31) are reserved for the 46/* Some virtio feature bits (currently bits 28 through 32) are reserved for the
47 * transport being used (eg. virtio_ring), the rest are per-device feature 47 * transport being used (eg. virtio_ring), the rest are per-device feature
48 * bits. */ 48 * bits. */
49#define VIRTIO_TRANSPORT_F_START 28 49#define VIRTIO_TRANSPORT_F_START 28
50#define VIRTIO_TRANSPORT_F_END 32 50#define VIRTIO_TRANSPORT_F_END 33
51 51
52/* Do we get callbacks when the ring is completely used, even if we've 52/* Do we get callbacks when the ring is completely used, even if we've
53 * suppressed them? */ 53 * suppressed them? */