diff options
| author | Linus Torvalds <[email protected]> | 2020-09-03 18:50:48 -0700 | 
|---|---|---|
| committer | Linus Torvalds <[email protected]> | 2020-09-03 18:50:48 -0700 | 
| commit | 3e8d3bdc2a757cc6be5470297947799a7df445cc (patch) | |
| tree | fcb5dd872a7d240c0d11b1800f282ffed00d0f97 /net/mac80211/status.c | |
| parent | 8381979dfa056dee4df83d1b98740b68776ae8ac (diff) | |
| parent | b61ac5bb420adce0c9b79c6b9e1c854af083e33f (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pull networking fixes from David Miller:
 1) Use netif_rx_ni() when necessary in batman-adv stack, from Jussi
    Kivilinna.
 2) Fix loss of RTT samples in rxrpc, from David Howells.
 3) Memory leak in hns_nic_dev_probe(), from Dignhao Liu.
 4) ravb module cannot be unloaded, fix from Yuusuke Ashizuka.
 5) We disable BH for too lokng in sctp_get_port_local(), add a
    cond_resched() here as well, from Xin Long.
 6) Fix memory leak in st95hf_in_send_cmd, from Dinghao Liu.
 7) Out of bound access in bpf_raw_tp_link_fill_link_info(), from
    Yonghong Song.
 8) Missing of_node_put() in mt7530 DSA driver, from Sumera
    Priyadarsini.
 9) Fix crash in bnxt_fw_reset_task(), from Michael Chan.
10) Fix geneve tunnel checksumming bug in hns3, from Yi Li.
11) Memory leak in rxkad_verify_response, from Dinghao Liu.
12) In tipc, don't use smp_processor_id() in preemptible context. From
    Tuong Lien.
13) Fix signedness issue in mlx4 memory allocation, from Shung-Hsi Yu.
14) Missing clk_disable_prepare() in gemini driver, from Dan Carpenter.
15) Fix ABI mismatch between driver and firmware in nfp, from Louis
    Peens.
* git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (110 commits)
  net/smc: fix sock refcounting in case of termination
  net/smc: reset sndbuf_desc if freed
  net/smc: set rx_off for SMCR explicitly
  net/smc: fix toleration of fake add_link messages
  tg3: Fix soft lockup when tg3_reset_task() fails.
  doc: net: dsa: Fix typo in config code sample
  net: dp83867: Fix WoL SecureOn password
  nfp: flower: fix ABI mismatch between driver and firmware
  tipc: fix shutdown() of connectionless socket
  ipv6: Fix sysctl max for fib_multipath_hash_policy
  drivers/net/wan/hdlc: Change the default of hard_header_len to 0
  net: gemini: Fix another missing clk_disable_unprepare() in probe
  net: bcmgenet: fix mask check in bcmgenet_validate_flow()
  amd-xgbe: Add support for new port mode
  net: usb: dm9601: Add USB ID of Keenetic Plus DSL
  vhost: fix typo in error message
  net: ethernet: mlx4: Fix memory allocation in mlx4_buddy_init()
  pktgen: fix error message with wrong function name
  net: ethernet: ti: am65-cpsw: fix rmii 100Mbit link mode
  cxgb4: fix thermal zone device registration
  ...
