vop: Fix handling of >32 feature bits
authorVincent Whitchurch <vincent.whitchurch@axis.com>
Wed, 16 Jan 2019 16:32:51 +0000 (17:32 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 22 Jan 2019 10:43:17 +0000 (11:43 +0100)
This is needed, for example, for VIRTIO_F_IOMMU_PLATFORM.

Signed-off-by: Vincent Whitchurch <vincent.whitchurch@axis.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/misc/mic/vop/vop_main.c

index 1a9b410f4190fcbec15b9f0143d184b82e08b0c5..47a096ddc6fe99f2085b542a650d194453fe81a3 100644 (file)
@@ -117,7 +117,7 @@ _vop_total_desc_size(struct mic_device_desc __iomem *desc)
 static u64 vop_get_features(struct virtio_device *vdev)
 {
        unsigned int i, bits;
-       u32 features = 0;
+       u64 features = 0;
        struct mic_device_desc __iomem *desc = to_vopvdev(vdev)->desc;
        u8 __iomem *in_features = _vop_vq_features(desc);
        int feature_len = ioread8(&desc->feature_len);
@@ -125,7 +125,7 @@ static u64 vop_get_features(struct virtio_device *vdev)
        bits = min_t(unsigned, feature_len, sizeof(vdev->features)) * 8;
        for (i = 0; i < bits; i++)
                if (ioread8(&in_features[i / 8]) & (BIT(i % 8)))
-                       features |= BIT(i);
+                       features |= BIT_ULL(i);
 
        return features;
 }