diff options
author | Michael S. Tsirkin <mst@redhat.com> | 2014-10-07 10:39:42 -0400 |
---|---|---|
committer | Michael S. Tsirkin <mst@redhat.com> | 2014-12-09 05:05:23 -0500 |
commit | e16e12be34648777606a2c03a3526409b38f0e63 (patch) | |
tree | 36298911ba8eed0a4805c2c30a56d92520d23432 /drivers/lguest | |
parent | d4024af56f7c6cdb7e721994204fb07b2cda8be9 (diff) |
virtio: use u32, not bitmap for features
It seemed like a good idea to use bitmap for features
in struct virtio_device, but it's actually a pain,
and seems to become even more painful when we get more
than 32 feature bits. Just change it to a u32 for now.
Based on patch by Rusty.
Suggested-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
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: Cornelia Huck <cornelia.huck@de.ibm.com>
Diffstat (limited to 'drivers/lguest')
-rw-r--r-- | drivers/lguest/lguest_device.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/lguest/lguest_device.c b/drivers/lguest/lguest_device.c index d0a1d8a45c81..97aeb7dce5fc 100644 --- a/drivers/lguest/lguest_device.c +++ b/drivers/lguest/lguest_device.c | |||
@@ -137,14 +137,14 @@ static void lg_finalize_features(struct virtio_device *vdev) | |||
137 | vring_transport_features(vdev); | 137 | vring_transport_features(vdev); |
138 | 138 | ||
139 | /* | 139 | /* |
140 | * The vdev->feature array is a Linux bitmask: this isn't the same as a | 140 | * Since lguest is currently x86-only, we're little-endian. That |
141 | * the simple array of bits used by lguest devices for features. So we | 141 | * means we could just memcpy. But it's not time critical, and in |
142 | * do this slow, manual conversion which is completely general. | 142 | * case someone copies this code, we do it the slow, obvious way. |
143 | */ | 143 | */ |
144 | memset(out_features, 0, desc->feature_len); | 144 | memset(out_features, 0, desc->feature_len); |
145 | bits = min_t(unsigned, desc->feature_len, sizeof(vdev->features)) * 8; | 145 | bits = min_t(unsigned, desc->feature_len, sizeof(vdev->features)) * 8; |
146 | for (i = 0; i < bits; i++) { | 146 | for (i = 0; i < bits; i++) { |
147 | if (test_bit(i, vdev->features)) | 147 | if (__virtio_test_bit(vdev, i)) |
148 | out_features[i / 8] |= (1 << (i % 8)); | 148 | out_features[i / 8] |= (1 << (i % 8)); |
149 | } | 149 | } |
150 | 150 | ||