diff options
author | Felix Fietkau <nbd@openwrt.org> | 2013-12-16 15:45:57 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2013-12-16 15:45:57 +0000 |
commit | 5d79ad06c105dbc6b331f5c1de36aaf2f3bf89a3 (patch) | |
tree | 1155825b84e008ebff442cb2312dd0d200b8ec9f /package | |
parent | 8461ffccc15a1728a9501ebd428cc60c6273d11f (diff) | |
download | upstream-5d79ad06c105dbc6b331f5c1de36aaf2f3bf89a3.tar.gz upstream-5d79ad06c105dbc6b331f5c1de36aaf2f3bf89a3.tar.bz2 upstream-5d79ad06c105dbc6b331f5c1de36aaf2f3bf89a3.zip |
mac80211: fix AP mode scanning issues
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
SVN-Revision: 39098
Diffstat (limited to 'package')
-rw-r--r-- | package/kernel/mac80211/patches/300-pending_work.patch | 48 |
1 files changed, 47 insertions, 1 deletions
diff --git a/package/kernel/mac80211/patches/300-pending_work.patch b/package/kernel/mac80211/patches/300-pending_work.patch index ec4fd499cf..b1b5f47053 100644 --- a/package/kernel/mac80211/patches/300-pending_work.patch +++ b/package/kernel/mac80211/patches/300-pending_work.patch @@ -4589,7 +4589,53 @@ --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -1728,8 +1728,7 @@ netdev_tx_t ieee80211_monitor_start_xmit +@@ -463,7 +463,6 @@ ieee80211_tx_h_unicast_ps_buf(struct iee + { + struct sta_info *sta = tx->sta; + struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); +- struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data; + struct ieee80211_local *local = tx->local; + + if (unlikely(!sta)) +@@ -474,15 +473,6 @@ ieee80211_tx_h_unicast_ps_buf(struct iee + !(info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER))) { + int ac = skb_get_queue_mapping(tx->skb); + +- /* only deauth, disassoc and action are bufferable MMPDUs */ +- if (ieee80211_is_mgmt(hdr->frame_control) && +- !ieee80211_is_deauth(hdr->frame_control) && +- !ieee80211_is_disassoc(hdr->frame_control) && +- !ieee80211_is_action(hdr->frame_control)) { +- info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER; +- return TX_CONTINUE; +- } +- + ps_dbg(sta->sdata, "STA %pM aid %d: PS buffer for AC %d\n", + sta->sta.addr, sta->sta.aid, ac); + if (tx->local->total_ps_buffered >= TOTAL_MAX_TX_BUFFER) +@@ -525,9 +515,21 @@ ieee80211_tx_h_unicast_ps_buf(struct iee + static ieee80211_tx_result debug_noinline + ieee80211_tx_h_ps_buf(struct ieee80211_tx_data *tx) + { ++ struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); ++ struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data; ++ + if (unlikely(tx->flags & IEEE80211_TX_PS_BUFFERED)) + return TX_CONTINUE; + ++ /* only deauth, disassoc and action are bufferable MMPDUs */ ++ if (ieee80211_is_mgmt(hdr->frame_control) && ++ !ieee80211_is_deauth(hdr->frame_control) && ++ !ieee80211_is_disassoc(hdr->frame_control) && ++ !ieee80211_is_action(hdr->frame_control)) { ++ info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER; ++ return TX_CONTINUE; ++ } ++ + if (tx->flags & IEEE80211_TX_UNICAST) + return ieee80211_tx_h_unicast_ps_buf(tx); + else +@@ -1728,8 +1730,7 @@ netdev_tx_t ieee80211_monitor_start_xmit * radar detection by itself. We can do that later by adding a * monitor flag interfaces used for AP support. */ |