Patchwork [06/14] virtio-net: refactor receive_hdr

login
register
mail settings
Submitter Michael S. Tsirkin
Date Sept. 24, 2012, 11:04 p.m.
Message ID <ad7590dcf01aa24545419985a79a121a33aa2dfa.1348527749.git.mst@redhat.com>
Download mbox | patch
Permalink /patch/186600/
State New
Headers show

Comments

Michael S. Tsirkin - Sept. 24, 2012, 11:04 p.m.
Now that we know host hdr length, we don't need to
duplicate the logic in receive_hdr: caller can
figure out the offset itself.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 hw/virtio-net.c | 18 +++++++-----------
 1 file changed, 7 insertions(+), 11 deletions(-)
Anthony Liguori - Sept. 25, 2012, 12:39 a.m.
"Michael S. Tsirkin" <mst@redhat.com> writes:

> Now that we know host hdr length, we don't need to
> duplicate the logic in receive_hdr: caller can
> figure out the offset itself.
>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

Reviewed-by: Anthony Liguori <aliguori@us.ibm.com>

Regards,

Anthony Liguori

> ---
>  hw/virtio-net.c | 18 +++++++-----------
>  1 file changed, 7 insertions(+), 11 deletions(-)
>
> diff --git a/hw/virtio-net.c b/hw/virtio-net.c
> index 9611d95..3a0d1a7 100644
> --- a/hw/virtio-net.c
> +++ b/hw/virtio-net.c
> @@ -517,15 +517,13 @@ static void work_around_broken_dhclient(const struct virtio_net_hdr *hdr,
>      }
>  }
>  
> -static int receive_header(VirtIONet *n, const struct iovec *iov, int iov_cnt,
> -                          const void *buf, size_t size)
> +static void receive_header(VirtIONet *n, const struct iovec *iov, int iov_cnt,
> +                           const void *buf, size_t size)
>  {
> -    int offset = 0;
> -
>      if (n->has_vnet_hdr) {
> -        work_around_broken_dhclient(buf, buf + offset, size - offset);
> -        offset = sizeof(struct virtio_net_hdr);
> -        iov_from_buf(iov, iov_cnt, 0, buf, offset);
> +        work_around_broken_dhclient(buf, buf + n->host_hdr_len,
> +                                    size - n->host_hdr_len);
> +        iov_from_buf(iov, iov_cnt, 0, buf, sizeof(struct virtio_net_hdr));
>      } else {
>          struct virtio_net_hdr hdr = {
>              .flags = 0,
> @@ -533,8 +531,6 @@ static int receive_header(VirtIONet *n, const struct iovec *iov, int iov_cnt,
>          };
>          iov_from_buf(iov, iov_cnt, 0, &hdr, sizeof hdr);
>      }
> -
> -    return offset;
>  }
>  
>  static int receive_filter(VirtIONet *n, const uint8_t *buf, int size)
> @@ -641,8 +637,8 @@ static ssize_t virtio_net_receive(NetClientState *nc, const uint8_t *buf, size_t
>                                     sizeof(mhdr.num_buffers));
>              }
>  
> -            offset += receive_header(n, sg, elem.in_num,
> -                                     buf + offset, size - offset);
> +            receive_header(n, sg, elem.in_num, buf + offset, size - offset);
> +            offset += n->host_hdr_len;
>              total += n->guest_hdr_len;
>              guest_offset = n->guest_hdr_len;
>          } else {
> -- 
> MST

Patch

diff --git a/hw/virtio-net.c b/hw/virtio-net.c
index 9611d95..3a0d1a7 100644
--- a/hw/virtio-net.c
+++ b/hw/virtio-net.c
@@ -517,15 +517,13 @@  static void work_around_broken_dhclient(const struct virtio_net_hdr *hdr,
     }
 }
 
-static int receive_header(VirtIONet *n, const struct iovec *iov, int iov_cnt,
-                          const void *buf, size_t size)
+static void receive_header(VirtIONet *n, const struct iovec *iov, int iov_cnt,
+                           const void *buf, size_t size)
 {
-    int offset = 0;
-
     if (n->has_vnet_hdr) {
-        work_around_broken_dhclient(buf, buf + offset, size - offset);
-        offset = sizeof(struct virtio_net_hdr);
-        iov_from_buf(iov, iov_cnt, 0, buf, offset);
+        work_around_broken_dhclient(buf, buf + n->host_hdr_len,
+                                    size - n->host_hdr_len);
+        iov_from_buf(iov, iov_cnt, 0, buf, sizeof(struct virtio_net_hdr));
     } else {
         struct virtio_net_hdr hdr = {
             .flags = 0,
@@ -533,8 +531,6 @@  static int receive_header(VirtIONet *n, const struct iovec *iov, int iov_cnt,
         };
         iov_from_buf(iov, iov_cnt, 0, &hdr, sizeof hdr);
     }
-
-    return offset;
 }
 
 static int receive_filter(VirtIONet *n, const uint8_t *buf, int size)
@@ -641,8 +637,8 @@  static ssize_t virtio_net_receive(NetClientState *nc, const uint8_t *buf, size_t
                                    sizeof(mhdr.num_buffers));
             }
 
-            offset += receive_header(n, sg, elem.in_num,
-                                     buf + offset, size - offset);
+            receive_header(n, sg, elem.in_num, buf + offset, size - offset);
+            offset += n->host_hdr_len;
             total += n->guest_hdr_len;
             guest_offset = n->guest_hdr_len;
         } else {