mac80211:Improves local WIFI TCP throughput

This commit is contained in:
coolsnowwolf 2018-10-12 13:00:10 +08:00
parent 8640715b70
commit 07b76763f9
3 changed files with 33 additions and 2 deletions

View File

@ -12,7 +12,7 @@ PKG_NAME:=mac80211
PKG_VERSION:=4.19-rc5-1
PKG_RELEASE:=1
PKG_SOURCE_URL:=https://mirrors.edge.kernel.org/pub/linux/kernel/projects/backports/stable/v4.19-rc5/
PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v4.19-rc5/
PKG_HASH:=5b61e64ea79d22bbac9e8612d5d5485974f223de00d4ec250b0faf4b7baf9957
PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz

View File

@ -0,0 +1,31 @@
From: Sara Sharon <sara.sharon@intel.com>
Date: Thu, 11 Oct 2018 14:21:21 +0200
Subject: [PATCH] mac80211: free skb fraglist before freeing the skb
mac80211 uses the frag list to build AMSDU. When freeing
the skb, it may not be really freed, since someone is still
holding a reference to it.
In that case, when TCP skb is being retransmitted, the
pointer to the frag list is being reused, while the data
in there is no longer valid.
Since we will never get frag list from the network stack,
as mac80211 doesn't advertise the capability, we can safely
free and nullify it before releasing the SKB.
Signed-off-by: Sara Sharon <sara.sharon@intel.com>
---
--- a/net/mac80211/status.c
+++ b/net/mac80211/status.c
@@ -561,6 +561,11 @@ static void ieee80211_report_used_skb(st
}
ieee80211_led_tx(local);
+
+ if (skb_has_frag_list(skb)) {
+ kfree_skb_list(skb_shinfo(skb)->frag_list);
+ skb_shinfo(skb)->frag_list = NULL;
+ }
}
/*

View File

@ -96,7 +96,7 @@ Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com>
struct rcu_head rcu_head;
--- a/net/mac80211/status.c
+++ b/net/mac80211/status.c
@@ -653,9 +653,22 @@ void ieee80211_tx_monitor(struct ieee802
@@ -658,9 +658,22 @@ void ieee80211_tx_monitor(struct ieee802
struct sk_buff *skb2;
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
struct ieee80211_sub_if_data *sdata;