[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2] vhost-user: support cross-endianess negatiat
From: |
Felipe Franciosi |
Subject: |
Re: [Qemu-devel] [PATCH v2] vhost-user: support cross-endianess negatiation |
Date: |
Fri, 7 Jul 2017 16:13:09 +0000 |
ping. :)
F.
> On 14 Jun 2017, at 18:44, Felipe Franciosi <address@hidden> wrote:
>
> Currently, vhost-user does not implement any means for notifying the
> backend about guest endianess. This commit introduces a new message
> called VHOST_USER_SET_VRING_ENDIAN which is analogous to the ioctl()
> called VHOST_SET_VRING_ENDIAN used for kernel vhost backends. Such
> message is necessary for backends supporting legacy (pre-1.0) virtio
> devices running in big-endian guests.
>
> Signed-off-by: Felipe Franciosi <address@hidden>
> Signed-off-by: Mike Cui <address@hidden>
> ---
> v1->v2:
> * Elaborated message usage on the documentation.
> * Fixed Id typo (22->23) on the documentation.
>
> docs/specs/vhost-user.txt | 16 ++++++++++++++++
> hw/virtio/vhost-user.c | 23 +++++++++++++++++++++--
> 2 files changed, 37 insertions(+), 2 deletions(-)
>
> diff --git a/docs/specs/vhost-user.txt b/docs/specs/vhost-user.txt
> index 481ab56..954771d 100644
> --- a/docs/specs/vhost-user.txt
> +++ b/docs/specs/vhost-user.txt
> @@ -326,6 +326,7 @@ Protocol features
> #define VHOST_USER_PROTOCOL_F_REPLY_ACK 3
> #define VHOST_USER_PROTOCOL_F_MTU 4
> #define VHOST_USER_PROTOCOL_F_SLAVE_REQ 5
> +#define VHOST_USER_PROTOCOL_F_CROSS_ENDIAN 6
>
> Master message types
> --------------------
> @@ -580,6 +581,21 @@ Master message types
> This request should be send only when VIRTIO_F_IOMMU_PLATFORM feature
> has been successfully negotiated.
>
> + * VHOST_USER_SET_VRING_ENDIAN
> +
> + Id: 23
> + Equivalent ioctl: VHOST_SET_VRING_ENDIAN
> + Master payload: vring state description
> +
> + Set the endianess of a VQ for legacy devices. Little-endian is
> indicated
> + with state.num set to 0 and big-endian is indicated with state.num set
> + to 1. Other values are invalid.
> + This request should be sent only when
> VHOST_USER_PROTOCOL_F_CROSS_ENDIAN
> + has been negotiated.
> + Backends that negotiated this feature should handle both endianesses
> + and expect this message once (per VQ) during device configuration
> + (ie. before the master starts the VQ).
> +
> Slave message types
> -------------------
>
> diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c
> index 958ee09..006af1c 100644
> --- a/hw/virtio/vhost-user.c
> +++ b/hw/virtio/vhost-user.c
> @@ -33,6 +33,7 @@ enum VhostUserProtocolFeature {
> VHOST_USER_PROTOCOL_F_REPLY_ACK = 3,
> VHOST_USER_PROTOCOL_F_NET_MTU = 4,
> VHOST_USER_PROTOCOL_F_SLAVE_REQ = 5,
> + VHOST_USER_PROTOCOL_F_CROSS_ENDIAN = 6,
>
> VHOST_USER_PROTOCOL_F_MAX
> };
> @@ -63,6 +64,7 @@ typedef enum VhostUserRequest {
> VHOST_USER_NET_SET_MTU = 20,
> VHOST_USER_SET_SLAVE_REQ_FD = 21,
> VHOST_USER_IOTLB_MSG = 22,
> + VHOST_USER_SET_VRING_ENDIAN = 23,
> VHOST_USER_MAX
> } VhostUserRequest;
>
> @@ -367,8 +369,25 @@ static int vhost_user_set_vring_addr(struct vhost_dev
> *dev,
> static int vhost_user_set_vring_endian(struct vhost_dev *dev,
> struct vhost_vring_state *ring)
> {
> - error_report("vhost-user trying to send unhandled ioctl");
> - return -1;
> + bool cross_endian = virtio_has_feature(dev->protocol_features,
> +
> VHOST_USER_PROTOCOL_F_CROSS_ENDIAN);
> + VhostUserMsg msg = {
> + .request = VHOST_USER_SET_VRING_ENDIAN,
> + .flags = VHOST_USER_VERSION,
> + .payload.state = *ring,
> + .size = sizeof(msg.payload.state),
> + };
> +
> + if (!cross_endian) {
> + error_report("vhost-user trying to send unhandled ioctl");
> + return -1;
> + }
> +
> + if (vhost_user_write(dev, &msg, NULL, 0) < 0) {
> + return -1;
> + }
> +
> + return 0;
> }
>
> static int vhost_set_vring(struct vhost_dev *dev,
> --
> 1.9.5
>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-devel] [PATCH v2] vhost-user: support cross-endianess negatiation,
Felipe Franciosi <=