net/xen-netback: xenvif_gop_frag_copy: move GSO check out of the loop
authorJulien Grall <julien.grall@citrix.com>
Wed, 24 Jun 2015 17:03:14 +0000 (18:03 +0100)
committerDavid Vrabel <david.vrabel@citrix.com>
Fri, 23 Oct 2015 13:20:32 +0000 (14:20 +0100)
The skb doesn't change within the function. Therefore it's only
necessary to check if we need GSO once at the beginning.

Signed-off-by: Julien Grall <julien.grall@citrix.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
drivers/net/xen-netback/netback.c

index ec98d43916a818152263c8128b4854e9d340c3d2..c4e6c025d64d3c1bd4f50641f120c2052a2ccee8 100644 (file)
@@ -288,6 +288,13 @@ static void xenvif_gop_frag_copy(struct xenvif_queue *queue, struct sk_buff *skb
        unsigned long bytes;
        int gso_type = XEN_NETIF_GSO_TYPE_NONE;
 
+       if (skb_is_gso(skb)) {
+               if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV4)
+                       gso_type = XEN_NETIF_GSO_TYPE_TCPV4;
+               else if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6)
+                       gso_type = XEN_NETIF_GSO_TYPE_TCPV6;
+       }
+
        /* Data must not cross a page boundary. */
        BUG_ON(size + offset > PAGE_SIZE<<compound_order(page));
 
@@ -347,13 +354,6 @@ static void xenvif_gop_frag_copy(struct xenvif_queue *queue, struct sk_buff *skb
                }
 
                /* Leave a gap for the GSO descriptor. */
-               if (skb_is_gso(skb)) {
-                       if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV4)
-                               gso_type = XEN_NETIF_GSO_TYPE_TCPV4;
-                       else if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6)
-                               gso_type = XEN_NETIF_GSO_TYPE_TCPV6;
-               }
-
                if (*head && ((1 << gso_type) & queue->vif->gso_mask))
                        queue->rx.req_cons++;