WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH] linux-2.6.18/netback: Always pull through PKT_PROT_L

To: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH] linux-2.6.18/netback: Always pull through PKT_PROT_LEN bytes into the linear part of an skb
From: "Jan Beulich" <JBeulich@xxxxxxxxxx>
Date: Fri, 17 Dec 2010 09:42:13 +0000
Cc: paul.durrant@xxxxxxxxxx, Ian Campbell <ian.campbell@xxxxxxxxxx>, ssmith@xxxxxxxxxxxxx
Delivery-date: Fri, 17 Dec 2010 01:42:54 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
From: Ian Campbell <ian.campbell@xxxxxxxxxx>
Subject: xen/netback: Always pull through PKT_PROT_LEN bytes into the linear 
part of an skb

Previously PKT_PROT_LEN would only have an effect on the first
fragment.

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>

From: Steven Smith <ssmith@xxxxxxxxxxxxx>
Subject: xen/netback: try to pull a minimum of 72 bytes into the skb data area

... when receiving a packet into netback.  The previous number, 64,
tended to place a fragment boundary in the middle of the TCP header
options and led to unnecessary fragmentation in Windows <-> Windows
networking.

From: Paul Durrant <paul.durrant@xxxxxxxxxx>
Subject: Re-define PKT_PROT_LEN to be bigger.

Re-define PKT_PROT_LEN to be big enough to handle maximal IPv4 and TCP
options and phrase the definition so that it's reasonably obvious
that's what it's for.

Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>

--- sle10sp4-2010-12-15.orig/drivers/xen/netback/netback.c
+++ sle10sp4-2010-12-15/drivers/xen/netback/netback.c
@@ -35,6 +35,8 @@
  */
 
 #include "common.h"
+#include <linux/if_vlan.h>
+#include <linux/tcp.h>
 #include <xen/balloon.h>
 #include <xen/interface/memory.h>
 
@@ -105,7 +107,14 @@ static inline int netif_page_index(struc
        return idx;
 }
 
-#define PKT_PROT_LEN 64
+/*
+ * This is the amount of packet we copy rather than map, so that the
+ * guest can't fiddle with the contents of the headers while we do
+ * packet processing on them (netfilter, routing, etc).
+ */
+#define PKT_PROT_LEN    (ETH_HLEN + VLAN_HLEN + \
+                        sizeof(struct iphdr) + MAX_IPOPTLEN + \
+                        sizeof(struct tcphdr) + 40 /* MAX_TCP_OPTION_SPACE */)
 
 static struct pending_tx_info {
        netif_tx_request_t req;
@@ -1458,6 +1467,16 @@ static void net_tx_action(unsigned long 
 
                netbk_fill_frags(skb);
 
+               /*
+                * If the initial fragment was < PKT_PROT_LEN then
+                * pull through some bytes from the other fragments to
+                * increase the linear region to PKT_PROT_LEN bytes.
+                */
+               if (skb_headlen(skb) < PKT_PROT_LEN && skb_is_nonlinear(skb)) {
+                       int target = min_t(int, skb->len, PKT_PROT_LEN);
+                       __pskb_pull_tail(skb, target - skb_headlen(skb));
+               }
+
                skb->dev      = netif->dev;
                skb->protocol = eth_type_trans(skb, skb->dev);
 



Attachment: xen-netback-extend-pull.patch
Description: Text document

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH] linux-2.6.18/netback: Always pull through PKT_PROT_LEN bytes into the linear part of an skb, Jan Beulich <=