mirror of
https://github.com/openwrt/openwrt.git
synced 2025-02-01 16:58:22 +00:00
mac80211: Update to version 5.10.16-1
The removed patches were applied upstream. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> Signed-off-by: maurerr <mariusd84@gmail.com>
This commit is contained in:
parent
5c9a6a30d7
commit
fb8655124a
@ -10,10 +10,10 @@ include $(INCLUDE_DIR)/kernel.mk
|
|||||||
|
|
||||||
PKG_NAME:=mac80211
|
PKG_NAME:=mac80211
|
||||||
|
|
||||||
PKG_VERSION:=5.10-rc6-1
|
PKG_VERSION:=5.10.16-1
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v5.10-rc6/
|
PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v5.10.16/
|
||||||
PKG_HASH:=24c1e84dc1e7bb52d4f67ce481c242f29212a4ceb7833af30e3c279a3f710832
|
PKG_HASH:=12856db780c5023edc47e2d18486eb3346bb7c82f1f2fc48deb3b163142f7d2d
|
||||||
|
|
||||||
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)
|
||||||
|
@ -456,7 +456,7 @@ v13:
|
|||||||
{
|
{
|
||||||
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.c
|
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.c
|
||||||
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
|
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
|
||||||
@@ -4583,6 +4583,8 @@ static const struct wmi_ops wmi_tlv_ops
|
@@ -4585,6 +4585,8 @@ static const struct wmi_ops wmi_tlv_ops
|
||||||
.gen_echo = ath10k_wmi_tlv_op_gen_echo,
|
.gen_echo = ath10k_wmi_tlv_op_gen_echo,
|
||||||
.gen_vdev_spectral_conf = ath10k_wmi_tlv_op_gen_vdev_spectral_conf,
|
.gen_vdev_spectral_conf = ath10k_wmi_tlv_op_gen_vdev_spectral_conf,
|
||||||
.gen_vdev_spectral_enable = ath10k_wmi_tlv_op_gen_vdev_spectral_enable,
|
.gen_vdev_spectral_enable = ath10k_wmi_tlv_op_gen_vdev_spectral_enable,
|
||||||
@ -467,7 +467,7 @@ v13:
|
|||||||
static const struct wmi_peer_flags_map wmi_tlv_peer_flags_map = {
|
static const struct wmi_peer_flags_map wmi_tlv_peer_flags_map = {
|
||||||
--- a/drivers/net/wireless/ath/ath10k/wmi.c
|
--- a/drivers/net/wireless/ath/ath10k/wmi.c
|
||||||
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
|
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
|
||||||
@@ -7463,6 +7463,49 @@ ath10k_wmi_op_gen_peer_set_param(struct
|
@@ -7468,6 +7468,49 @@ ath10k_wmi_op_gen_peer_set_param(struct
|
||||||
return skb;
|
return skb;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -517,7 +517,7 @@ v13:
|
|||||||
static struct sk_buff *
|
static struct sk_buff *
|
||||||
ath10k_wmi_op_gen_set_psmode(struct ath10k *ar, u32 vdev_id,
|
ath10k_wmi_op_gen_set_psmode(struct ath10k *ar, u32 vdev_id,
|
||||||
enum wmi_sta_ps_mode psmode)
|
enum wmi_sta_ps_mode psmode)
|
||||||
@@ -9151,6 +9194,9 @@ static const struct wmi_ops wmi_ops = {
|
@@ -9156,6 +9199,9 @@ static const struct wmi_ops wmi_ops = {
|
||||||
.fw_stats_fill = ath10k_wmi_main_op_fw_stats_fill,
|
.fw_stats_fill = ath10k_wmi_main_op_fw_stats_fill,
|
||||||
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
|
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
|
||||||
.gen_echo = ath10k_wmi_op_gen_echo,
|
.gen_echo = ath10k_wmi_op_gen_echo,
|
||||||
@ -527,7 +527,7 @@ v13:
|
|||||||
/* .gen_bcn_tmpl not implemented */
|
/* .gen_bcn_tmpl not implemented */
|
||||||
/* .gen_prb_tmpl not implemented */
|
/* .gen_prb_tmpl not implemented */
|
||||||
/* .gen_p2p_go_bcn_ie not implemented */
|
/* .gen_p2p_go_bcn_ie not implemented */
|
||||||
@@ -9221,6 +9267,8 @@ static const struct wmi_ops wmi_10_1_ops
|
@@ -9226,6 +9272,8 @@ static const struct wmi_ops wmi_10_1_ops
|
||||||
.fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill,
|
.fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill,
|
||||||
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
|
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
|
||||||
.gen_echo = ath10k_wmi_op_gen_echo,
|
.gen_echo = ath10k_wmi_op_gen_echo,
|
||||||
@ -536,7 +536,7 @@ v13:
|
|||||||
/* .gen_bcn_tmpl not implemented */
|
/* .gen_bcn_tmpl not implemented */
|
||||||
/* .gen_prb_tmpl not implemented */
|
/* .gen_prb_tmpl not implemented */
|
||||||
/* .gen_p2p_go_bcn_ie not implemented */
|
/* .gen_p2p_go_bcn_ie not implemented */
|
||||||
@@ -9293,6 +9341,8 @@ static const struct wmi_ops wmi_10_2_ops
|
@@ -9298,6 +9346,8 @@ static const struct wmi_ops wmi_10_2_ops
|
||||||
.gen_delba_send = ath10k_wmi_op_gen_delba_send,
|
.gen_delba_send = ath10k_wmi_op_gen_delba_send,
|
||||||
.fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill,
|
.fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill,
|
||||||
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
|
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
|
||||||
@ -545,7 +545,7 @@ v13:
|
|||||||
/* .gen_pdev_enable_adaptive_cca not implemented */
|
/* .gen_pdev_enable_adaptive_cca not implemented */
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -9364,6 +9414,8 @@ static const struct wmi_ops wmi_10_2_4_o
|
@@ -9369,6 +9419,8 @@ static const struct wmi_ops wmi_10_2_4_o
|
||||||
ath10k_wmi_op_gen_pdev_enable_adaptive_cca,
|
ath10k_wmi_op_gen_pdev_enable_adaptive_cca,
|
||||||
.get_vdev_subtype = ath10k_wmi_10_2_4_op_get_vdev_subtype,
|
.get_vdev_subtype = ath10k_wmi_10_2_4_op_get_vdev_subtype,
|
||||||
.gen_bb_timing = ath10k_wmi_10_2_4_op_gen_bb_timing,
|
.gen_bb_timing = ath10k_wmi_10_2_4_op_gen_bb_timing,
|
||||||
@ -554,7 +554,7 @@ v13:
|
|||||||
/* .gen_bcn_tmpl not implemented */
|
/* .gen_bcn_tmpl not implemented */
|
||||||
/* .gen_prb_tmpl not implemented */
|
/* .gen_prb_tmpl not implemented */
|
||||||
/* .gen_p2p_go_bcn_ie not implemented */
|
/* .gen_p2p_go_bcn_ie not implemented */
|
||||||
@@ -9445,6 +9497,8 @@ static const struct wmi_ops wmi_10_4_ops
|
@@ -9450,6 +9502,8 @@ static const struct wmi_ops wmi_10_4_ops
|
||||||
.gen_pdev_bss_chan_info_req = ath10k_wmi_10_2_op_gen_pdev_bss_chan_info,
|
.gen_pdev_bss_chan_info_req = ath10k_wmi_10_2_op_gen_pdev_bss_chan_info,
|
||||||
.gen_echo = ath10k_wmi_op_gen_echo,
|
.gen_echo = ath10k_wmi_op_gen_echo,
|
||||||
.gen_pdev_get_tpc_config = ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config,
|
.gen_pdev_get_tpc_config = ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config,
|
||||||
|
@ -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
|
||||||
@@ -2957,6 +2957,10 @@ brcmf_cfg80211_set_power_mgmt(struct wip
|
@@ -2958,6 +2958,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
|
||||||
@@ -2909,6 +2909,63 @@ done:
|
@@ -2910,6 +2910,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)
|
||||||
{
|
{
|
||||||
@@ -3004,6 +3061,7 @@ static s32 brcmf_inform_single_bss(struc
|
@@ -3005,6 +3062,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;
|
||||||
@@ -3028,6 +3086,17 @@ static s32 brcmf_inform_single_bss(struc
|
@@ -3029,6 +3087,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());
|
||||||
@@ -5514,6 +5583,7 @@ static struct cfg80211_ops brcmf_cfg8021
|
@@ -5515,6 +5584,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,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/net/wireless/Kconfig
|
--- a/net/wireless/Kconfig
|
||||||
+++ b/net/wireless/Kconfig
|
+++ b/net/wireless/Kconfig
|
||||||
@@ -187,7 +187,7 @@ config CFG80211_WEXT_EXPORT
|
@@ -188,7 +188,7 @@ config CFG80211_WEXT_EXPORT
|
||||||
endif # CFG80211
|
endif # CFG80211
|
||||||
|
|
||||||
config LIB80211
|
config LIB80211
|
||||||
@ -9,7 +9,7 @@
|
|||||||
depends on m
|
depends on m
|
||||||
default n
|
default n
|
||||||
help
|
help
|
||||||
@@ -197,19 +197,19 @@ config LIB80211
|
@@ -198,19 +198,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
|
||||||
|
@ -1,54 +0,0 @@
|
|||||||
From: Felix Fietkau <nbd@nbd.name>
|
|
||||||
Date: Wed, 16 Dec 2020 21:23:24 +0100
|
|
||||||
Subject: [PATCH] mac80211: fix encryption key selection for 802.3 xmit
|
|
||||||
|
|
||||||
When using WEP, the default unicast key needs to be selected, instead of
|
|
||||||
the STA PTK.
|
|
||||||
|
|
||||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
||||||
---
|
|
||||||
|
|
||||||
--- a/net/mac80211/tx.c
|
|
||||||
+++ b/net/mac80211/tx.c
|
|
||||||
@@ -4262,7 +4262,6 @@ netdev_tx_t ieee80211_subif_start_xmit_8
|
|
||||||
struct ethhdr *ehdr = (struct ethhdr *)skb->data;
|
|
||||||
struct ieee80211_key *key;
|
|
||||||
struct sta_info *sta;
|
|
||||||
- bool offload = true;
|
|
||||||
|
|
||||||
if (unlikely(skb->len < ETH_HLEN)) {
|
|
||||||
kfree_skb(skb);
|
|
||||||
@@ -4278,18 +4277,22 @@ netdev_tx_t ieee80211_subif_start_xmit_8
|
|
||||||
|
|
||||||
if (unlikely(IS_ERR_OR_NULL(sta) || !sta->uploaded ||
|
|
||||||
!test_sta_flag(sta, WLAN_STA_AUTHORIZED) ||
|
|
||||||
- sdata->control_port_protocol == ehdr->h_proto))
|
|
||||||
- offload = false;
|
|
||||||
- else if ((key = rcu_dereference(sta->ptk[sta->ptk_idx])) &&
|
|
||||||
- (!(key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) ||
|
|
||||||
- key->conf.cipher == WLAN_CIPHER_SUITE_TKIP))
|
|
||||||
- offload = false;
|
|
||||||
-
|
|
||||||
- if (offload)
|
|
||||||
- ieee80211_8023_xmit(sdata, dev, sta, key, skb);
|
|
||||||
- else
|
|
||||||
- ieee80211_subif_start_xmit(skb, dev);
|
|
||||||
+ sdata->control_port_protocol == ehdr->h_proto))
|
|
||||||
+ goto skip_offload;
|
|
||||||
|
|
||||||
+ key = rcu_dereference(sta->ptk[sta->ptk_idx]);
|
|
||||||
+ if (!key)
|
|
||||||
+ key = rcu_dereference(sdata->default_unicast_key);
|
|
||||||
+
|
|
||||||
+ if (key && (!(key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) ||
|
|
||||||
+ key->conf.cipher == WLAN_CIPHER_SUITE_TKIP))
|
|
||||||
+ goto skip_offload;
|
|
||||||
+
|
|
||||||
+ ieee80211_8023_xmit(sdata, dev, sta, key, skb);
|
|
||||||
+ goto out;
|
|
||||||
+
|
|
||||||
+skip_offload:
|
|
||||||
+ ieee80211_subif_start_xmit(skb, dev);
|
|
||||||
out:
|
|
||||||
rcu_read_unlock();
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
|||||||
From: Felix Fietkau <nbd@nbd.name>
|
|
||||||
Date: Wed, 16 Dec 2020 21:24:19 +0100
|
|
||||||
Subject: [PATCH] mac80211: fix fast-rx encryption check
|
|
||||||
|
|
||||||
When using WEP, the default unicast key needs to be selected, instead of
|
|
||||||
the STA PTK.
|
|
||||||
|
|
||||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
||||||
---
|
|
||||||
|
|
||||||
--- a/net/mac80211/rx.c
|
|
||||||
+++ b/net/mac80211/rx.c
|
|
||||||
@@ -4195,6 +4195,8 @@ void ieee80211_check_fast_rx(struct sta_
|
|
||||||
|
|
||||||
rcu_read_lock();
|
|
||||||
key = rcu_dereference(sta->ptk[sta->ptk_idx]);
|
|
||||||
+ if (!key)
|
|
||||||
+ key = rcu_dereference(sdata->default_unicast_key);
|
|
||||||
if (key) {
|
|
||||||
switch (key->conf.cipher) {
|
|
||||||
case WLAN_CIPHER_SUITE_TKIP:
|
|
@ -89,7 +89,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
/**
|
/**
|
||||||
--- a/net/mac80211/debugfs.c
|
--- a/net/mac80211/debugfs.c
|
||||||
+++ b/net/mac80211/debugfs.c
|
+++ b/net/mac80211/debugfs.c
|
||||||
@@ -409,6 +409,7 @@ static const char *hw_flag_names[] = {
|
@@ -405,6 +405,7 @@ static const char *hw_flag_names[] = {
|
||||||
FLAG(SUPPORTS_ONLY_HE_MULTI_BSSID),
|
FLAG(SUPPORTS_ONLY_HE_MULTI_BSSID),
|
||||||
FLAG(AMPDU_KEYBORDER_SUPPORT),
|
FLAG(AMPDU_KEYBORDER_SUPPORT),
|
||||||
FLAG(SUPPORTS_TX_ENCAP_OFFLOAD),
|
FLAG(SUPPORTS_TX_ENCAP_OFFLOAD),
|
||||||
|
@ -1,28 +0,0 @@
|
|||||||
From: Wen Gong <wgong@codeaurora.org>
|
|
||||||
Date: Wed, 9 Dec 2020 11:06:29 +0800
|
|
||||||
Subject: [PATCH] mac80211: fix a mistake check for rx_stats update
|
|
||||||
|
|
||||||
It should be !is_multicast_ether_addr() in ieee80211_rx_h_sta_process()
|
|
||||||
for the rx_stats update, below commit remove the !, this patch is to
|
|
||||||
change it back.
|
|
||||||
|
|
||||||
It lead the rx rate "iw wlan0 station dump" become invalid for some
|
|
||||||
scenario when IEEE80211_HW_USES_RSS is set.
|
|
||||||
|
|
||||||
Fixes: 09a740ce352e ("mac80211: receive and process S1G beacons")
|
|
||||||
Signed-off-by: Wen Gong <wgong@codeaurora.org>
|
|
||||||
Link: https://lore.kernel.org/r/1607483189-3891-1-git-send-email-wgong@codeaurora.org
|
|
||||||
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|
||||||
---
|
|
||||||
|
|
||||||
--- a/net/mac80211/rx.c
|
|
||||||
+++ b/net/mac80211/rx.c
|
|
||||||
@@ -1758,7 +1758,7 @@ ieee80211_rx_h_sta_process(struct ieee80
|
|
||||||
} else if (rx->sdata->vif.type == NL80211_IFTYPE_OCB) {
|
|
||||||
sta->rx_stats.last_rx = jiffies;
|
|
||||||
} else if (!ieee80211_is_s1g_beacon(hdr->frame_control) &&
|
|
||||||
- is_multicast_ether_addr(hdr->addr1)) {
|
|
||||||
+ !is_multicast_ether_addr(hdr->addr1)) {
|
|
||||||
/*
|
|
||||||
* Mesh beacons will update last_rx when if they are found to
|
|
||||||
* match the current local configuration when processed.
|
|
@ -1,25 +0,0 @@
|
|||||||
From: Felix Fietkau <nbd@nbd.name>
|
|
||||||
Date: Fri, 18 Dec 2020 20:08:06 +0100
|
|
||||||
Subject: [PATCH] mac80211: do not drop tx nulldata packets on encrypted links
|
|
||||||
|
|
||||||
ieee80211_tx_h_select_key drops any non-mgmt packets without a key when
|
|
||||||
encryption is used. This is wrong for nulldata packets that can't be
|
|
||||||
encrypted and are sent out for probing clients and indicating 4-address
|
|
||||||
mode.
|
|
||||||
|
|
||||||
Reported-by: Sebastian Gottschall <s.gottschall@dd-wrt.com>
|
|
||||||
Fixes: a0761a301746 ("mac80211: drop data frames without key on encrypted links")
|
|
||||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
||||||
---
|
|
||||||
|
|
||||||
--- a/net/mac80211/tx.c
|
|
||||||
+++ b/net/mac80211/tx.c
|
|
||||||
@@ -662,7 +662,7 @@ ieee80211_tx_h_select_key(struct ieee802
|
|
||||||
if (!skip_hw && tx->key &&
|
|
||||||
tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE)
|
|
||||||
info->control.hw_key = &tx->key->conf;
|
|
||||||
- } else if (!ieee80211_is_mgmt(hdr->frame_control) && tx->sta &&
|
|
||||||
+ } else if (ieee80211_is_data_present(hdr->frame_control) && tx->sta &&
|
|
||||||
test_sta_flag(tx->sta, WLAN_STA_USES_ENCRYPTION)) {
|
|
||||||
return TX_DROP;
|
|
||||||
}
|
|
@ -1,38 +0,0 @@
|
|||||||
From: Felix Fietkau <nbd@nbd.name>
|
|
||||||
Date: Mon, 1 Feb 2021 00:59:14 +0100
|
|
||||||
Subject: [PATCH] mac80211: fix station rate table updates on assoc
|
|
||||||
|
|
||||||
If the driver uses .sta_add, station entries are only uploaded after the sta
|
|
||||||
is in assoc state. Fix early station rate table updates by deferring them
|
|
||||||
until the sta has been uploaded
|
|
||||||
|
|
||||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
||||||
---
|
|
||||||
|
|
||||||
--- a/net/mac80211/driver-ops.c
|
|
||||||
+++ b/net/mac80211/driver-ops.c
|
|
||||||
@@ -125,8 +125,11 @@ int drv_sta_state(struct ieee80211_local
|
|
||||||
} else if (old_state == IEEE80211_STA_AUTH &&
|
|
||||||
new_state == IEEE80211_STA_ASSOC) {
|
|
||||||
ret = drv_sta_add(local, sdata, &sta->sta);
|
|
||||||
- if (ret == 0)
|
|
||||||
+ if (ret == 0) {
|
|
||||||
sta->uploaded = true;
|
|
||||||
+ if (rcu_dereference(sta->sta.rates))
|
|
||||||
+ drv_sta_rate_tbl_update(local, sdata, &sta->sta);
|
|
||||||
+ }
|
|
||||||
} else if (old_state == IEEE80211_STA_ASSOC &&
|
|
||||||
new_state == IEEE80211_STA_AUTH) {
|
|
||||||
drv_sta_remove(local, sdata, &sta->sta);
|
|
||||||
--- a/net/mac80211/rate.c
|
|
||||||
+++ b/net/mac80211/rate.c
|
|
||||||
@@ -960,7 +960,8 @@ int rate_control_set_rates(struct ieee80
|
|
||||||
if (old)
|
|
||||||
kfree_rcu(old, rcu_head);
|
|
||||||
|
|
||||||
- drv_sta_rate_tbl_update(hw_to_local(hw), sta->sdata, pubsta);
|
|
||||||
+ if (sta->uploaded)
|
|
||||||
+ drv_sta_rate_tbl_update(hw_to_local(hw), sta->sdata, pubsta);
|
|
||||||
|
|
||||||
ieee80211_sta_set_expected_throughput(pubsta, sta_get_expected_throughput(sta));
|
|
||||||
|
|
@ -87,7 +87,7 @@
|
|||||||
CFG80211_TESTMODE_CMD(ieee80211_testmode_cmd)
|
CFG80211_TESTMODE_CMD(ieee80211_testmode_cmd)
|
||||||
--- a/net/mac80211/ieee80211_i.h
|
--- a/net/mac80211/ieee80211_i.h
|
||||||
+++ b/net/mac80211/ieee80211_i.h
|
+++ b/net/mac80211/ieee80211_i.h
|
||||||
@@ -1400,6 +1400,7 @@ struct ieee80211_local {
|
@@ -1401,6 +1401,7 @@ struct ieee80211_local {
|
||||||
int dynamic_ps_forced_timeout;
|
int dynamic_ps_forced_timeout;
|
||||||
|
|
||||||
int user_power_level; /* in dBm, for all interfaces */
|
int user_power_level; /* in dBm, for all interfaces */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user