kernel: add a few patches for avoiding unnecessary skb reallocations - significantly improves ethernet<->wireless performance with mac80211 based drivers
SVN-Revision: 31886
This commit is contained in:
parent
ec7786c2ec
commit
6f89cffc9a
3 changed files with 59 additions and 0 deletions
|
@ -0,0 +1,28 @@
|
||||||
|
--- a/net/netlink/af_netlink.c
|
||||||
|
+++ b/net/netlink/af_netlink.c
|
||||||
|
@@ -854,25 +854,7 @@ void netlink_detachskb(struct sock *sk,
|
||||||
|
|
||||||
|
static struct sk_buff *netlink_trim(struct sk_buff *skb, gfp_t allocation)
|
||||||
|
{
|
||||||
|
- int delta;
|
||||||
|
-
|
||||||
|
skb_orphan(skb);
|
||||||
|
-
|
||||||
|
- delta = skb->end - skb->tail;
|
||||||
|
- if (delta * 2 < skb->truesize)
|
||||||
|
- return skb;
|
||||||
|
-
|
||||||
|
- if (skb_shared(skb)) {
|
||||||
|
- struct sk_buff *nskb = skb_clone(skb, allocation);
|
||||||
|
- if (!nskb)
|
||||||
|
- return skb;
|
||||||
|
- kfree_skb(skb);
|
||||||
|
- skb = nskb;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- if (!pskb_expand_head(skb, 0, -delta, allocation))
|
||||||
|
- skb->truesize -= delta;
|
||||||
|
-
|
||||||
|
return skb;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
--- a/include/linux/skbuff.h
|
||||||
|
+++ b/include/linux/skbuff.h
|
||||||
|
@@ -1850,12 +1850,15 @@ static inline int skb_clone_writable(con
|
||||||
|
static inline int __skb_cow(struct sk_buff *skb, unsigned int headroom,
|
||||||
|
int cloned)
|
||||||
|
{
|
||||||
|
+ unsigned int alloc_headroom = headroom;
|
||||||
|
int delta = 0;
|
||||||
|
|
||||||
|
if (headroom < NET_SKB_PAD)
|
||||||
|
- headroom = NET_SKB_PAD;
|
||||||
|
- if (headroom > skb_headroom(skb))
|
||||||
|
+ alloc_headroom = NET_SKB_PAD;
|
||||||
|
+ if (headroom > skb_headroom(skb) ||
|
||||||
|
+ (cloned && alloc_headroom > skb_headroom(skb))) {
|
||||||
|
delta = headroom - skb_headroom(skb);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if (delta || cloned)
|
||||||
|
return pskb_expand_head(skb, ALIGN(delta, NET_SKB_PAD), 0,
|
11
target/linux/generic/patches-3.3/655-increase_skb_pad.patch
Normal file
11
target/linux/generic/patches-3.3/655-increase_skb_pad.patch
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
--- a/include/linux/skbuff.h
|
||||||
|
+++ b/include/linux/skbuff.h
|
||||||
|
@@ -1558,7 +1558,7 @@ static inline int pskb_network_may_pull(
|
||||||
|
* NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8)
|
||||||
|
*/
|
||||||
|
#ifndef NET_SKB_PAD
|
||||||
|
-#define NET_SKB_PAD max(32, L1_CACHE_BYTES)
|
||||||
|
+#define NET_SKB_PAD max(48, L1_CACHE_BYTES)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern int ___pskb_trim(struct sk_buff *skb, unsigned int len);
|
Loading…
Reference in a new issue