Commit 55564a02 authored by Michael S. Tsirkin's avatar Michael S. Tsirkin

tools/virtio: fix byteswap logic

commit cf561f0d ("virtio: introduce
virtio_is_little_endian() helper") changed byteswap logic to
skip feature bit checks for LE platforms, but didn't
update tools/virtio, so vring_bench started failing.

Update the copy under tools/virtio/ (TODO: find a way to avoid this code
duplication).

Cc: Greg Kurz <gkurz@linux.vnet.ibm.com>
Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
parent 40c172e5
...@@ -40,33 +40,39 @@ static inline void __virtio_clear_bit(struct virtio_device *vdev, ...@@ -40,33 +40,39 @@ static inline void __virtio_clear_bit(struct virtio_device *vdev,
#define virtio_has_feature(dev, feature) \ #define virtio_has_feature(dev, feature) \
(__virtio_test_bit((dev), feature)) (__virtio_test_bit((dev), feature))
static inline bool virtio_is_little_endian(struct virtio_device *vdev)
{
return virtio_has_feature(vdev, VIRTIO_F_VERSION_1) ||
virtio_legacy_is_little_endian();
}
/* Memory accessors */
static inline u16 virtio16_to_cpu(struct virtio_device *vdev, __virtio16 val) static inline u16 virtio16_to_cpu(struct virtio_device *vdev, __virtio16 val)
{ {
return __virtio16_to_cpu(virtio_has_feature(vdev, VIRTIO_F_VERSION_1), val); return __virtio16_to_cpu(virtio_is_little_endian(vdev), val);
} }
static inline __virtio16 cpu_to_virtio16(struct virtio_device *vdev, u16 val) static inline __virtio16 cpu_to_virtio16(struct virtio_device *vdev, u16 val)
{ {
return __cpu_to_virtio16(virtio_has_feature(vdev, VIRTIO_F_VERSION_1), val); return __cpu_to_virtio16(virtio_is_little_endian(vdev), val);
} }
static inline u32 virtio32_to_cpu(struct virtio_device *vdev, __virtio32 val) static inline u32 virtio32_to_cpu(struct virtio_device *vdev, __virtio32 val)
{ {
return __virtio32_to_cpu(virtio_has_feature(vdev, VIRTIO_F_VERSION_1), val); return __virtio32_to_cpu(virtio_is_little_endian(vdev), val);
} }
static inline __virtio32 cpu_to_virtio32(struct virtio_device *vdev, u32 val) static inline __virtio32 cpu_to_virtio32(struct virtio_device *vdev, u32 val)
{ {
return __cpu_to_virtio32(virtio_has_feature(vdev, VIRTIO_F_VERSION_1), val); return __cpu_to_virtio32(virtio_is_little_endian(vdev), val);
} }
static inline u64 virtio64_to_cpu(struct virtio_device *vdev, __virtio64 val) static inline u64 virtio64_to_cpu(struct virtio_device *vdev, __virtio64 val)
{ {
return __virtio64_to_cpu(virtio_has_feature(vdev, VIRTIO_F_VERSION_1), val); return __virtio64_to_cpu(virtio_is_little_endian(vdev), val);
} }
static inline __virtio64 cpu_to_virtio64(struct virtio_device *vdev, u64 val) static inline __virtio64 cpu_to_virtio64(struct virtio_device *vdev, u64 val)
{ {
return __cpu_to_virtio64(virtio_has_feature(vdev, VIRTIO_F_VERSION_1), val); return __cpu_to_virtio64(virtio_is_little_endian(vdev), val);
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment