Thread (7 messages) 7 messages, 4 authors, 2015-12-16

Re: [PATCH] vhost: move is_le setup to the backend

From: Cornelia Huck <hidden>
Date: 2015-11-12 12:37:36
Also in: kvm, lkml, virtualization

On Fri, 30 Oct 2015 12:42:35 +0100
Greg Kurz [off-list ref] wrote:
The vq->is_le field is used to fix endianness when accessing the vring via
the cpu_to_vhost16() and vhost16_to_cpu() helpers in the following cases:

1) host is big endian and device is modern virtio

2) host has cross-endian support and device is legacy virtio with a different
   endianness than the host

Both cases rely on the VHOST_SET_FEATURES ioctl, but 2) also needs the
VHOST_SET_VRING_ENDIAN ioctl to be called by userspace. Since vq->is_le
is only needed when the backend is active, it was decided to set it at
backend start.

This is currently done in vhost_init_used()->vhost_init_is_le() but it
obfuscates the core vhost code. This patch moves the is_le setup to a
dedicated function that is called from the backend code.

Note vhost_net is the only backend that can pass vq->private_data == NULL to
vhost_init_used(), hence the "if (sock)" branch.

No behaviour change.

Signed-off-by: Greg Kurz <redacted>
---
 drivers/vhost/net.c   |    6 ++++++
 drivers/vhost/scsi.c  |    3 +++
 drivers/vhost/test.c  |    2 ++
 drivers/vhost/vhost.c |   12 +++++++-----
 drivers/vhost/vhost.h |    1 +
 5 files changed, 19 insertions(+), 5 deletions(-)
Makes sense.

Reviewed-by: Cornelia Huck <redacted>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help