
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>
71 lines
2.4 KiB
Diff
71 lines
2.4 KiB
Diff
From: Felix Fietkau <nbd@nbd.name>
|
|
Date: Mon, 21 Sep 2020 17:43:06 +0200
|
|
Subject: [PATCH] mac80211: fix regression in sta connection monitor
|
|
|
|
When a frame was acked and probe frames were sent, the connection monitoring
|
|
needs to be reset, otherwise it will keep probing until the connection is
|
|
considered dead, even though frames have been acked in the mean time.
|
|
|
|
Fixes: 9abf4e49830d ("mac80211: optimize station connection monitor")
|
|
Reported-by: Georgi Valkov <gvalkov@abv.bg>
|
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
---
|
|
|
|
--- a/net/mac80211/status.c
|
|
+++ b/net/mac80211/status.c
|
|
@@ -989,10 +989,6 @@ static void __ieee80211_tx_status(struct
|
|
if (!(info->flags & IEEE80211_TX_CTL_INJECTED) && acked)
|
|
ieee80211_frame_acked(sta, skb);
|
|
|
|
- if ((sta->sdata->vif.type == NL80211_IFTYPE_STATION) &&
|
|
- ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS))
|
|
- ieee80211_sta_tx_notify(sta->sdata, (void *) skb->data,
|
|
- acked, info->status.tx_time);
|
|
}
|
|
|
|
/* SNMP counters
|
|
@@ -1127,11 +1123,18 @@ void ieee80211_tx_status_ext(struct ieee
|
|
noack_success = !!(info->flags & IEEE80211_TX_STAT_NOACK_TRANSMITTED);
|
|
|
|
if (pubsta) {
|
|
+ struct ieee80211_sub_if_data *sdata = sta->sdata;
|
|
+
|
|
if (!acked && !noack_success)
|
|
sta->status_stats.retry_failed++;
|
|
sta->status_stats.retry_count += retry_count;
|
|
|
|
if (ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) {
|
|
+ if (sdata->vif.type == NL80211_IFTYPE_STATION &&
|
|
+ skb && !(info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP))
|
|
+ ieee80211_sta_tx_notify(sdata, (void *) skb->data,
|
|
+ acked, info->status.tx_time);
|
|
+
|
|
if (acked) {
|
|
sta->status_stats.last_ack = jiffies;
|
|
|
|
@@ -1141,6 +1144,11 @@ void ieee80211_tx_status_ext(struct ieee
|
|
/* Track when last packet was ACKed */
|
|
sta->status_stats.last_pkt_time = jiffies;
|
|
|
|
+ /* Reset connection monitor */
|
|
+ if (sdata->vif.type == NL80211_IFTYPE_STATION &&
|
|
+ unlikely(sdata->u.mgd.probe_send_count > 0))
|
|
+ sdata->u.mgd.probe_send_count = 0;
|
|
+
|
|
if (info->status.is_valid_ack_signal) {
|
|
sta->status_stats.last_ack_signal =
|
|
(s8)info->status.ack_signal;
|
|
--- a/net/mac80211/mlme.c
|
|
+++ b/net/mac80211/mlme.c
|
|
@@ -2508,7 +2508,9 @@ void ieee80211_sta_tx_notify(struct ieee
|
|
!sdata->u.mgd.probe_send_count)
|
|
return;
|
|
|
|
- if (!ack)
|
|
+ if (ack)
|
|
+ sdata->u.mgd.probe_send_count = 0;
|
|
+ else
|
|
sdata->u.mgd.nullfunc_failed = true;
|
|
ieee80211_queue_work(&sdata->local->hw, &sdata->work);
|
|
}
|