aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/318-mac80211-move-A-MSDU-skb_linearize-call-to-ieee80211.patch
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2016-02-04 20:17:25 +0000
committerFelix Fietkau <nbd@openwrt.org>2016-02-04 20:17:25 +0000
commit5b175c16fbec3c1b340a1cab46663c2941113014 (patch)
treee2dbee931c9e2da0c24181c8398653220beca729 /package/kernel/mac80211/patches/318-mac80211-move-A-MSDU-skb_linearize-call-to-ieee80211.patch
parent404c2df5cc58f5c3d9e5dd230a03c3c482fb396b (diff)
downloadmaster-187ad058-5b175c16fbec3c1b340a1cab46663c2941113014.tar.gz
master-187ad058-5b175c16fbec3c1b340a1cab46663c2941113014.tar.bz2
master-187ad058-5b175c16fbec3c1b340a1cab46663c2941113014.zip
mac80211: add performance improvements for A-MSDU rx
Signed-off-by: Felix Fietkau <nbd@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@48630 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/kernel/mac80211/patches/318-mac80211-move-A-MSDU-skb_linearize-call-to-ieee80211.patch')
-rw-r--r--package/kernel/mac80211/patches/318-mac80211-move-A-MSDU-skb_linearize-call-to-ieee80211.patch35
1 files changed, 35 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/318-mac80211-move-A-MSDU-skb_linearize-call-to-ieee80211.patch b/package/kernel/mac80211/patches/318-mac80211-move-A-MSDU-skb_linearize-call-to-ieee80211.patch
new file mode 100644
index 0000000000..655dc4bfa9
--- /dev/null
+++ b/package/kernel/mac80211/patches/318-mac80211-move-A-MSDU-skb_linearize-call-to-ieee80211.patch
@@ -0,0 +1,35 @@
+From: Felix Fietkau <nbd@openwrt.org>
+Date: Tue, 2 Feb 2016 14:39:08 +0100
+Subject: [PATCH] mac80211: move A-MSDU skb_linearize call to
+ ieee80211_amsdu_to_8023s
+
+Prepararation for zero-copy A-MSDU support with page fragment SKBs
+
+Signed-off-by: Felix Fietkau <nbd@openwrt.org>
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+---
+
+--- a/net/mac80211/rx.c
++++ b/net/mac80211/rx.c
+@@ -2203,9 +2203,6 @@ ieee80211_rx_h_amsdu(struct ieee80211_rx
+ skb->dev = dev;
+ __skb_queue_head_init(&frame_list);
+
+- if (skb_linearize(skb))
+- return RX_DROP_UNUSABLE;
+-
+ ieee80211_amsdu_to_8023s(skb, &frame_list, dev->dev_addr,
+ rx->sdata->vif.type,
+ rx->local->hw.extra_tx_headroom, true);
+--- a/net/wireless/util.c
++++ b/net/wireless/util.c
+@@ -657,6 +657,9 @@ void ieee80211_amsdu_to_8023s(struct sk_
+ int remaining, err;
+ u8 dst[ETH_ALEN], src[ETH_ALEN];
+
++ if (skb_linearize(skb))
++ goto out;
++
+ if (has_80211_header) {
+ err = ieee80211_data_to_8023(skb, addr, iftype);
+ if (err)