forked from luck/tmp_suning_uos_patched
virtio: add low-level APIs for feature bits
Add low level APIs to test/set/clear feature bits. For use by transports, to make it easier to write code independent of feature bit array format. Note: APIs is prefixed with __ and has _bit suffix to stress its low level nature. It's for use by transports only: drivers should use virtio_has_feature and never need to set/clear features. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
This commit is contained in:
parent
b2776bf714
commit
d4024af56f
|
@ -77,11 +77,47 @@ void virtio_check_driver_offered_feature(const struct virtio_device *vdev,
|
|||
unsigned int fbit);
|
||||
|
||||
/**
|
||||
* virtio_has_feature - helper to determine if this device has this feature.
|
||||
* __virtio_test_bit - helper to test feature bits. For use by transports.
|
||||
* Devices should normally use virtio_has_feature,
|
||||
* which includes more checks.
|
||||
* @vdev: the device
|
||||
* @fbit: the feature bit
|
||||
*/
|
||||
static inline bool virtio_has_feature(const struct virtio_device *vdev,
|
||||
static inline bool __virtio_test_bit(const struct virtio_device *vdev,
|
||||
unsigned int fbit)
|
||||
{
|
||||
/* Did you forget to fix assumptions on max features? */
|
||||
if (__builtin_constant_p(fbit))
|
||||
BUILD_BUG_ON(fbit >= 32);
|
||||
else
|
||||
BUG_ON(fbit >= 32);
|
||||
|
||||
return test_bit(fbit, vdev->features);
|
||||
}
|
||||
|
||||
/**
|
||||
* __virtio_set_bit - helper to set feature bits. For use by transports.
|
||||
* @vdev: the device
|
||||
* @fbit: the feature bit
|
||||
*/
|
||||
static inline void __virtio_set_bit(struct virtio_device *vdev,
|
||||
unsigned int fbit)
|
||||
{
|
||||
/* Did you forget to fix assumptions on max features? */
|
||||
if (__builtin_constant_p(fbit))
|
||||
BUILD_BUG_ON(fbit >= 32);
|
||||
else
|
||||
BUG_ON(fbit >= 32);
|
||||
|
||||
set_bit(fbit, vdev->features);
|
||||
}
|
||||
|
||||
/**
|
||||
* __virtio_clear_bit - helper to clear feature bits. For use by transports.
|
||||
* @vdev: the device
|
||||
* @fbit: the feature bit
|
||||
*/
|
||||
static inline void __virtio_clear_bit(struct virtio_device *vdev,
|
||||
unsigned int fbit)
|
||||
{
|
||||
/* Did you forget to fix assumptions on max features? */
|
||||
|
@ -90,10 +126,21 @@ static inline bool virtio_has_feature(const struct virtio_device *vdev,
|
|||
else
|
||||
BUG_ON(fbit >= 32);
|
||||
|
||||
clear_bit(fbit, vdev->features);
|
||||
}
|
||||
|
||||
/**
|
||||
* virtio_has_feature - helper to determine if this device has this feature.
|
||||
* @vdev: the device
|
||||
* @fbit: the feature bit
|
||||
*/
|
||||
static inline bool virtio_has_feature(const struct virtio_device *vdev,
|
||||
unsigned int fbit)
|
||||
{
|
||||
if (fbit < VIRTIO_TRANSPORT_F_START)
|
||||
virtio_check_driver_offered_feature(vdev, fbit);
|
||||
|
||||
return test_bit(fbit, vdev->features);
|
||||
return __virtio_test_bit(vdev, fbit);
|
||||
}
|
||||
|
||||
static inline
|
||||
|
|
Loading…
Reference in New Issue
Block a user