From: "Cédric Le Goater" <clg@kaod.org>
To: Greg Kurz <gkurz@linux.vnet.ibm.com>,
Peter Maydell <peter.maydell@linaro.org>,
"Michael S. Tsirkin" <mst@redhat.com>,
Alexander Graf <agraf@suse.de>,
David Gibson <david@gibson.dropbear.id.au>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
qemu-arm@nongnu.org, qemu-ppc@nongnu.org, qemu-devel@nongnu.org
Subject: Re: [Qemu-arm] [Qemu-devel] [PATCH] virtio: move bi-endian target support to a single location
Date: Tue, 31 May 2016 11:19:45 +0200 [thread overview]
Message-ID: <574D5731.800@kaod.org> (raw)
In-Reply-To: <146468219419.25446.8053365248306938869.stgit@bahia.huguette.org>
On 05/31/2016 10:09 AM, Greg Kurz wrote:
> Paolo's recent cpu.h cleanups broke legacy virtio for ppc64 LE guests (and
> arm BE guests as well, even if I have not verified that). Especially, commit
> "33c11879fd42 qemu-common: push cpu.h inclusion out of qemu-common.h" has
> the side-effect of silently hiding the TARGET_IS_BIENDIAN macro from the
> virtio memory accessors, and thus fully disabling support of endian changing
> targets.
>
> To be sure this cannot happen again, let's gather all the bi-endian bits
> where they belong in include/hw/virtio/virtio-access.h.
>
> The changes in hw/virtio/vhost.c are safe because vhost_needs_vring_endian()
> is not called on a hot path and non bi-endian targets will return false
> anyway.
>
> While here, also rename TARGET_IS_BIENDIAN to be more precise: it is only for
> legacy virtio and bi-endian guests.
>
> Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
biendian-ness being only used by virtio devices, I think this is a good place
where to put it.
Acked-by: Cédric Le Goater <clg@kaod.org>
> ---
> hw/virtio/vhost.c | 4 ----
> include/hw/virtio/virtio-access.h | 6 +++++-
> target-arm/cpu.h | 2 --
> target-ppc/cpu.h | 2 --
> 4 files changed, 5 insertions(+), 9 deletions(-)
>
> diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
> index 440071815408..81cc5b0ae35c 100644
> --- a/hw/virtio/vhost.c
> +++ b/hw/virtio/vhost.c
> @@ -767,15 +767,11 @@ static inline bool vhost_needs_vring_endian(VirtIODevice *vdev)
> if (virtio_vdev_has_feature(vdev, VIRTIO_F_VERSION_1)) {
> return false;
> }
> -#ifdef TARGET_IS_BIENDIAN
> #ifdef HOST_WORDS_BIGENDIAN
> return vdev->device_endian == VIRTIO_DEVICE_ENDIAN_LITTLE;
> #else
> return vdev->device_endian == VIRTIO_DEVICE_ENDIAN_BIG;
> #endif
> -#else
> - return false;
> -#endif
> }
>
> static int vhost_virtqueue_set_vring_endian_legacy(struct vhost_dev *dev,
> diff --git a/include/hw/virtio/virtio-access.h b/include/hw/virtio/virtio-access.h
> index 8dc84f520316..4b2803814642 100644
> --- a/include/hw/virtio/virtio-access.h
> +++ b/include/hw/virtio/virtio-access.h
> @@ -17,9 +17,13 @@
> #include "hw/virtio/virtio.h"
> #include "exec/address-spaces.h"
>
> +#if defined(TARGET_PPC64) || defined(TARGET_ARM)
> +#define LEGACY_VIRTIO_IS_BIENDIAN 1
> +#endif
> +
> static inline bool virtio_access_is_big_endian(VirtIODevice *vdev)
> {
> -#if defined(TARGET_IS_BIENDIAN)
> +#if defined(LEGACY_VIRTIO_IS_BIENDIAN)
> return virtio_is_big_endian(vdev);
> #elif defined(TARGET_WORDS_BIGENDIAN)
> if (virtio_vdev_has_feature(vdev, VIRTIO_F_VERSION_1)) {
> diff --git a/target-arm/cpu.h b/target-arm/cpu.h
> index c741b53ad45f..60971e16f7a4 100644
> --- a/target-arm/cpu.h
> +++ b/target-arm/cpu.h
> @@ -29,8 +29,6 @@
> # define TARGET_LONG_BITS 32
> #endif
>
> -#define TARGET_IS_BIENDIAN 1
> -
> #define CPUArchState struct CPUARMState
>
> #include "qemu-common.h"
> diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h
> index cd33539d1ce9..556d66c39d11 100644
> --- a/target-ppc/cpu.h
> +++ b/target-ppc/cpu.h
> @@ -28,8 +28,6 @@
> #define TARGET_LONG_BITS 64
> #define TARGET_PAGE_BITS 12
>
> -#define TARGET_IS_BIENDIAN 1
> -
> /* Note that the official physical address space bits is 62-M where M
> is implementation dependent. I've not looked up M for the set of
> cpus we emulate at the system level. */
>
>
WARNING: multiple messages have this Message-ID (diff)
From: "Cédric Le Goater" <clg@kaod.org>
To: Greg Kurz <gkurz@linux.vnet.ibm.com>,
Peter Maydell <peter.maydell@linaro.org>,
"Michael S. Tsirkin" <mst@redhat.com>,
Alexander Graf <agraf@suse.de>,
David Gibson <david@gibson.dropbear.id.au>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
qemu-arm@nongnu.org, qemu-ppc@nongnu.org, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] virtio: move bi-endian target support to a single location
Date: Tue, 31 May 2016 11:19:45 +0200 [thread overview]
Message-ID: <574D5731.800@kaod.org> (raw)
In-Reply-To: <146468219419.25446.8053365248306938869.stgit@bahia.huguette.org>
On 05/31/2016 10:09 AM, Greg Kurz wrote:
> Paolo's recent cpu.h cleanups broke legacy virtio for ppc64 LE guests (and
> arm BE guests as well, even if I have not verified that). Especially, commit
> "33c11879fd42 qemu-common: push cpu.h inclusion out of qemu-common.h" has
> the side-effect of silently hiding the TARGET_IS_BIENDIAN macro from the
> virtio memory accessors, and thus fully disabling support of endian changing
> targets.
>
> To be sure this cannot happen again, let's gather all the bi-endian bits
> where they belong in include/hw/virtio/virtio-access.h.
>
> The changes in hw/virtio/vhost.c are safe because vhost_needs_vring_endian()
> is not called on a hot path and non bi-endian targets will return false
> anyway.
>
> While here, also rename TARGET_IS_BIENDIAN to be more precise: it is only for
> legacy virtio and bi-endian guests.
>
> Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
biendian-ness being only used by virtio devices, I think this is a good place
where to put it.
Acked-by: Cédric Le Goater <clg@kaod.org>
> ---
> hw/virtio/vhost.c | 4 ----
> include/hw/virtio/virtio-access.h | 6 +++++-
> target-arm/cpu.h | 2 --
> target-ppc/cpu.h | 2 --
> 4 files changed, 5 insertions(+), 9 deletions(-)
>
> diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
> index 440071815408..81cc5b0ae35c 100644
> --- a/hw/virtio/vhost.c
> +++ b/hw/virtio/vhost.c
> @@ -767,15 +767,11 @@ static inline bool vhost_needs_vring_endian(VirtIODevice *vdev)
> if (virtio_vdev_has_feature(vdev, VIRTIO_F_VERSION_1)) {
> return false;
> }
> -#ifdef TARGET_IS_BIENDIAN
> #ifdef HOST_WORDS_BIGENDIAN
> return vdev->device_endian == VIRTIO_DEVICE_ENDIAN_LITTLE;
> #else
> return vdev->device_endian == VIRTIO_DEVICE_ENDIAN_BIG;
> #endif
> -#else
> - return false;
> -#endif
> }
>
> static int vhost_virtqueue_set_vring_endian_legacy(struct vhost_dev *dev,
> diff --git a/include/hw/virtio/virtio-access.h b/include/hw/virtio/virtio-access.h
> index 8dc84f520316..4b2803814642 100644
> --- a/include/hw/virtio/virtio-access.h
> +++ b/include/hw/virtio/virtio-access.h
> @@ -17,9 +17,13 @@
> #include "hw/virtio/virtio.h"
> #include "exec/address-spaces.h"
>
> +#if defined(TARGET_PPC64) || defined(TARGET_ARM)
> +#define LEGACY_VIRTIO_IS_BIENDIAN 1
> +#endif
> +
> static inline bool virtio_access_is_big_endian(VirtIODevice *vdev)
> {
> -#if defined(TARGET_IS_BIENDIAN)
> +#if defined(LEGACY_VIRTIO_IS_BIENDIAN)
> return virtio_is_big_endian(vdev);
> #elif defined(TARGET_WORDS_BIGENDIAN)
> if (virtio_vdev_has_feature(vdev, VIRTIO_F_VERSION_1)) {
> diff --git a/target-arm/cpu.h b/target-arm/cpu.h
> index c741b53ad45f..60971e16f7a4 100644
> --- a/target-arm/cpu.h
> +++ b/target-arm/cpu.h
> @@ -29,8 +29,6 @@
> # define TARGET_LONG_BITS 32
> #endif
>
> -#define TARGET_IS_BIENDIAN 1
> -
> #define CPUArchState struct CPUARMState
>
> #include "qemu-common.h"
> diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h
> index cd33539d1ce9..556d66c39d11 100644
> --- a/target-ppc/cpu.h
> +++ b/target-ppc/cpu.h
> @@ -28,8 +28,6 @@
> #define TARGET_LONG_BITS 64
> #define TARGET_PAGE_BITS 12
>
> -#define TARGET_IS_BIENDIAN 1
> -
> /* Note that the official physical address space bits is 62-M where M
> is implementation dependent. I've not looked up M for the set of
> cpus we emulate at the system level. */
>
>
next prev parent reply other threads:[~2016-05-31 9:20 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-31 8:09 [Qemu-arm] [PATCH] virtio: move bi-endian target support to a single location Greg Kurz
2016-05-31 8:09 ` [Qemu-devel] " Greg Kurz
2016-05-31 9:19 ` Cédric Le Goater [this message]
2016-05-31 9:19 ` Cédric Le Goater
2016-05-31 11:54 ` [Qemu-arm] " Paolo Bonzini
2016-05-31 11:54 ` [Qemu-devel] " Paolo Bonzini
2016-05-31 13:10 ` [Qemu-arm] " Greg Kurz
2016-05-31 13:10 ` [Qemu-devel] " Greg Kurz
2016-05-31 13:14 ` [Qemu-arm] " Peter Maydell
2016-05-31 13:14 ` [Qemu-devel] " Peter Maydell
2016-05-31 14:10 ` [Qemu-arm] " Greg Kurz
2016-05-31 14:10 ` [Qemu-devel] " Greg Kurz
2016-05-31 13:15 ` [Qemu-arm] " Paolo Bonzini
2016-05-31 13:15 ` [Qemu-devel] " Paolo Bonzini
2016-05-31 14:10 ` [Qemu-arm] " Greg Kurz
2016-05-31 14:10 ` [Qemu-devel] " Greg Kurz
2016-06-01 2:33 ` [Qemu-arm] " David Gibson
2016-06-01 2:33 ` [Qemu-devel] " David Gibson
2016-06-01 8:30 ` [Qemu-arm] " Paolo Bonzini
2016-06-01 8:30 ` [Qemu-devel] " Paolo Bonzini
2016-06-02 16:04 ` [Qemu-arm] " Greg Kurz
2016-06-02 16:04 ` [Qemu-devel] " Greg Kurz
2016-06-03 1:16 ` David Gibson
2016-06-03 1:16 ` David Gibson
2016-06-03 6:05 ` [Qemu-arm] " Greg Kurz
2016-06-03 6:05 ` [Qemu-devel] " Greg Kurz
2016-06-06 13:41 ` [Qemu-arm] " Paolo Bonzini
2016-06-06 13:41 ` [Qemu-devel] " Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=574D5731.800@kaod.org \
--to=clg@kaod.org \
--cc=agraf@suse.de \
--cc=david@gibson.dropbear.id.au \
--cc=gkurz@linux.vnet.ibm.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.