mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 11:41:38 -04:00
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 <[email protected]> Signed-off-by: Rusty Russell <[email protected]> Signed-off-by: Cornelia Huck <[email protected]> Signed-off-by: Michael S. Tsirkin <[email protected]> Reviewed-by: Cornelia Huck <[email protected]>
This commit is contained in:
parent
d4024af56f
commit
e16e12be34
16 changed files with 42 additions and 74 deletions
|
|
@ -137,14 +137,14 @@ static void lg_finalize_features(struct virtio_device *vdev)
|
|||
vring_transport_features(vdev);
|
||||
|
||||
/*
|
||||
* The vdev->feature array is a Linux bitmask: this isn't the same as a
|
||||
* the simple array of bits used by lguest devices for features. So we
|
||||
* do this slow, manual conversion which is completely general.
|
||||
* Since lguest is currently x86-only, we're little-endian. That
|
||||
* means we could just memcpy. But it's not time critical, and in
|
||||
* case someone copies this code, we do it the slow, obvious way.
|
||||
*/
|
||||
memset(out_features, 0, desc->feature_len);
|
||||
bits = min_t(unsigned, desc->feature_len, sizeof(vdev->features)) * 8;
|
||||
for (i = 0; i < bits; i++) {
|
||||
if (test_bit(i, vdev->features))
|
||||
if (__virtio_test_bit(vdev, i))
|
||||
out_features[i / 8] |= (1 << (i % 8));
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue