public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: Cornelia Huck <cornelia.huck-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
To: Greg Kurz <gkurz-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
Cc: Rusty Russell <rusty-8n+1lVoiYb80n/F98K4Iww@public.gmane.org>,
	"Michael S. Tsirkin"
	<mst-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
	linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	virtualization-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
Subject: Re: [PATCH v4 7/8] vhost: feature to set the vring endianness
Date: Tue, 14 Apr 2015 16:20:23 +0200	[thread overview]
Message-ID: <20150414162023.2f8694fe.cornelia.huck@de.ibm.com> (raw)
In-Reply-To: <20150410101627.31843.21710.stgit-GiB8zCg7hOfDOqzlkpFKJg@public.gmane.org>

On Fri, 10 Apr 2015 12:19:16 +0200
Greg Kurz <gkurz-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org> wrote:

> This patch brings cross-endian support to vhost when used to implement
> legacy virtio devices. Since it is a relatively rare situation, the
> feature availability is controlled by a kernel config option (not set
> by default).
> 
> The vq->is_le boolean field is added to cache the endianness to be
> used for ring accesses. It defaults to native endian, as expected
> by legacy virtio devices. When the ring gets active, we force little
> endian if the device is modern. When the ring is deactivated, we
> revert to the native endian default.
> 
> If cross-endian was compiled in, a vq->user_be boolean field is added
> so that userspace may request a specific endianness. This field is
> used to override the default when activating the ring of a legacy
> device. It has no effect on modern devices.
> 
> Signed-off-by: Greg Kurz <gkurz-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
> ---
>  drivers/vhost/Kconfig      |   10 ++++++
>  drivers/vhost/vhost.c      |   76 +++++++++++++++++++++++++++++++++++++++++++-
>  drivers/vhost/vhost.h      |   12 +++++--
>  include/uapi/linux/vhost.h |    9 +++++
>  4 files changed, 103 insertions(+), 4 deletions(-)

> +#ifdef CONFIG_VHOST_SET_ENDIAN_LEGACY
> +static long vhost_set_vring_big_endian(struct vhost_virtqueue *vq,
> +				       int __user *argp)
> +{
> +	struct vhost_vring_state s;
> +
> +	if (vq->private_data)
> +		return -EBUSY;
> +
> +	if (copy_from_user(&s, argp, sizeof(s)))
> +		return -EFAULT;
> +
> +	if (s.num && s.num != 1)

Checking for s.num > 1 might be more obvious at a glance?

> +		return -EINVAL;
> +
> +	vq->user_be = s.num;
> +
> +	return 0;
> +}
> +

(...)

