mac80211: Update to version 5.8.18-1
The removed patches were applied upstream. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
		| @@ -10,10 +10,10 @@ include $(INCLUDE_DIR)/kernel.mk | |||||||
|  |  | ||||||
| PKG_NAME:=mac80211 | PKG_NAME:=mac80211 | ||||||
|  |  | ||||||
| PKG_VERSION:=5.8-1 | PKG_VERSION:=5.8.18-1 | ||||||
| PKG_RELEASE:=2 | PKG_RELEASE:=1 | ||||||
| PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v5.8/ | PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v5.8.18/ | ||||||
| PKG_HASH:=19b4174d89bf11ee221458e11f1e8dace26558498774b823051156f522d2036b | PKG_HASH:=f04a8172423c6a945fc7d9844b04f33fda9ae574e552f8f18ee3bdfcfb494563 | ||||||
|  |  | ||||||
| PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz | PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz | ||||||
| PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/backports-$(PKG_VERSION) | PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/backports-$(PKG_VERSION) | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/net/wireless/reg.c | --- a/net/wireless/reg.c | ||||||
| +++ b/net/wireless/reg.c | +++ b/net/wireless/reg.c | ||||||
| @@ -3042,6 +3042,8 @@ void regulatory_hint_country_ie(struct w | @@ -3045,6 +3045,8 @@ void regulatory_hint_country_ie(struct w | ||||||
|  	enum environment_cap env = ENVIRON_ANY; |  	enum environment_cap env = ENVIRON_ANY; | ||||||
|  	struct regulatory_request *request = NULL, *lr; |  	struct regulatory_request *request = NULL, *lr; | ||||||
|   |   | ||||||
| @@ -9,7 +9,7 @@ | |||||||
|  	/* IE len must be evenly divisible by 2 */ |  	/* IE len must be evenly divisible by 2 */ | ||||||
|  	if (country_ie_len & 0x01) |  	if (country_ie_len & 0x01) | ||||||
|  		return; |  		return; | ||||||
| @@ -3293,6 +3295,7 @@ static bool is_wiphy_all_set_reg_flag(en | @@ -3296,6 +3298,7 @@ static bool is_wiphy_all_set_reg_flag(en | ||||||
|   |   | ||||||
|  void regulatory_hint_disconnect(void) |  void regulatory_hint_disconnect(void) | ||||||
|  { |  { | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | ||||||
| +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | ||||||
| @@ -712,8 +712,36 @@ static struct wireless_dev *brcmf_cfg802 | @@ -714,8 +714,36 @@ static struct wireless_dev *brcmf_cfg802 | ||||||
|  	struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); |  	struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); | ||||||
|  	struct brcmf_pub *drvr = cfg->pub; |  	struct brcmf_pub *drvr = cfg->pub; | ||||||
|  	struct wireless_dev *wdev; |  	struct wireless_dev *wdev; | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | ||||||
| +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | ||||||
| @@ -2953,6 +2953,10 @@ brcmf_cfg80211_set_power_mgmt(struct wip | @@ -2955,6 +2955,10 @@ brcmf_cfg80211_set_power_mgmt(struct wip | ||||||
|  	 * preference in cfg struct to apply this to |  	 * preference in cfg struct to apply this to | ||||||
|  	 * FW later while initializing the dongle |  	 * FW later while initializing the dongle | ||||||
|  	 */ |  	 */ | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | ||||||
| +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | ||||||
| @@ -2905,6 +2905,63 @@ done: | @@ -2907,6 +2907,63 @@ done: | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  static int |  static int | ||||||
| @@ -64,7 +64,7 @@ | |||||||
|  brcmf_cfg80211_dump_station(struct wiphy *wiphy, struct net_device *ndev, |  brcmf_cfg80211_dump_station(struct wiphy *wiphy, struct net_device *ndev, | ||||||
|  			    int idx, u8 *mac, struct station_info *sinfo) |  			    int idx, u8 *mac, struct station_info *sinfo) | ||||||
|  { |  { | ||||||
| @@ -2994,6 +3051,7 @@ static s32 brcmf_inform_single_bss(struc | @@ -3002,6 +3059,7 @@ static s32 brcmf_inform_single_bss(struc | ||||||
|  	struct brcmu_chan ch; |  	struct brcmu_chan ch; | ||||||
|  	u16 channel; |  	u16 channel; | ||||||
|  	u32 freq; |  	u32 freq; | ||||||
| @@ -72,7 +72,7 @@ | |||||||
|  	u16 notify_capability; |  	u16 notify_capability; | ||||||
|  	u16 notify_interval; |  	u16 notify_interval; | ||||||
|  	u8 *notify_ie; |  	u8 *notify_ie; | ||||||
| @@ -3018,6 +3076,17 @@ static s32 brcmf_inform_single_bss(struc | @@ -3026,6 +3084,17 @@ static s32 brcmf_inform_single_bss(struc | ||||||
|  		band = NL80211_BAND_5GHZ; |  		band = NL80211_BAND_5GHZ; | ||||||
|   |   | ||||||
|  	freq = ieee80211_channel_to_frequency(channel, band); |  	freq = ieee80211_channel_to_frequency(channel, band); | ||||||
| @@ -90,7 +90,7 @@ | |||||||
|  	bss_data.chan = ieee80211_get_channel(wiphy, freq); |  	bss_data.chan = ieee80211_get_channel(wiphy, freq); | ||||||
|  	bss_data.scan_width = NL80211_BSS_CHAN_WIDTH_20; |  	bss_data.scan_width = NL80211_BSS_CHAN_WIDTH_20; | ||||||
|  	bss_data.boottime_ns = ktime_to_ns(ktime_get_boottime()); |  	bss_data.boottime_ns = ktime_to_ns(ktime_get_boottime()); | ||||||
| @@ -5470,6 +5539,7 @@ static struct cfg80211_ops brcmf_cfg8021 | @@ -5478,6 +5547,7 @@ static struct cfg80211_ops brcmf_cfg8021 | ||||||
|  	.leave_ibss = brcmf_cfg80211_leave_ibss, |  	.leave_ibss = brcmf_cfg80211_leave_ibss, | ||||||
|  	.get_station = brcmf_cfg80211_get_station, |  	.get_station = brcmf_cfg80211_get_station, | ||||||
|  	.dump_station = brcmf_cfg80211_dump_station, |  	.dump_station = brcmf_cfg80211_dump_station, | ||||||
|   | |||||||
| @@ -9,7 +9,7 @@ | |||||||
|  	depends on m |  	depends on m | ||||||
|  	default n |  	default n | ||||||
|  	help |  	help | ||||||
| @@ -197,18 +197,18 @@ config LIB80211 | @@ -197,19 +197,19 @@ config LIB80211 | ||||||
|  	  Drivers should select this themselves if needed. |  	  Drivers should select this themselves if needed. | ||||||
|   |   | ||||||
|  config LIB80211_CRYPT_WEP |  config LIB80211_CRYPT_WEP | ||||||
| @@ -22,6 +22,7 @@ | |||||||
| -	tristate | -	tristate | ||||||
| +	tristate "lib80211 CCMP support" | +	tristate "lib80211 CCMP support" | ||||||
|  	depends on m |  	depends on m | ||||||
|  |  	depends on CRYPTO | ||||||
|  	depends on CRYPTO_AES |  	depends on CRYPTO_AES | ||||||
|  	depends on CRYPTO_CCM |  	depends on CRYPTO_CCM | ||||||
|   |   | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ Used for AP+STA support in OpenWrt - preserve AP mode keys across STA reconnects | |||||||
|  |  | ||||||
| --- a/net/mac80211/cfg.c | --- a/net/mac80211/cfg.c | ||||||
| +++ b/net/mac80211/cfg.c | +++ b/net/mac80211/cfg.c | ||||||
| @@ -1197,7 +1197,6 @@ static int ieee80211_stop_ap(struct wiph | @@ -1198,7 +1198,6 @@ static int ieee80211_stop_ap(struct wiph | ||||||
|  	sdata->vif.bss_conf.ftmr_params = NULL; |  	sdata->vif.bss_conf.ftmr_params = NULL; | ||||||
|   |   | ||||||
|  	__sta_info_flush(sdata, true); |  	__sta_info_flush(sdata, true); | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/net/mac80211/cfg.c | --- a/net/mac80211/cfg.c | ||||||
| +++ b/net/mac80211/cfg.c | +++ b/net/mac80211/cfg.c | ||||||
| @@ -2345,7 +2345,7 @@ static int ieee80211_scan(struct wiphy * | @@ -2346,7 +2346,7 @@ static int ieee80211_scan(struct wiphy * | ||||||
|  		 * the  frames sent while scanning on other channel will be |  		 * the  frames sent while scanning on other channel will be | ||||||
|  		 * lost) |  		 * lost) | ||||||
|  		 */ |  		 */ | ||||||
|   | |||||||
| @@ -36,7 +36,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata, |  void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata, | ||||||
| --- a/net/mac80211/status.c | --- a/net/mac80211/status.c | ||||||
| +++ b/net/mac80211/status.c | +++ b/net/mac80211/status.c | ||||||
| @@ -843,6 +843,11 @@ void ieee80211_tx_monitor(struct ieee802 | @@ -846,6 +846,11 @@ void ieee80211_tx_monitor(struct ieee802 | ||||||
|  	struct net_device *prev_dev = NULL; |  	struct net_device *prev_dev = NULL; | ||||||
|  	int rtap_len; |  	int rtap_len; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -58,7 +58,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	struct ieee80211_sub_if_data *sdata; |  	struct ieee80211_sub_if_data *sdata; | ||||||
| --- a/net/mac80211/rx.c | --- a/net/mac80211/rx.c | ||||||
| +++ b/net/mac80211/rx.c | +++ b/net/mac80211/rx.c | ||||||
| @@ -2578,8 +2578,8 @@ static void ieee80211_deliver_skb_to_loc | @@ -2579,8 +2579,8 @@ static void ieee80211_deliver_skb_to_loc | ||||||
|  		memset(skb->cb, 0, sizeof(skb->cb)); |  		memset(skb->cb, 0, sizeof(skb->cb)); | ||||||
|   |   | ||||||
|  		/* deliver to local stack */ |  		/* deliver to local stack */ | ||||||
| @@ -69,7 +69,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  		else |  		else | ||||||
|  			netif_receive_skb(skb); |  			netif_receive_skb(skb); | ||||||
|  	} |  	} | ||||||
| @@ -3869,7 +3869,6 @@ void ieee80211_release_reorder_timeout(s | @@ -3870,7 +3870,6 @@ void ieee80211_release_reorder_timeout(s | ||||||
|  		/* This is OK -- must be QoS data frame */ |  		/* This is OK -- must be QoS data frame */ | ||||||
|  		.security_idx = tid, |  		.security_idx = tid, | ||||||
|  		.seqno_idx = tid, |  		.seqno_idx = tid, | ||||||
| @@ -77,7 +77,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	}; |  	}; | ||||||
|  	struct tid_ampdu_rx *tid_agg_rx; |  	struct tid_ampdu_rx *tid_agg_rx; | ||||||
|   |   | ||||||
| @@ -4479,8 +4478,8 @@ static bool ieee80211_invoke_fast_rx(str | @@ -4480,8 +4479,8 @@ static bool ieee80211_invoke_fast_rx(str | ||||||
|  	/* deliver to local stack */ |  	/* deliver to local stack */ | ||||||
|  	skb->protocol = eth_type_trans(skb, fast_rx->dev); |  	skb->protocol = eth_type_trans(skb, fast_rx->dev); | ||||||
|  	memset(skb->cb, 0, sizeof(skb->cb)); |  	memset(skb->cb, 0, sizeof(skb->cb)); | ||||||
| @@ -88,7 +88,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	else |  	else | ||||||
|  		netif_receive_skb(skb); |  		netif_receive_skb(skb); | ||||||
|   |   | ||||||
| @@ -4547,7 +4546,7 @@ static bool ieee80211_prepare_and_rx_han | @@ -4548,7 +4547,7 @@ static bool ieee80211_prepare_and_rx_han | ||||||
|  static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw, |  static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw, | ||||||
|  					 struct ieee80211_sta *pubsta, |  					 struct ieee80211_sta *pubsta, | ||||||
|  					 struct sk_buff *skb, |  					 struct sk_buff *skb, | ||||||
| @@ -97,7 +97,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  { |  { | ||||||
|  	struct ieee80211_local *local = hw_to_local(hw); |  	struct ieee80211_local *local = hw_to_local(hw); | ||||||
|  	struct ieee80211_sub_if_data *sdata; |  	struct ieee80211_sub_if_data *sdata; | ||||||
| @@ -4562,7 +4561,7 @@ static void __ieee80211_rx_handle_packet | @@ -4563,7 +4562,7 @@ static void __ieee80211_rx_handle_packet | ||||||
|  	memset(&rx, 0, sizeof(rx)); |  	memset(&rx, 0, sizeof(rx)); | ||||||
|  	rx.skb = skb; |  	rx.skb = skb; | ||||||
|  	rx.local = local; |  	rx.local = local; | ||||||
| @@ -106,7 +106,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|   |   | ||||||
|  	if (ieee80211_is_data(fc) || ieee80211_is_mgmt(fc)) |  	if (ieee80211_is_data(fc) || ieee80211_is_mgmt(fc)) | ||||||
|  		I802_DEBUG_INC(local->dot11ReceivedFragmentCount); |  		I802_DEBUG_INC(local->dot11ReceivedFragmentCount); | ||||||
| @@ -4670,8 +4669,8 @@ static void __ieee80211_rx_handle_packet | @@ -4671,8 +4670,8 @@ static void __ieee80211_rx_handle_packet | ||||||
|   * This is the receive path handler. It is called by a low level driver when an |   * This is the receive path handler. It is called by a low level driver when an | ||||||
|   * 802.11 MPDU is received from the hardware. |   * 802.11 MPDU is received from the hardware. | ||||||
|   */ |   */ | ||||||
| @@ -117,7 +117,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  { |  { | ||||||
|  	struct ieee80211_local *local = hw_to_local(hw); |  	struct ieee80211_local *local = hw_to_local(hw); | ||||||
|  	struct ieee80211_rate *rate = NULL; |  	struct ieee80211_rate *rate = NULL; | ||||||
| @@ -4763,36 +4762,53 @@ void ieee80211_rx_napi(struct ieee80211_ | @@ -4764,36 +4763,53 @@ void ieee80211_rx_napi(struct ieee80211_ | ||||||
|  	status->rx_flags = 0; |  	status->rx_flags = 0; | ||||||
|   |   | ||||||
|  	/* |  	/* | ||||||
|   | |||||||
| @@ -1,116 +0,0 @@ | |||||||
| From: Felix Fietkau <nbd@nbd.name> |  | ||||||
| Date: Sat, 8 Aug 2020 19:20:02 +0200 |  | ||||||
| Subject: [PATCH] mac80211: reduce packet loss event false positives |  | ||||||
|  |  | ||||||
| When running a large number of packets per second with a high data rate |  | ||||||
| and long A-MPDUs, the packet loss threshold can be reached very quickly |  | ||||||
| when the link conditions change. This frequently shows up as spurious |  | ||||||
| disconnects. |  | ||||||
| Mitigate false positives by using a similar logic for regular stations |  | ||||||
| as the one being used for TDLS, though with a more aggressive timeout. |  | ||||||
| Packet loss events are only reported if no ACK was received for a second. |  | ||||||
|  |  | ||||||
| Signed-off-by: Felix Fietkau <nbd@nbd.name> |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| --- a/net/mac80211/sta_info.h |  | ||||||
| +++ b/net/mac80211/sta_info.h |  | ||||||
| @@ -522,7 +522,7 @@ struct ieee80211_sta_rx_stats { |  | ||||||
|   * @status_stats.retry_failed: # of frames that failed after retry |  | ||||||
|   * @status_stats.retry_count: # of retries attempted |  | ||||||
|   * @status_stats.lost_packets: # of lost packets |  | ||||||
| - * @status_stats.last_tdls_pkt_time: timestamp of last TDLS packet |  | ||||||
| + * @status_stats.last_pkt_time: timestamp of last ACKed packet |  | ||||||
|   * @status_stats.msdu_retries: # of MSDU retries |  | ||||||
|   * @status_stats.msdu_failed: # of failed MSDUs |  | ||||||
|   * @status_stats.last_ack: last ack timestamp (jiffies) |  | ||||||
| @@ -595,7 +595,7 @@ struct sta_info { |  | ||||||
|  		unsigned long filtered; |  | ||||||
|  		unsigned long retry_failed, retry_count; |  | ||||||
|  		unsigned int lost_packets; |  | ||||||
| -		unsigned long last_tdls_pkt_time; |  | ||||||
| +		unsigned long last_pkt_time; |  | ||||||
|  		u64 msdu_retries[IEEE80211_NUM_TIDS + 1]; |  | ||||||
|  		u64 msdu_failed[IEEE80211_NUM_TIDS + 1]; |  | ||||||
|  		unsigned long last_ack; |  | ||||||
| --- a/net/mac80211/status.c |  | ||||||
| +++ b/net/mac80211/status.c |  | ||||||
| @@ -757,12 +757,16 @@ static void ieee80211_report_used_skb(st |  | ||||||
|   *  - 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. |  | ||||||
|  	 */ |  | ||||||
| @@ -775,21 +779,20 @@ static void ieee80211_lost_packet(struct |  | ||||||
|  		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, |  | ||||||
| @@ -1042,9 +1045,7 @@ static void __ieee80211_tx_status(struct |  | ||||||
|  					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 { |  | ||||||
| @@ -1177,9 +1178,8 @@ void ieee80211_tx_status_ext(struct ieee |  | ||||||
|  			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) { |  | ||||||
| @@ -1268,8 +1268,7 @@ void ieee80211_tx_status_8023(struct iee |  | ||||||
|  			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); |  | ||||||
|  		} |  | ||||||
| @@ -55,12 +55,12 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| +			agg_shift = 3; | +			agg_shift = 3; | ||||||
| +		else | +		else | ||||||
| +			agg_shift = 4; | +			agg_shift = 4; | ||||||
|   | + | ||||||
| -		return airtime; |  | ||||||
| +		duration *= len; | +		duration *= len; | ||||||
| +		duration /= AVG_PKT_SIZE; | +		duration /= AVG_PKT_SIZE; | ||||||
| +		duration /= 1024; | +		duration /= 1024; | ||||||
| + |   | ||||||
|  | -		return airtime; | ||||||
| +		return duration + (overhead >> agg_shift); | +		return duration + (overhead >> agg_shift); | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
|   | |||||||
| @@ -67,12 +67,12 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  			if (!acked && !noack_success) |  			if (!acked && !noack_success) | ||||||
| -				sta->status_stats.retry_failed++; | -				sta->status_stats.retry_failed++; | ||||||
| -			sta->status_stats.retry_count += retry_count; | -			sta->status_stats.retry_count += retry_count; | ||||||
| - | +				sta->status_stats.msdu_failed[tid]++; | ||||||
|  |   | ||||||
| -			if (ieee80211_is_data_present(fc)) { | -			if (ieee80211_is_data_present(fc)) { | ||||||
| -				if (!acked && !noack_success) | -				if (!acked && !noack_success) | ||||||
| -					sta->status_stats.msdu_failed[tid]++; | -					sta->status_stats.msdu_failed[tid]++; | ||||||
| +				sta->status_stats.msdu_failed[tid]++; | - | ||||||
|   |  | ||||||
| -				sta->status_stats.msdu_retries[tid] += | -				sta->status_stats.msdu_retries[tid] += | ||||||
| -					retry_count; | -					retry_count; | ||||||
| -			} | -			} | ||||||
|   | |||||||
| @@ -112,7 +112,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|   |   | ||||||
| --- a/net/mac80211/rx.c | --- a/net/mac80211/rx.c | ||||||
| +++ b/net/mac80211/rx.c | +++ b/net/mac80211/rx.c | ||||||
| @@ -1811,9 +1811,6 @@ ieee80211_rx_h_sta_process(struct ieee80 | @@ -1812,9 +1812,6 @@ ieee80211_rx_h_sta_process(struct ieee80 | ||||||
|  			sta->rx_stats.last_rate = sta_stats_encode_rate(status); |  			sta->rx_stats.last_rate = sta_stats_encode_rate(status); | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| @@ -122,7 +122,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	sta->rx_stats.fragments++; |  	sta->rx_stats.fragments++; | ||||||
|   |   | ||||||
|  	u64_stats_update_begin(&rx->sta->rx_stats.syncp); |  	u64_stats_update_begin(&rx->sta->rx_stats.syncp); | ||||||
| @@ -4148,7 +4145,6 @@ void ieee80211_check_fast_rx(struct sta_ | @@ -4149,7 +4146,6 @@ void ieee80211_check_fast_rx(struct sta_ | ||||||
|  			fastrx.sa_offs = offsetof(struct ieee80211_hdr, addr2); |  			fastrx.sa_offs = offsetof(struct ieee80211_hdr, addr2); | ||||||
|  			fastrx.expected_ds_bits = 0; |  			fastrx.expected_ds_bits = 0; | ||||||
|  		} else { |  		} else { | ||||||
| @@ -130,7 +130,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  			fastrx.da_offs = offsetof(struct ieee80211_hdr, addr1); |  			fastrx.da_offs = offsetof(struct ieee80211_hdr, addr1); | ||||||
|  			fastrx.sa_offs = offsetof(struct ieee80211_hdr, addr3); |  			fastrx.sa_offs = offsetof(struct ieee80211_hdr, addr3); | ||||||
|  			fastrx.expected_ds_bits = |  			fastrx.expected_ds_bits = | ||||||
| @@ -4378,11 +4374,6 @@ static bool ieee80211_invoke_fast_rx(str | @@ -4379,11 +4375,6 @@ static bool ieee80211_invoke_fast_rx(str | ||||||
|  	    pskb_trim(skb, skb->len - fast_rx->icv_len)) |  	    pskb_trim(skb, skb->len - fast_rx->icv_len)) | ||||||
|  		goto drop; |  		goto drop; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -129,7 +129,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  } |  } | ||||||
| --- a/net/mac80211/rx.c | --- a/net/mac80211/rx.c | ||||||
| +++ b/net/mac80211/rx.c | +++ b/net/mac80211/rx.c | ||||||
| @@ -2896,7 +2896,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80 | @@ -2897,7 +2897,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80 | ||||||
|  	fwd_hdr->frame_control &= ~cpu_to_le16(IEEE80211_FCTL_RETRY); |  	fwd_hdr->frame_control &= ~cpu_to_le16(IEEE80211_FCTL_RETRY); | ||||||
|  	info = IEEE80211_SKB_CB(fwd_skb); |  	info = IEEE80211_SKB_CB(fwd_skb); | ||||||
|  	memset(info, 0, sizeof(*info)); |  	memset(info, 0, sizeof(*info)); | ||||||
|   | |||||||
| @@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  /** |  /** | ||||||
| --- a/net/mac80211/cfg.c | --- a/net/mac80211/cfg.c | ||||||
| +++ b/net/mac80211/cfg.c | +++ b/net/mac80211/cfg.c | ||||||
| @@ -1693,6 +1693,7 @@ static int ieee80211_change_station(stru | @@ -1694,6 +1694,7 @@ static int ieee80211_change_station(stru | ||||||
|   |   | ||||||
|  			rcu_assign_pointer(vlansdata->u.vlan.sta, sta); |  			rcu_assign_pointer(vlansdata->u.vlan.sta, sta); | ||||||
|  			__ieee80211_check_fast_rx_iface(vlansdata); |  			__ieee80211_check_fast_rx_iface(vlansdata); | ||||||
|   | |||||||
| @@ -1,34 +0,0 @@ | |||||||
| From: Felix Fietkau <nbd@nbd.name> |  | ||||||
| Date: Thu, 17 Sep 2020 12:07:19 +0200 |  | ||||||
| Subject: [PATCH] mac80211: do not allow bigger VHT MPDUs than the hardware |  | ||||||
|  supports |  | ||||||
|  |  | ||||||
| Limit maximum VHT MPDU size by local capability |  | ||||||
|  |  | ||||||
| Signed-off-by: Felix Fietkau <nbd@nbd.name> |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| --- a/net/mac80211/vht.c |  | ||||||
| +++ b/net/mac80211/vht.c |  | ||||||
| @@ -168,10 +168,7 @@ ieee80211_vht_cap_ie_to_sta_vht_cap(stru |  | ||||||
|  	/* take some capabilities as-is */ |  | ||||||
|  	cap_info = le32_to_cpu(vht_cap_ie->vht_cap_info); |  | ||||||
|  	vht_cap->cap = cap_info; |  | ||||||
| -	vht_cap->cap &= IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_3895 | |  | ||||||
| -			IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_7991 | |  | ||||||
| -			IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454 | |  | ||||||
| -			IEEE80211_VHT_CAP_RXLDPC | |  | ||||||
| +	vht_cap->cap &= IEEE80211_VHT_CAP_RXLDPC | |  | ||||||
|  			IEEE80211_VHT_CAP_VHT_TXOP_PS | |  | ||||||
|  			IEEE80211_VHT_CAP_HTC_VHT | |  | ||||||
|  			IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK | |  | ||||||
| @@ -180,6 +177,9 @@ ieee80211_vht_cap_ie_to_sta_vht_cap(stru |  | ||||||
|  			IEEE80211_VHT_CAP_RX_ANTENNA_PATTERN | |  | ||||||
|  			IEEE80211_VHT_CAP_TX_ANTENNA_PATTERN; |  | ||||||
|   |  | ||||||
| +	vht_cap->cap |= min_t(u32, cap_info & IEEE80211_VHT_CAP_MAX_MPDU_MASK, |  | ||||||
| +			      own_cap.cap & IEEE80211_VHT_CAP_MAX_MPDU_MASK); |  | ||||||
| + |  | ||||||
|  	/* and some based on our own capabilities */ |  | ||||||
|  	switch (own_cap.cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK) { |  | ||||||
|  	case IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ: |  | ||||||
| @@ -1,31 +0,0 @@ | |||||||
| From 5981fe5b0529ba25d95f37d7faa434183ad618c5 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Johannes Berg <johannes.berg@intel.com> |  | ||||||
| Date: Mon, 3 Aug 2020 11:02:10 +0200 |  | ||||||
| Subject: [PATCH] mac80211: fix misplaced while instead of if |  | ||||||
|  |  | ||||||
| This never was intended to be a 'while' loop, it should've |  | ||||||
| just been an 'if' instead of 'while'. Fix this. |  | ||||||
|  |  | ||||||
| I noticed this while applying another patch from Ben that |  | ||||||
| intended to fix a busy loop at this spot. |  | ||||||
|  |  | ||||||
| Cc: stable@vger.kernel.org |  | ||||||
| Fixes: b16798f5b907 ("mac80211: mark station unauthorized before key removal") |  | ||||||
| Reported-by: Ben Greear <greearb@candelatech.com> |  | ||||||
| Link: https://lore.kernel.org/r/20200803110209.253009ae41ff.I3522aad099392b31d5cf2dcca34cbac7e5832dde@changeid |  | ||||||
| Signed-off-by: Johannes Berg <johannes.berg@intel.com> |  | ||||||
| --- |  | ||||||
|  net/mac80211/sta_info.c | 2 +- |  | ||||||
|  1 file changed, 1 insertion(+), 1 deletion(-) |  | ||||||
|  |  | ||||||
| --- a/net/mac80211/sta_info.c |  | ||||||
| +++ b/net/mac80211/sta_info.c |  | ||||||
| @@ -1051,7 +1051,7 @@ static void __sta_info_destroy_part2(str |  | ||||||
|  	might_sleep(); |  | ||||||
|  	lockdep_assert_held(&local->sta_mtx); |  | ||||||
|   |  | ||||||
| -	while (sta->sta_state == IEEE80211_STA_AUTHORIZED) { |  | ||||||
| +	if (sta->sta_state == IEEE80211_STA_AUTHORIZED) { |  | ||||||
|  		ret = sta_info_move_state(sta, IEEE80211_STA_ASSOC); |  | ||||||
|  		WARN_ON_ONCE(ret); |  | ||||||
|  	} |  | ||||||
| @@ -57,7 +57,7 @@ | |||||||
|  	__NL80211_ATTR_AFTER_LAST, |  	__NL80211_ATTR_AFTER_LAST, | ||||||
| --- a/net/mac80211/cfg.c | --- a/net/mac80211/cfg.c | ||||||
| +++ b/net/mac80211/cfg.c | +++ b/net/mac80211/cfg.c | ||||||
| @@ -2611,6 +2611,19 @@ static int ieee80211_get_tx_power(struct | @@ -2612,6 +2612,19 @@ static int ieee80211_get_tx_power(struct | ||||||
|  	return 0; |  	return 0; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -77,7 +77,7 @@ | |||||||
|  static int ieee80211_set_wds_peer(struct wiphy *wiphy, struct net_device *dev, |  static int ieee80211_set_wds_peer(struct wiphy *wiphy, struct net_device *dev, | ||||||
|  				  const u8 *addr) |  				  const u8 *addr) | ||||||
|  { |  { | ||||||
| @@ -4041,6 +4054,7 @@ const struct cfg80211_ops mac80211_confi | @@ -4042,6 +4055,7 @@ const struct cfg80211_ops mac80211_confi | ||||||
|  	.set_wiphy_params = ieee80211_set_wiphy_params, |  	.set_wiphy_params = ieee80211_set_wiphy_params, | ||||||
|  	.set_tx_power = ieee80211_set_tx_power, |  	.set_tx_power = ieee80211_set_tx_power, | ||||||
|  	.get_tx_power = ieee80211_get_tx_power, |  	.get_tx_power = ieee80211_get_tx_power, | ||||||
| @@ -137,7 +137,7 @@ | |||||||
|  }; |  }; | ||||||
|   |   | ||||||
|  /* policy for the key attributes */ |  /* policy for the key attributes */ | ||||||
| @@ -3136,6 +3137,20 @@ static int nl80211_set_wiphy(struct sk_b | @@ -3139,6 +3140,20 @@ static int nl80211_set_wiphy(struct sk_b | ||||||
|  		if (result) |  		if (result) | ||||||
|  			return result; |  			return result; | ||||||
|  	} |  	} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Hauke Mehrtens
					Hauke Mehrtens