mirror of
git://git.openwrt.org/openwrt/openwrt.git
synced 2025-11-04 15:04:28 -05:00
The removed patches were applied upstream. Remove the 300-mac80211-optimize-skb-resizing.patch. This patch was not applied upstream, but it conflicts with upstream changes and needs bigger changes. It was applied with Felix to remove this patch for now. It should be reworked and then send upstream later. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
46 lines
1.3 KiB
Diff
46 lines
1.3 KiB
Diff
From: Felix Fietkau <nbd@nbd.name>
|
|
Date: Mon, 17 Aug 2020 21:11:25 +0200
|
|
Subject: [PATCH] mac80211: check and refresh aggregation session in
|
|
encap offload tx
|
|
|
|
Update the last_tx timestamp to avoid tearing down the aggregation session
|
|
early. Fall back to the slow path if the session setup is still running
|
|
|
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
---
|
|
|
|
--- a/net/mac80211/tx.c
|
|
+++ b/net/mac80211/tx.c
|
|
@@ -4186,6 +4186,8 @@ static void ieee80211_8023_xmit(struct i
|
|
bool authorized = false;
|
|
bool multicast;
|
|
unsigned char *ra = ehdr->h_dest;
|
|
+ struct tid_ampdu_tx *tid_tx;
|
|
+ u8 tid;
|
|
|
|
if (IS_ERR(sta) || (sta && !sta->uploaded))
|
|
sta = NULL;
|
|
@@ -4223,6 +4225,22 @@ static void ieee80211_8023_xmit(struct i
|
|
|
|
memset(info, 0, sizeof(*info));
|
|
|
|
+ if (sta) {
|
|
+ tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK;
|
|
+ tid_tx = rcu_dereference(sta->ampdu_mlme.tid_tx[tid]);
|
|
+ if (tid_tx) {
|
|
+ if (!test_bit(HT_AGG_STATE_OPERATIONAL, &tid_tx->state)) {
|
|
+ /* fall back to non-offload slow path */
|
|
+ __ieee80211_subif_start_xmit(skb, dev, 0, 0, NULL);
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ info->flags |= IEEE80211_TX_CTL_AMPDU;
|
|
+ if (tid_tx->timeout)
|
|
+ tid_tx->last_tx = jiffies;
|
|
+ }
|
|
+ }
|
|
+
|
|
if (unlikely(!multicast && skb->sk &&
|
|
skb_shinfo(skb)->tx_flags & SKBTX_WIFI_STATUS))
|
|
info->ack_frame_id = ieee80211_store_ack_skb(local, skb,
|