diff options
author | Michael S. Tsirkin <mst@redhat.com> | 2014-12-01 08:52:40 -0500 |
---|---|---|
committer | Michael S. Tsirkin <mst@redhat.com> | 2014-12-09 05:06:32 -0500 |
commit | 747ae34a6ef681fbd993be214d8c0a30bd4a2fda (patch) | |
tree | 3905b0413ec10b96e9a62af9d19acc682c8390dc | |
parent | df1b57fe59bc5b1486fe142e6ee76c493c52c543 (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.c | 6 | ||||
-rw-r--r-- | drivers/virtio/virtio_ring.c | 2 | ||||
-rw-r--r-- | include/uapi/linux/virtio_config.h | 4 |
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? */ |