From: Pierrick Bouvier <[email protected]> This simplifies code compared to having virtio_vdev_has_feature(vdev, VIRTIO_F_VERSION_1) or !virtio_vdev_has_feature(vdev, VIRTIO_F_VERSION_1).
Acked-by: Stefan Hajnoczi <[email protected]> Signed-off-by: Pierrick Bouvier <[email protected]> Signed-off-by: Philippe Mathieu-Daudé <[email protected]> --- include/hw/virtio/virtio-access.h | 2 +- include/hw/virtio/virtio.h | 7 ++++++- hw/virtio/vhost.c | 12 +++++------- hw/virtio/virtio-pci.c | 6 +++--- hw/virtio/virtio.c | 8 ++++---- 5 files changed, 19 insertions(+), 16 deletions(-) diff --git a/include/hw/virtio/virtio-access.h b/include/hw/virtio/virtio-access.h index b58fb6ed7ea..b8aa7a520f5 100644 --- a/include/hw/virtio/virtio-access.h +++ b/include/hw/virtio/virtio-access.h @@ -30,7 +30,7 @@ static inline bool virtio_access_is_big_endian(VirtIODevice *vdev) #if defined(LEGACY_VIRTIO_IS_BIENDIAN) return virtio_vdev_is_big_endian(vdev); #elif TARGET_BIG_ENDIAN - if (virtio_vdev_has_feature(vdev, VIRTIO_F_VERSION_1)) { + if (!virtio_vdev_is_legacy(vdev)) { /* Devices conforming to VIRTIO 1.0 or later are always LE. */ return false; } diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h index 9dd93cf965a..42d20899390 100644 --- a/include/hw/virtio/virtio.h +++ b/include/hw/virtio/virtio.h @@ -468,9 +468,14 @@ static inline bool virtio_host_has_feature(VirtIODevice *vdev, return virtio_has_feature(vdev->host_features, fbit); } +static inline bool virtio_vdev_is_legacy(const VirtIODevice *vdev) +{ + return !virtio_vdev_has_feature(vdev, VIRTIO_F_VERSION_1); +} + static inline bool virtio_vdev_is_big_endian(const VirtIODevice *vdev) { - if (!virtio_vdev_has_feature(vdev, VIRTIO_F_VERSION_1)) { + if (virtio_vdev_is_legacy(vdev)) { assert(vdev->device_endian != VIRTIO_DEVICE_ENDIAN_UNKNOWN); return vdev->device_endian == VIRTIO_DEVICE_ENDIAN_BIG; } diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index b4cdb7762f9..b9dc4ed13ba 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -1168,14 +1168,12 @@ static void vhost_log_stop(MemoryListener *listener, */ static inline bool vhost_needs_vring_endian(VirtIODevice *vdev) { - if (virtio_vdev_has_feature(vdev, VIRTIO_F_VERSION_1)) { - return false; + if (virtio_vdev_is_legacy(vdev)) { + return vdev->device_endian == (HOST_BIG_ENDIAN + ? VIRTIO_DEVICE_ENDIAN_LITTLE + : VIRTIO_DEVICE_ENDIAN_BIG); } -#if HOST_BIG_ENDIAN - return vdev->device_endian == VIRTIO_DEVICE_ENDIAN_LITTLE; -#else - return vdev->device_endian == VIRTIO_DEVICE_ENDIAN_BIG; -#endif + return false; } static int vhost_virtqueue_set_vring_endian_legacy(struct vhost_dev *dev, diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c index c7b5a79b936..31b566c6ae3 100644 --- a/hw/virtio/virtio-pci.c +++ b/hw/virtio/virtio-pci.c @@ -1449,11 +1449,11 @@ static bool virtio_pci_queue_enabled(DeviceState *d, int n) VirtIOPCIProxy *proxy = VIRTIO_PCI(d); VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); - if (virtio_vdev_has_feature(vdev, VIRTIO_F_VERSION_1)) { - return proxy->vqs[n].enabled; + if (virtio_vdev_is_legacy(vdev)) { + return virtio_queue_enabled_legacy(vdev, n); } - return virtio_queue_enabled_legacy(vdev, n); + return proxy->vqs[n].enabled; } static int virtio_pci_add_mem_cap(VirtIOPCIProxy *proxy, diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c index e9d55329525..c0c4599b586 100644 --- a/hw/virtio/virtio.c +++ b/hw/virtio/virtio.c @@ -2753,7 +2753,7 @@ static bool virtio_device_endian_needed(void *opaque) VirtIODevice *vdev = opaque; assert(vdev->device_endian != VIRTIO_DEVICE_ENDIAN_UNKNOWN); - if (!virtio_vdev_has_feature(vdev, VIRTIO_F_VERSION_1)) { + if (virtio_vdev_is_legacy(vdev)) { return vdev->device_endian != virtio_default_endian(); } /* Devices conforming to VIRTIO 1.0 or later are always LE. */ @@ -3460,10 +3460,10 @@ virtio_load(VirtIODevice *vdev, QEMUFile *f, int version_id) * to calculate used and avail ring addresses based on the desc * address. */ - if (virtio_vdev_has_feature(vdev, VIRTIO_F_VERSION_1)) { - virtio_init_region_cache(vdev, i); - } else { + if (virtio_vdev_is_legacy(vdev)) { virtio_queue_update_rings(vdev, i); + } else { + virtio_init_region_cache(vdev, i); } if (virtio_vdev_has_feature(vdev, VIRTIO_F_RING_PACKED)) { -- 2.52.0
