diff mbox series

[04/10] vhost-user: support cross-endian vnet headers

Message ID 20181115143124.19234-5-pbonzini@redhat.com
State New
Headers show
Series vhost: preparation for qgraph conversion of vhost-user-test | expand

Commit Message

Paolo Bonzini Nov. 15, 2018, 2:31 p.m. UTC
vhost-user already has a way to communicate the endianness of the guest
via the vring endianness messages.  The vring endianness always matches
the vnet header endianness so there is no need to do anything else in
the backend.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 net/vhost-user.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

Comments

Marc-André Lureau Nov. 20, 2018, 8:50 a.m. UTC | #1
Hi

On Thu, Nov 15, 2018 at 6:31 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
>
> vhost-user already has a way to communicate the endianness of the guest
> via the vring endianness messages.  The vring endianness always matches
> the vnet header endianness so there is no need to do anything else in
> the backend.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>

> ---
>  net/vhost-user.c | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
>
> diff --git a/net/vhost-user.c b/net/vhost-user.c
> index a39f9c9974..cd9659df87 100644
> --- a/net/vhost-user.c
> +++ b/net/vhost-user.c
> @@ -172,6 +172,17 @@ static void net_vhost_user_cleanup(NetClientState *nc)
>      qemu_purge_queued_packets(nc);
>  }
>
> +static int vhost_user_set_vnet_endianness(NetClientState *nc,
> +                                          bool enable)
> +{
> +    /* Nothing to do.  If the server supports
> +     * VHOST_USER_PROTOCOL_F_CROSS_ENDIAN, it will get the
> +     * vnet header endianness from there.  If it doesn't, negotiation
> +     * fails.
> +     */
> +    return 0;
> +}
> +
>  static bool vhost_user_has_vnet_hdr(NetClientState *nc)
>  {
>      assert(nc->info->type == NET_CLIENT_DRIVER_VHOST_USER);
> @@ -193,6 +204,8 @@ static NetClientInfo net_vhost_user_info = {
>          .cleanup = net_vhost_user_cleanup,
>          .has_vnet_hdr = vhost_user_has_vnet_hdr,
>          .has_ufo = vhost_user_has_ufo,
> +        .set_vnet_be = vhost_user_set_vnet_endianness,
> +        .set_vnet_le = vhost_user_set_vnet_endianness,
>  };
>
>  static gboolean net_vhost_user_watch(GIOChannel *chan, GIOCondition cond,
> --
> 2.19.1
>
>
diff mbox series

Patch

diff --git a/net/vhost-user.c b/net/vhost-user.c
index a39f9c9974..cd9659df87 100644
--- a/net/vhost-user.c
+++ b/net/vhost-user.c
@@ -172,6 +172,17 @@  static void net_vhost_user_cleanup(NetClientState *nc)
     qemu_purge_queued_packets(nc);
 }
 
+static int vhost_user_set_vnet_endianness(NetClientState *nc,
+                                          bool enable)
+{
+    /* Nothing to do.  If the server supports
+     * VHOST_USER_PROTOCOL_F_CROSS_ENDIAN, it will get the
+     * vnet header endianness from there.  If it doesn't, negotiation
+     * fails.
+     */
+    return 0;
+}
+
 static bool vhost_user_has_vnet_hdr(NetClientState *nc)
 {
     assert(nc->info->type == NET_CLIENT_DRIVER_VHOST_USER);
@@ -193,6 +204,8 @@  static NetClientInfo net_vhost_user_info = {
         .cleanup = net_vhost_user_cleanup,
         .has_vnet_hdr = vhost_user_has_vnet_hdr,
         .has_ufo = vhost_user_has_ufo,
+        .set_vnet_be = vhost_user_set_vnet_endianness,
+        .set_vnet_le = vhost_user_set_vnet_endianness,
 };
 
 static gboolean net_vhost_user_watch(GIOChannel *chan, GIOCondition cond,