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/s390/kvm/virtio_ccw.c | |
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/s390/kvm/virtio_ccw.c')
-rw-r--r-- | drivers/s390/kvm/virtio_ccw.c | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/drivers/s390/kvm/virtio_ccw.c b/drivers/s390/kvm/virtio_ccw.c index bda52f18e967..1dbee95838fe 100644 --- a/drivers/s390/kvm/virtio_ccw.c +++ b/drivers/s390/kvm/virtio_ccw.c | |||
@@ -701,7 +701,6 @@ static void virtio_ccw_finalize_features(struct virtio_device *vdev) | |||
701 | { | 701 | { |
702 | struct virtio_ccw_device *vcdev = to_vc_device(vdev); | 702 | struct virtio_ccw_device *vcdev = to_vc_device(vdev); |
703 | struct virtio_feature_desc *features; | 703 | struct virtio_feature_desc *features; |
704 | int i; | ||
705 | struct ccw1 *ccw; | 704 | struct ccw1 *ccw; |
706 | 705 | ||
707 | ccw = kzalloc(sizeof(*ccw), GFP_DMA | GFP_KERNEL); | 706 | ccw = kzalloc(sizeof(*ccw), GFP_DMA | GFP_KERNEL); |
@@ -715,19 +714,15 @@ static void virtio_ccw_finalize_features(struct virtio_device *vdev) | |||
715 | /* Give virtio_ring a chance to accept features. */ | 714 | /* Give virtio_ring a chance to accept features. */ |
716 | vring_transport_features(vdev); | 715 | vring_transport_features(vdev); |
717 | 716 | ||
718 | for (i = 0; i < sizeof(*vdev->features) / sizeof(features->features); | 717 | features->index = 0; |
719 | i++) { | 718 | features->features = cpu_to_le32(vdev->features); |
720 | int highbits = i % 2 ? 32 : 0; | 719 | /* Write the feature bits to the host. */ |
721 | features->index = i; | 720 | ccw->cmd_code = CCW_CMD_WRITE_FEAT; |
722 | features->features = cpu_to_le32(vdev->features[i / 2] | 721 | ccw->flags = 0; |
723 | >> highbits); | 722 | ccw->count = sizeof(*features); |
724 | /* Write the feature bits to the host. */ | 723 | ccw->cda = (__u32)(unsigned long)features; |
725 | ccw->cmd_code = CCW_CMD_WRITE_FEAT; | 724 | ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_WRITE_FEAT); |
726 | ccw->flags = 0; | 725 | |
727 | ccw->count = sizeof(*features); | ||
728 | ccw->cda = (__u32)(unsigned long)features; | ||
729 | ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_WRITE_FEAT); | ||
730 | } | ||
731 | out_free: | 726 | out_free: |
732 | kfree(features); | 727 | kfree(features); |
733 | kfree(ccw); | 728 | kfree(ccw); |