Diffstat (limited to 'net/mac80211/status.c')
| -rw-r--r-- | net/mac80211/status.c | 43 | 
1 files changed, 23 insertions, 20 deletions
| diff --git a/net/mac80211/status.c b/net/mac80211/status.c index adb1d30ce06e..0794396a7988 100644 --- a/net/mac80211/status.c +++ b/net/mac80211/status.c @@ -755,12 +755,16 @@ static void ieee80211_report_used_skb(struct ieee80211_local *local,   *  - current throughput (higher value for higher tpt)?   */  #define STA_LOST_PKT_THRESHOLD	50 +#define STA_LOST_PKT_TIME	HZ		/* 1 sec since last ACK */  #define STA_LOST_TDLS_PKT_THRESHOLD	10  #define STA_LOST_TDLS_PKT_TIME		(10*HZ) /* 10secs since last ACK */  static void ieee80211_lost_packet(struct sta_info *sta,  				  struct ieee80211_tx_info *info)  { +	unsigned long pkt_time = STA_LOST_PKT_TIME; +	unsigned int pkt_thr = STA_LOST_PKT_THRESHOLD; +  	/* If driver relies on its own algorithm for station kickout, skip  	 * mac80211 packet loss mechanism.  	 */ @@ -773,21 +777,20 @@ static void ieee80211_lost_packet(struct sta_info *sta,  		return;  	sta->status_stats.lost_packets++; -	if (!sta->sta.tdls && -	    sta->status_stats.lost_packets < STA_LOST_PKT_THRESHOLD) -		return; +	if (sta->sta.tdls) { +		pkt_time = STA_LOST_TDLS_PKT_TIME; +		pkt_thr = STA_LOST_PKT_THRESHOLD; +	}  	/*  	 * If we're in TDLS mode, make sure that all STA_LOST_TDLS_PKT_THRESHOLD  	 * of the last packets were lost, and that no ACK was received in the  	 * last STA_LOST_TDLS_PKT_TIME ms, before triggering the CQM packet-loss  	 * mechanism. +	 * For non-TDLS, use STA_LOST_PKT_THRESHOLD and STA_LOST_PKT_TIME  	 */ -	if (sta->sta.tdls && -	    (sta->status_stats.lost_packets < STA_LOST_TDLS_PKT_THRESHOLD || -	     time_before(jiffies, -			 sta->status_stats.last_tdls_pkt_time + -			 STA_LOST_TDLS_PKT_TIME))) +	if (sta->status_stats.lost_packets < pkt_thr || +	    !time_after(jiffies, sta->status_stats.last_pkt_time + pkt_time))  		return;  	cfg80211_cqm_pktloss_notify(sta->sdata->dev, sta->sta.addr, @@ -1033,9 +1036,7 @@ static void __ieee80211_tx_status(struct ieee80211_hw *hw,  					sta->status_stats.lost_packets = 0;  				/* Track when last TDLS packet was ACKed */ -				if (test_sta_flag(sta, WLAN_STA_TDLS_PEER_AUTH)) -					sta->status_stats.last_tdls_pkt_time = -						jiffies; +				sta->status_stats.last_pkt_time = jiffies;  			} else if (noack_success) {  				/* nothing to do here, do not account as lost */  			} else { @@ -1137,9 +1138,17 @@ void ieee80211_tx_status_ext(struct ieee80211_hw *hw,  	struct ieee80211_tx_info *info = status->info;  	struct ieee80211_sta *pubsta = status->sta;  	struct ieee80211_supported_band *sband; +	struct sta_info *sta;  	int retry_count;  	bool acked, noack_success; +	if (pubsta) { +		sta = container_of(pubsta, struct sta_info, sta); + +		if (status->rate) +			sta->tx_stats.last_rate_info = *status->rate; +	} +  	if (status->skb)  		return __ieee80211_tx_status(hw, status); @@ -1154,10 +1163,6 @@ void ieee80211_tx_status_ext(struct ieee80211_hw *hw,  	noack_success = !!(info->flags & IEEE80211_TX_STAT_NOACK_TRANSMITTED);  	if (pubsta) { -		struct sta_info *sta; - -		sta = container_of(pubsta, struct sta_info, sta); -  		if (!acked && !noack_success)  			sta->status_stats.retry_failed++;  		sta->status_stats.retry_count += retry_count; @@ -1168,9 +1173,8 @@ void ieee80211_tx_status_ext(struct ieee80211_hw *hw,  			if (sta->status_stats.lost_packets)  				sta->status_stats.lost_packets = 0; -			/* Track when last TDLS packet was ACKed */ -			if (test_sta_flag(sta, WLAN_STA_TDLS_PEER_AUTH)) -				sta->status_stats.last_tdls_pkt_time = jiffies; +			/* Track when last packet was ACKed */ +			sta->status_stats.last_pkt_time = jiffies;  		} else if (test_sta_flag(sta, WLAN_STA_PS_STA)) {  			return;  		} else if (noack_success) { @@ -1259,8 +1263,7 @@ void ieee80211_tx_status_8023(struct ieee80211_hw *hw,  			if (sta->status_stats.lost_packets)  				sta->status_stats.lost_packets = 0; -			if (test_sta_flag(sta, WLAN_STA_TDLS_PEER_AUTH)) -				sta->status_stats.last_tdls_pkt_time = jiffies; +			sta->status_stats.last_pkt_time = jiffies;  		} else {  			ieee80211_lost_packet(sta, info);  		} |