mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-12-28 15:28:57 +02:00
kernel: add a few patches for avoiding unnecessary skb reallocations - significantly improves ethernet<->wireless performance with mac80211 based drivers
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31886 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
878544bb07
commit
4cf70ab2e1
@ -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 New Issue
Block a user