On 11/01/2016 17:13, Greg Kurz wrote:
> If target is bi-endian (ppc64, arm), the virtio_legacy_is_cross_endian()
> indeed returns the runtime state of the virtio device. However, it returns
> false unconditionally in the general case. This sounds a bit strange
> given the name of the function.
>
> This helper is only useful for vhost actually, where indeed non bi-endian
> targets don't have to deal with cross-endian issues.
>
> This patch moves the helper to vhost.c and gives it a more appropriate name.
>
> Signed-off-by: Greg Kurz <gk...@linux.vnet.ibm.com>
> Reviewed-by: Cornelia Huck <cornelia.h...@de.ibm.com>
> ---
> hw/virtio/vhost.c | 17 +++++++++++++++--
> include/hw/virtio/virtio-access.h | 13 -------------
> 2 files changed, 15 insertions(+), 15 deletions(-)
>
> diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
> index de29968a7945..2e1e792d599e 100644
> --- a/hw/virtio/vhost.c
> +++ b/hw/virtio/vhost.c
> @@ -748,6 +748,19 @@ static void vhost_log_stop(MemoryListener *listener,
> /* FIXME: implement */
> }
>
> +static inline bool vhost_needs_vring_endian(VirtIODevice *vdev)
> +{
> +#ifdef TARGET_IS_BIENDIAN
> +#ifdef HOST_WORDS_BIGENDIAN
> + return !virtio_is_big_endian(vdev);
> +#else
> + return virtio_is_big_endian(vdev);
> +#endif
> +#else
> + return false;
> +#endif
> +}
> +
> static int vhost_virtqueue_set_vring_endian_legacy(struct vhost_dev *dev,
> bool is_big_endian,
> int vhost_vq_index)
> @@ -799,7 +812,7 @@ static int vhost_virtqueue_start(struct vhost_dev *dev,
> }
>
> if (!virtio_vdev_has_feature(vdev, VIRTIO_F_VERSION_1) &&
> - virtio_legacy_is_cross_endian(vdev)) {
> + vhost_needs_vring_endian(vdev)) {
> r = vhost_virtqueue_set_vring_endian_legacy(dev,
>
> virtio_is_big_endian(vdev),
> vhost_vq_index);
> @@ -896,7 +909,7 @@ static void vhost_virtqueue_stop(struct vhost_dev *dev,
> * native as legacy devices expect so by default.
> */
> if (!virtio_vdev_has_feature(vdev, VIRTIO_F_VERSION_1) &&
> - virtio_legacy_is_cross_endian(vdev)) {
> + vhost_needs_vring_endian(vdev)) {
> r = vhost_virtqueue_set_vring_endian_legacy(dev,
>
> !virtio_is_big_endian(vdev),
> vhost_vq_index);
> diff --git a/include/hw/virtio/virtio-access.h
> b/include/hw/virtio/virtio-access.h
> index a01fff2e51d7..f1f12afe9089 100644
> --- a/include/hw/virtio/virtio-access.h
> +++ b/include/hw/virtio/virtio-access.h
> @@ -32,19 +32,6 @@ static inline bool
> virtio_access_is_big_endian(VirtIODevice *vdev)
> #endif
> }
>
> -static inline bool virtio_legacy_is_cross_endian(VirtIODevice *vdev)
> -{
> -#ifdef TARGET_IS_BIENDIAN
> -#ifdef HOST_WORDS_BIGENDIAN
> - return !virtio_is_big_endian(vdev);
> -#else
> - return virtio_is_big_endian(vdev);
> -#endif
> -#else
> - return false;
> -#endif
> -}
> -
> static inline uint16_t virtio_lduw_phys(VirtIODevice *vdev, hwaddr pa)
> {
> if (virtio_access_is_big_endian(vdev)) {
>
>
Reviewed-by: Laurent Vivier <lviv...@redhat.com>