diff options
author | Michael S. Tsirkin <mst@redhat.com> | 2014-10-07 10:39:43 -0400 |
---|---|---|
committer | Michael S. Tsirkin <mst@redhat.com> | 2014-12-09 05:05:24 -0500 |
commit | d025477368792b272802146a86e41f81a54d8a19 (patch) | |
tree | 7e296d48d57796d6b797f4da6dac74d1644092fe /drivers/virtio | |
parent | 0ffaeadfc451a11b5da35578b2f9b977f9f46489 (diff) |
virtio: add support for 64 bit features.
Change u32 to u64, and use BIT_ULL and 1ULL everywhere.
Note: transports are unchanged, and only set low 32 bit.
This guarantees that no transport sets e.g. VERSION_1
by mistake without proper support.
Based on patch by Rusty.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Diffstat (limited to 'drivers/virtio')
-rw-r--r-- | drivers/virtio/virtio.c | 8 | ||||
-rw-r--r-- | drivers/virtio/virtio_mmio.c | 2 | ||||
-rw-r--r-- | drivers/virtio/virtio_pci.c | 2 |
3 files changed, 6 insertions, 6 deletions
diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c index 2b9aafb4d679..746d350c8062 100644 --- a/drivers/virtio/virtio.c +++ b/drivers/virtio/virtio.c | |||
@@ -159,7 +159,7 @@ static int virtio_dev_probe(struct device *_d) | |||
159 | int err, i; | 159 | int err, i; |
160 | struct virtio_device *dev = dev_to_virtio(_d); | 160 | struct virtio_device *dev = dev_to_virtio(_d); |
161 | struct virtio_driver *drv = drv_to_virtio(dev->dev.driver); | 161 | struct virtio_driver *drv = drv_to_virtio(dev->dev.driver); |
162 | u32 device_features; | 162 | u64 device_features; |
163 | 163 | ||
164 | /* We have a driver! */ | 164 | /* We have a driver! */ |
165 | add_status(dev, VIRTIO_CONFIG_S_DRIVER); | 165 | add_status(dev, VIRTIO_CONFIG_S_DRIVER); |
@@ -171,14 +171,14 @@ static int virtio_dev_probe(struct device *_d) | |||
171 | dev->features = 0; | 171 | dev->features = 0; |
172 | for (i = 0; i < drv->feature_table_size; i++) { | 172 | for (i = 0; i < drv->feature_table_size; i++) { |
173 | unsigned int f = drv->feature_table[i]; | 173 | unsigned int f = drv->feature_table[i]; |
174 | BUG_ON(f >= 32); | 174 | BUG_ON(f >= 64); |
175 | if (device_features & (1 << f)) | 175 | if (device_features & (1ULL << f)) |
176 | __virtio_set_bit(dev, f); | 176 | __virtio_set_bit(dev, f); |
177 | } | 177 | } |
178 | 178 | ||
179 | /* Transport features always preserved to pass to finalize_features. */ | 179 | /* Transport features always preserved to pass to finalize_features. */ |
180 | for (i = VIRTIO_TRANSPORT_F_START; i < VIRTIO_TRANSPORT_F_END; i++) | 180 | for (i = VIRTIO_TRANSPORT_F_START; i < VIRTIO_TRANSPORT_F_END; i++) |
181 | if (device_features & (1 << i)) | 181 | if (device_features & (1ULL << i)) |
182 | __virtio_set_bit(dev, i); | 182 | __virtio_set_bit(dev, i); |
183 | 183 | ||
184 | dev->config->finalize_features(dev); | 184 | dev->config->finalize_features(dev); |
diff --git a/drivers/virtio/virtio_mmio.c b/drivers/virtio/virtio_mmio.c index eb5b0e2b434a..c63d0efa947b 100644 --- a/drivers/virtio/virtio_mmio.c +++ b/drivers/virtio/virtio_mmio.c | |||
@@ -142,7 +142,7 @@ struct virtio_mmio_vq_info { | |||
142 | 142 | ||
143 | /* Configuration interface */ | 143 | /* Configuration interface */ |
144 | 144 | ||
145 | static u32 vm_get_features(struct virtio_device *vdev) | 145 | static u64 vm_get_features(struct virtio_device *vdev) |
146 | { | 146 | { |
147 | struct virtio_mmio_device *vm_dev = to_virtio_mmio_device(vdev); | 147 | struct virtio_mmio_device *vm_dev = to_virtio_mmio_device(vdev); |
148 | 148 | ||
diff --git a/drivers/virtio/virtio_pci.c b/drivers/virtio/virtio_pci.c index 4e112c158488..7e0efa7fc384 100644 --- a/drivers/virtio/virtio_pci.c +++ b/drivers/virtio/virtio_pci.c | |||
@@ -102,7 +102,7 @@ static struct virtio_pci_device *to_vp_device(struct virtio_device *vdev) | |||
102 | } | 102 | } |
103 | 103 | ||
104 | /* virtio config->get_features() implementation */ | 104 | /* virtio config->get_features() implementation */ |
105 | static u32 vp_get_features(struct virtio_device *vdev) | 105 | static u64 vp_get_features(struct virtio_device *vdev) |
106 | { | 106 | { |
107 | struct virtio_pci_device *vp_dev = to_vp_device(vdev); | 107 | struct virtio_pci_device *vp_dev = to_vp_device(vdev); |
108 | 108 | ||