mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
mac80211: reduce packet loss notifications under load
During strong signal fluctuations under high throughput, few consecutive failed A-MPDU transmissions can easily trigger packet loss notification, and thus (in AP mode) client disconnection. Reduce the number of false positives by checking the A-MPDU status flag and treating a failed A-MPDU as a single packet. Signed-off-by: Felix Fietkau <nbd@openwrt.org> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
923eaf3672
commit
abd43a6a68
1 changed files with 19 additions and 6 deletions
|
@ -542,6 +542,23 @@ static void ieee80211_tx_latency_end_msrmnt(struct ieee80211_local *local,
|
||||||
*/
|
*/
|
||||||
#define STA_LOST_PKT_THRESHOLD 50
|
#define STA_LOST_PKT_THRESHOLD 50
|
||||||
|
|
||||||
|
static void ieee80211_lost_packet(struct sta_info *sta, struct sk_buff *skb)
|
||||||
|
{
|
||||||
|
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
|
||||||
|
|
||||||
|
/* This packet was aggregated but doesn't carry status info */
|
||||||
|
if ((info->flags & IEEE80211_TX_CTL_AMPDU) &&
|
||||||
|
!(info->flags & IEEE80211_TX_STAT_AMPDU))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (++sta->lost_packets < STA_LOST_PKT_THRESHOLD)
|
||||||
|
return;
|
||||||
|
|
||||||
|
cfg80211_cqm_pktloss_notify(sta->sdata->dev, sta->sta.addr,
|
||||||
|
sta->lost_packets, GFP_ATOMIC);
|
||||||
|
sta->lost_packets = 0;
|
||||||
|
}
|
||||||
|
|
||||||
void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
|
void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
struct sk_buff *skb2;
|
struct sk_buff *skb2;
|
||||||
|
@ -680,12 +697,8 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
|
||||||
if (info->flags & IEEE80211_TX_STAT_ACK) {
|
if (info->flags & IEEE80211_TX_STAT_ACK) {
|
||||||
if (sta->lost_packets)
|
if (sta->lost_packets)
|
||||||
sta->lost_packets = 0;
|
sta->lost_packets = 0;
|
||||||
} else if (++sta->lost_packets >= STA_LOST_PKT_THRESHOLD) {
|
} else {
|
||||||
cfg80211_cqm_pktloss_notify(sta->sdata->dev,
|
ieee80211_lost_packet(sta, skb);
|
||||||
sta->sta.addr,
|
|
||||||
sta->lost_packets,
|
|
||||||
GFP_ATOMIC);
|
|
||||||
sta->lost_packets = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue