Changeset 15761


Ignore:
Timestamp:
2009-05-11T00:17:50+02:00 (9 years ago)
Author:
nbd
Message:

improve the skb padding performance change to avoid unnecessary reallocations in the routing code

Location:
trunk/target/linux/generic-2.6
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/generic-2.6/patches-2.6.28/205-skb_padding.patch

    r15655 r15761  
    11--- a/include/linux/skbuff.h 
    22+++ b/include/linux/skbuff.h 
    3 @@ -1270,9 +1270,12 @@ 
     3@@ -1256,11 +1256,18 @@ static inline int skb_network_offset(con 
    44  * 
    55  * Various parts of the networking layer expect at least 16 bytes of 
     
    77+ * 
    88+ * This has been changed to 64 to acommodate for routing between ethernet 
    9 + * and wireless 
     9+ * and wireless, but only for new allocations 
    1010  */ 
    1111 #ifndef NET_SKB_PAD 
    12 -#define NET_SKB_PAD    16 
    13 +#define NET_SKB_PAD    64 
     12 #define NET_SKB_PAD    16 
    1413 #endif 
    1514  
     15+#ifndef NET_SKB_PAD_ALLOC 
     16+#define NET_SKB_PAD_ALLOC      64 
     17+#endif 
     18+ 
    1619 extern int ___pskb_trim(struct sk_buff *skb, unsigned int len); 
     20  
     21 static inline void __skb_trim(struct sk_buff *skb, unsigned int len) 
     22@@ -1350,9 +1357,9 @@ static inline void __skb_queue_purge(str 
     23 static inline struct sk_buff *__dev_alloc_skb(unsigned int length, 
     24                                              gfp_t gfp_mask) 
     25 { 
     26-       struct sk_buff *skb = alloc_skb(length + NET_SKB_PAD, gfp_mask); 
     27+       struct sk_buff *skb = alloc_skb(length + NET_SKB_PAD_ALLOC, gfp_mask); 
     28        if (likely(skb)) 
     29-               skb_reserve(skb, NET_SKB_PAD); 
     30+               skb_reserve(skb, NET_SKB_PAD_ALLOC); 
     31        return skb; 
     32 } 
     33  
     34@@ -1425,7 +1432,7 @@ static inline int __skb_cow(struct sk_bu 
     35                delta = headroom - skb_headroom(skb); 
     36  
     37        if (delta || cloned) 
     38-               return pskb_expand_head(skb, ALIGN(delta, NET_SKB_PAD), 0, 
     39+               return pskb_expand_head(skb, ALIGN(delta, NET_SKB_PAD_ALLOC), 0, 
     40                                        GFP_ATOMIC); 
     41        return 0; 
     42 } 
     43--- a/net/core/skbuff.c 
     44+++ b/net/core/skbuff.c 
     45@@ -243,9 +243,9 @@ struct sk_buff *__netdev_alloc_skb(struc 
     46        int node = dev->dev.parent ? dev_to_node(dev->dev.parent) : -1; 
     47        struct sk_buff *skb; 
     48  
     49-       skb = __alloc_skb(length + NET_SKB_PAD, gfp_mask, 0, node); 
     50+       skb = __alloc_skb(length + NET_SKB_PAD_ALLOC, gfp_mask, 0, node); 
     51        if (likely(skb)) { 
     52-               skb_reserve(skb, NET_SKB_PAD); 
     53+               skb_reserve(skb, NET_SKB_PAD_ALLOC); 
     54                skb->dev = dev; 
     55        } 
     56        return skb; 
  • trunk/target/linux/generic-2.6/patches-2.6.29/205-skb_padding.patch

    r15655 r15761  
    11--- a/include/linux/skbuff.h 
    22+++ b/include/linux/skbuff.h 
    3 @@ -1306,9 +1306,12 @@ 
     3@@ -1306,11 +1306,18 @@ static inline int skb_network_offset(con 
    44  * 
    55  * Various parts of the networking layer expect at least 16 bytes of 
     
    77+ * 
    88+ * This has been changed to 64 to acommodate for routing between ethernet 
    9 + * and wireless 
     9+ * and wireless, but only for new allocations 
    1010  */ 
    1111 #ifndef NET_SKB_PAD 
    12 -#define NET_SKB_PAD    16 
    13 +#define NET_SKB_PAD    64 
     12 #define NET_SKB_PAD    16 
    1413 #endif 
    1514  
     15+#ifndef NET_SKB_PAD_ALLOC 
     16+#define NET_SKB_PAD_ALLOC      64 
     17+#endif 
     18+ 
    1619 extern int ___pskb_trim(struct sk_buff *skb, unsigned int len); 
     20  
     21 static inline void __skb_trim(struct sk_buff *skb, unsigned int len) 
     22@@ -1400,9 +1407,9 @@ static inline void __skb_queue_purge(str 
     23 static inline struct sk_buff *__dev_alloc_skb(unsigned int length, 
     24                                              gfp_t gfp_mask) 
     25 { 
     26-       struct sk_buff *skb = alloc_skb(length + NET_SKB_PAD, gfp_mask); 
     27+       struct sk_buff *skb = alloc_skb(length + NET_SKB_PAD_ALLOC, gfp_mask); 
     28        if (likely(skb)) 
     29-               skb_reserve(skb, NET_SKB_PAD); 
     30+               skb_reserve(skb, NET_SKB_PAD_ALLOC); 
     31        return skb; 
     32 } 
     33  
     34@@ -1475,7 +1482,7 @@ static inline int __skb_cow(struct sk_bu 
     35                delta = headroom - skb_headroom(skb); 
     36  
     37        if (delta || cloned) 
     38-               return pskb_expand_head(skb, ALIGN(delta, NET_SKB_PAD), 0, 
     39+               return pskb_expand_head(skb, ALIGN(delta, NET_SKB_PAD_ALLOC), 0, 
     40                                        GFP_ATOMIC); 
     41        return 0; 
     42 } 
     43--- a/net/core/skbuff.c 
     44+++ b/net/core/skbuff.c 
     45@@ -320,9 +320,9 @@ struct sk_buff *__netdev_alloc_skb(struc 
     46        int node = dev->dev.parent ? dev_to_node(dev->dev.parent) : -1; 
     47        struct sk_buff *skb; 
     48  
     49-       skb = __alloc_skb(length + NET_SKB_PAD, gfp_mask, 0, node); 
     50+       skb = __alloc_skb(length + NET_SKB_PAD_ALLOC, gfp_mask, 0, node); 
     51        if (likely(skb)) { 
     52-               skb_reserve(skb, NET_SKB_PAD); 
     53+               skb_reserve(skb, NET_SKB_PAD_ALLOC); 
     54                skb->dev = dev; 
     55        } 
     56        return skb; 
  • trunk/target/linux/generic-2.6/patches-2.6.30/205-skb_padding.patch

    r15736 r15761  
    11--- a/include/linux/skbuff.h 
    22+++ b/include/linux/skbuff.h 
    3 @@ -1369,9 +1369,12 @@ static inline int skb_network_offset(con 
     3@@ -1369,11 +1369,18 @@ static inline int skb_network_offset(con 
    44  * 
    55  * Various parts of the networking layer expect at least 32 bytes of 
     
    77+ * 
    88+ * This has been changed to 64 to acommodate for routing between ethernet 
    9 + * and wireless 
     9+ * and wireless, but only for new allocations 
    1010  */ 
    1111 #ifndef NET_SKB_PAD 
    12 -#define NET_SKB_PAD    32 
    13 +#define NET_SKB_PAD    64 
     12 #define NET_SKB_PAD    32 
    1413 #endif 
    1514  
     15+#ifndef NET_SKB_PAD_ALLOC 
     16+#define NET_SKB_PAD_ALLOC      64 
     17+#endif 
     18+ 
    1619 extern int ___pskb_trim(struct sk_buff *skb, unsigned int len); 
     20  
     21 static inline void __skb_trim(struct sk_buff *skb, unsigned int len) 
     22@@ -1463,9 +1470,9 @@ static inline void __skb_queue_purge(str 
     23 static inline struct sk_buff *__dev_alloc_skb(unsigned int length, 
     24                                              gfp_t gfp_mask) 
     25 { 
     26-       struct sk_buff *skb = alloc_skb(length + NET_SKB_PAD, gfp_mask); 
     27+       struct sk_buff *skb = alloc_skb(length + NET_SKB_PAD_ALLOC, gfp_mask); 
     28        if (likely(skb)) 
     29-               skb_reserve(skb, NET_SKB_PAD); 
     30+               skb_reserve(skb, NET_SKB_PAD_ALLOC); 
     31        return skb; 
     32 } 
     33  
     34@@ -1538,7 +1545,7 @@ static inline int __skb_cow(struct sk_bu 
     35                delta = headroom - skb_headroom(skb); 
     36  
     37        if (delta || cloned) 
     38-               return pskb_expand_head(skb, ALIGN(delta, NET_SKB_PAD), 0, 
     39+               return pskb_expand_head(skb, ALIGN(delta, NET_SKB_PAD_ALLOC), 0, 
     40                                        GFP_ATOMIC); 
     41        return 0; 
     42 } 
     43--- a/net/core/skbuff.c 
     44+++ b/net/core/skbuff.c 
     45@@ -327,9 +327,9 @@ struct sk_buff *__netdev_alloc_skb(struc 
     46        int node = dev->dev.parent ? dev_to_node(dev->dev.parent) : -1; 
     47        struct sk_buff *skb; 
     48  
     49-       skb = __alloc_skb(length + NET_SKB_PAD, gfp_mask, 0, node); 
     50+       skb = __alloc_skb(length + NET_SKB_PAD_ALLOC, gfp_mask, 0, node); 
     51        if (likely(skb)) { 
     52-               skb_reserve(skb, NET_SKB_PAD); 
     53+               skb_reserve(skb, NET_SKB_PAD_ALLOC); 
     54                skb->dev = dev; 
     55        } 
     56        return skb; 
Note: See TracChangeset for help on using the changeset viewer.