> +#ifdef CONFIG_VHOST_SET_ENDIAN_LEGACY
> +static void vhost_init_is_le(struct vhost_virtqueue *vq)
> +{
> +	vq->is_le = vhost_has_feature(vq, VIRTIO_F_VERSION_1) || !vq->user_be;

So if the endianness is not explicitly set to BE, it will be forced to
LE (instead of native endian)? Won't that break userspace that does not
yet use the new interface when CONFIG_VHOST_SET_ENDIAN_LEGACY is set?

> +}
> +#else
> +static void vhost_init_is_le(struct vhost_virtqueue *vq)
> +{
> +	if (vhost_has_feature(vq, VIRTIO_F_VERSION_1))
> +		vq->is_le = true;
> +}
> +#endif
> +
>  int vhost_init_used(struct vhost_virtqueue *vq)
>  {
>  	__virtio16 last_used_idx;
>  	int r;
> -	if (!vq->private_data)
> +	if (!vq->private_data) {
> +		vq->is_le = virtio_legacy_is_little_endian();
>  		return 0;
> +	}
> +
> +	vhost_init_is_le(vq);
> 
>  	r = vhost_update_used_flags(vq);
>  	if (r)

  parent reply	other threads:[~2015-04-14 14:20 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-10 10:15 [PATCH v4 0/8] vhost: support for cross endian guests Greg Kurz
2015-04-10 10:15 ` [PATCH v4 1/8] virtio: introduce virtio_is_little_endian() helper Greg Kurz
2015-04-10 10:15 ` [PATCH v4 2/8] tun: add tun_is_little_endian() helper Greg Kurz
2015-04-10 10:15 ` [PATCH v4 3/8] macvtap: introduce macvtap_is_little_endian() helper Greg Kurz
2015-04-10 10:15 ` [PATCH v4 4/8] vringh: introduce vringh_is_little_endian() helper Greg Kurz
2015-04-10 10:16 ` [PATCH v4 5/8] vhost: introduce vhost_is_little_endian() helper Greg Kurz
     [not found] ` <20150410101500.31843.61248.stgit-GiB8zCg7hOfDOqzlkpFKJg@public.gmane.org>
2015-04-10 10:16   ` [PATCH v4 6/8] virtio: add explicit big-endian support to memory accessors Greg Kurz
2015-04-21 14:09     ` Michael S. Tsirkin
2015-04-21 16:23       ` Greg Kurz
2015-04-21 14:10   ` [PATCH v4 0/8] vhost: support for cross endian guests Michael S. Tsirkin
2015-04-21 16:24     ` Greg Kurz
2015-04-10 10:19 ` [PATCH v4 7/8] vhost: feature to set the vring endianness Greg Kurz
     [not found]   ` <20150410101627.31843.21710.stgit-GiB8zCg7hOfDOqzlkpFKJg@public.gmane.org>
2015-04-14 14:20     ` Cornelia Huck [this message]
     [not found]       ` <20150414162023.2f8694fe.cornelia.huck-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2015-04-14 15:13         ` Greg Kurz
2015-04-14 15:22           ` Cornelia Huck
2015-04-21 14:04     ` Michael S. Tsirkin
2015-04-21 15:48       ` Greg Kurz
     [not found]         ` <20150421174820.78c150b7-GiB8zCg7hOfDOqzlkpFKJg@public.gmane.org>
2015-04-21 18:25           ` Michael S. Tsirkin
     [not found]             ` <20150421201636-mutt-send-email-mst-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-04-22  9:08               ` Greg Kurz
     [not found]                 ` <20150422110854.74988416-GiB8zCg7hOfDOqzlkpFKJg@public.gmane.org>
2015-04-22 11:47                   ` Michael S. Tsirkin
2015-04-10 10:20 ` [PATCH v4 8/8] macvtap/tun: add VNET_BE flag Greg Kurz
     [not found]   ` <20150410101923.31843.66853.stgit-GiB8zCg7hOfDOqzlkpFKJg@public.gmane.org>
2015-04-21 14:06     ` Michael S. Tsirkin
     [not found]       ` <20150421160538-mutt-send-email-mst-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-04-21 16:22         ` Greg Kurz
     [not found]           ` <20150421182220.33257bd6-GiB8zCg7hOfDOqzlkpFKJg@public.gmane.org>
2015-04-21 18:30             ` Michael S. Tsirkin
     [not found]               ` <20150421202542-mutt-send-email-mst-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-04-22 10:01                 ` Greg Kurz
     [not found]                   ` <20150422120129.275c0bc6-GiB8zCg7hOfDOqzlkpFKJg@public.gmane.org>
2015-04-22 13:22                     ` Michael S. Tsirkin
2015-04-17  9:18 ` [PATCH v4 0/8] vhost: support for cross endian guests Greg Kurz
     [not found]   ` <20150417111813.2b795b2c-GiB8zCg7hOfDOqzlkpFKJg@public.gmane.org>
2015-04-21  7:50     ` Greg Kurz

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=20150414162023.2f8694fe.cornelia.huck@de.ibm.com \
    --to=cornelia.huck-ta70fqpds9bqt0dzr+alfa@public.gmane.org \
    --cc=gkurz-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org \
    --cc=kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=mst-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=rusty-8n+1lVoiYb80n/F98K4Iww@public.gmane.org \
    --cc=virtualization-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox