2fe19dfd94b6434eded6e4e7ba8478a1a2f21115
[openwrt/staging/wigyori.git] /
1 From: Ryder Lee <ryder.lee@mediatek.com>
2 Date: Fri, 28 May 2021 14:05:42 +0800
3 Subject: [PATCH] mac80211: minstrel_ht: fix minstrel_aggr_check for encap
4 offload
5
6 Avoid checking ieee80211_hdr to support encap offload.
7
8 Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
9 ---
10
11 --- a/net/mac80211/rc80211_minstrel_ht.c
12 +++ b/net/mac80211/rc80211_minstrel_ht.c
13 @@ -1156,19 +1156,24 @@ static void
14 minstrel_aggr_check(struct ieee80211_sta *pubsta, struct sk_buff *skb)
15 {
16 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
17 + struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
18 struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
19 u16 tid;
20
21 if (skb_get_queue_mapping(skb) == IEEE80211_AC_VO)
22 return;
23
24 - if (unlikely(!ieee80211_is_data_qos(hdr->frame_control)))
25 + if (unlikely(!pubsta->wme))
26 + return;
27 +
28 + if (!(info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP) &&
29 + unlikely(!ieee80211_is_data_qos(hdr->frame_control)))
30 return;
31
32 if (unlikely(skb->protocol == cpu_to_be16(ETH_P_PAE)))
33 return;
34
35 - tid = ieee80211_get_tid(hdr);
36 + tid = skb->priority & IEEE80211_QOS_CTL_TID_MASK;
37 if (likely(sta->ampdu_mlme.tid_tx[tid]))
38 return;
39