mac80211: bump to version 6.18.26
This contains many fixes from upstream Linux.
The code block from this patch was moved a bit in the function:
subsys/110-mac80211_keep_keys_on_stop_ap.patch
This patch was applied upstream:
subsys/330-mac80211-fix-crash-in-ieee80211_chan_bw_change-for-A.patch
Link: https://github.com/openwrt/openwrt/pull/23167
(cherry picked from commit bcaa6a8367)
Link: https://github.com/openwrt/openwrt/pull/23209
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
parent
0bcdcf67d7
commit
e850a972b5
@ -10,13 +10,13 @@ include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=mac80211
|
||||
|
||||
PKG_VERSION:=6.18.7
|
||||
PKG_VERSION:=6.18.26
|
||||
PKG_RELEASE:=1
|
||||
PKG_LICENSE:=GPL-2.0-only
|
||||
PKG_LICENSE_FILES:=COPYING
|
||||
|
||||
PKG_SOURCE_URL:=https://github.com/openwrt/backports/releases/download/backports-v$(PKG_VERSION)
|
||||
PKG_HASH:=623e5cf46ca8e81fd413f4f465e2580a0143e24929f9c22ce1ba7c34f2872989
|
||||
PKG_HASH:=2ad578c6cae22f192fefd44e1449725228d4109ee781998b41dcbae872554968
|
||||
|
||||
PKG_SOURCE:=backports-$(PKG_VERSION).tar.zst
|
||||
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(if $(BUILD_VARIANT),$(PKG_NAME)-$(BUILD_VARIANT)/)backports-$(PKG_VERSION)
|
||||
|
||||
@ -49,7 +49,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/mhi.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/mhi.c
|
||||
@@ -239,6 +239,34 @@ static void ath11k_mhi_op_runtime_put(st
|
||||
@@ -235,6 +235,34 @@ static void ath11k_mhi_op_runtime_put(st
|
||||
{
|
||||
}
|
||||
|
||||
@ -84,7 +84,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
||||
static char *ath11k_mhi_op_callback_to_str(enum mhi_callback reason)
|
||||
{
|
||||
switch (reason) {
|
||||
@@ -260,6 +288,8 @@ static char *ath11k_mhi_op_callback_to_s
|
||||
@@ -256,6 +284,8 @@ static char *ath11k_mhi_op_callback_to_s
|
||||
return "MHI_CB_FATAL_ERROR";
|
||||
case MHI_CB_BW_REQ:
|
||||
return "MHI_CB_BW_REQ";
|
||||
@ -93,7 +93,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
||||
default:
|
||||
return "UNKNOWN";
|
||||
}
|
||||
@@ -290,6 +320,9 @@ static void ath11k_mhi_op_status_cb(stru
|
||||
@@ -286,6 +316,9 @@ static void ath11k_mhi_op_status_cb(stru
|
||||
queue_work(ab->workqueue_aux, &ab->reset_work);
|
||||
|
||||
break;
|
||||
@ -103,7 +103,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -297,22 +330,6 @@ static void ath11k_mhi_op_status_cb(stru
|
||||
@@ -293,22 +326,6 @@ static void ath11k_mhi_op_status_cb(stru
|
||||
ab_pci->mhi_pre_cb = cb;
|
||||
}
|
||||
|
||||
|
||||
@ -31,7 +31,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
||||
{
|
||||
.hw_rev = ATH11K_HW_IPQ8074,
|
||||
.name = "ipq8074 hw2.0",
|
||||
@@ -2521,7 +2521,8 @@ static void ath11k_core_reset(struct wor
|
||||
@@ -2576,7 +2576,8 @@ static void ath11k_core_reset(struct wor
|
||||
static int ath11k_init_hw_params(struct ath11k_base *ab)
|
||||
{
|
||||
const struct ath11k_hw_params *hw_params = NULL;
|
||||
@ -41,7 +41,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(ath11k_hw_params); i++) {
|
||||
hw_params = &ath11k_hw_params[i];
|
||||
@@ -2537,7 +2538,31 @@ static int ath11k_init_hw_params(struct
|
||||
@@ -2592,7 +2593,31 @@ static int ath11k_init_hw_params(struct
|
||||
|
||||
ab->hw_params = *hw_params;
|
||||
|
||||
|
||||
@ -291,9 +291,9 @@ Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com>
|
||||
int pdev_idx;
|
||||
struct ath11k *ar;
|
||||
enum wmi_vdev_type vdev_type;
|
||||
@@ -929,24 +772,14 @@ int ath11k_reg_handle_chan_list(struct a
|
||||
(char *)reg_info->alpha2, 2))
|
||||
goto retfail;
|
||||
@@ -932,24 +775,14 @@ int ath11k_reg_handle_chan_list(struct a
|
||||
return 0;
|
||||
}
|
||||
|
||||
- /* Intersect new rules with default regd if a new country setting was
|
||||
- * requested, i.e a default regd was already set during initialization
|
||||
|
||||
@ -101,7 +101,7 @@ Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
|
||||
struct ath12k_hw {
|
||||
--- a/drivers/net/wireless/ath/ath12k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath12k/mac.c
|
||||
@@ -14057,6 +14057,10 @@ static void ath12k_mac_setup(struct ath1
|
||||
@@ -14063,6 +14063,10 @@ static void ath12k_mac_setup(struct ath1
|
||||
init_completion(&ar->mlo_setup_done);
|
||||
init_completion(&ar->completed_11d_scan);
|
||||
init_completion(&ar->regd_update_completed);
|
||||
@ -294,7 +294,7 @@ Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
|
||||
+#endif /* _ATH12K_THERMAL_ */
|
||||
--- a/drivers/net/wireless/ath/ath12k/wmi.c
|
||||
+++ b/drivers/net/wireless/ath/ath12k/wmi.c
|
||||
@@ -6674,31 +6674,6 @@ static int ath12k_pull_peer_assoc_conf_e
|
||||
@@ -6673,31 +6673,6 @@ static int ath12k_pull_peer_assoc_conf_e
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -326,7 +326,7 @@ Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
|
||||
static void ath12k_wmi_op_ep_tx_credits(struct ath12k_base *ab)
|
||||
{
|
||||
/* try to send pending beacons first. they take priority */
|
||||
@@ -8713,25 +8688,45 @@ static void
|
||||
@@ -8712,25 +8687,45 @@ static void
|
||||
ath12k_wmi_pdev_temperature_event(struct ath12k_base *ab,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
|
||||
@ -130,7 +130,7 @@ Best regards,
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath12k/wmi.c
|
||||
+++ b/drivers/net/wireless/ath/ath12k/wmi.c
|
||||
@@ -2894,6 +2894,9 @@ int ath12k_wmi_send_scan_chan_list_cmd(s
|
||||
@@ -2900,6 +2900,9 @@ int ath12k_wmi_send_scan_chan_list_cmd(s
|
||||
max_chan_limit = (wmi->wmi_ab->max_msg_len[ar->pdev_idx] - len) /
|
||||
sizeof(*chan_info);
|
||||
|
||||
|
||||
@ -124,7 +124,7 @@ Best regards,
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath12k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath12k/mac.c
|
||||
@@ -7724,9 +7724,7 @@ static void ath12k_mac_setup_ht_vht_cap(
|
||||
@@ -7727,9 +7727,7 @@ static void ath12k_mac_setup_ht_vht_cap(
|
||||
rate_cap_rx_chainmask);
|
||||
}
|
||||
|
||||
|
||||
@ -166,7 +166,7 @@
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||
@@ -2429,6 +2429,7 @@ static bool ath9k_hw_dfs_tested(struct ath_hw *ah)
|
||||
@@ -2481,6 +2481,7 @@ static bool ath9k_hw_dfs_tested(struct a
|
||||
static void ath9k_gpio_cap_init(struct ath_hw *ah)
|
||||
{
|
||||
struct ath9k_hw_capabilities *pCap = &ah->caps;
|
||||
@ -174,7 +174,7 @@
|
||||
|
||||
if (AR_SREV_9271(ah)) {
|
||||
pCap->num_gpio_pins = AR9271_NUM_GPIO;
|
||||
@@ -2479,6 +2480,12 @@ static void ath9k_gpio_cap_init(struct ath_hw *ah)
|
||||
@@ -2531,6 +2532,12 @@ static void ath9k_gpio_cap_init(struct a
|
||||
pCap->num_gpio_pins = AR_NUM_GPIO;
|
||||
pCap->gpio_mask = AR_GPIO_MASK;
|
||||
}
|
||||
|
||||
@ -518,7 +518,7 @@ JIRA: SWWLAN-136577
|
||||
/* ready */
|
||||
return;
|
||||
|
||||
@@ -4649,3 +4860,40 @@ int brcmf_sdio_sleep(struct brcmf_sdio *
|
||||
@@ -4650,3 +4861,40 @@ int brcmf_sdio_sleep(struct brcmf_sdio *
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -40,7 +40,7 @@
|
||||
}
|
||||
|
||||
return err;
|
||||
@@ -1550,7 +1566,11 @@ static int cfg80211_netdev_notifier_call
|
||||
@@ -1549,7 +1565,11 @@ static int cfg80211_netdev_notifier_call
|
||||
SET_NETDEV_DEVTYPE(dev, &wiphy_type);
|
||||
wdev->netdev = dev;
|
||||
/* can only change netns with wiphy */
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/wireless/virtual/mac80211_hwsim.c
|
||||
+++ b/drivers/net/wireless/virtual/mac80211_hwsim.c
|
||||
@@ -6927,6 +6927,7 @@ static void hwsim_virtio_rx_done(struct
|
||||
@@ -6926,6 +6926,7 @@ static void hwsim_virtio_rx_done(struct
|
||||
|
||||
static int init_vqs(struct virtio_device *vdev)
|
||||
{
|
||||
@ -8,7 +8,7 @@
|
||||
struct virtqueue_info vqs_info[HWSIM_NUM_VQS] = {
|
||||
[HWSIM_VQ_TX] = { "tx", hwsim_virtio_tx_done },
|
||||
[HWSIM_VQ_RX] = { "rx", hwsim_virtio_rx_done },
|
||||
@@ -6934,6 +6935,19 @@ static int init_vqs(struct virtio_device
|
||||
@@ -6933,6 +6934,19 @@ static int init_vqs(struct virtio_device
|
||||
|
||||
return virtio_find_vqs(vdev, HWSIM_NUM_VQS,
|
||||
hwsim_vqs, vqs_info, NULL);
|
||||
|
||||
@ -44,7 +44,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||
+compat-$(CPTCFG_KERNEL_6_1) += backport-genetlink.o
|
||||
compat-$(CPTCFG_KERNEL_6_4) += backport-6.4.o
|
||||
compat-$(CPTCFG_KERNEL_6_11) += backport-6.11.o
|
||||
|
||||
compat-$(CPTCFG_KERNEL_6_14) += backport-faux.o
|
||||
--- a/compat/backport-genetlink.c
|
||||
+++ b/compat/backport-genetlink.c
|
||||
@@ -17,6 +17,7 @@
|
||||
|
||||
@ -58,7 +58,7 @@
|
||||
.llseek = default_llseek,
|
||||
};
|
||||
|
||||
@@ -348,9 +353,10 @@ static ssize_t aql_enable_write(struct f
|
||||
@@ -344,9 +349,10 @@ static ssize_t aql_enable_write(struct f
|
||||
return count;
|
||||
}
|
||||
|
||||
@ -70,7 +70,7 @@
|
||||
.llseek = default_llseek,
|
||||
};
|
||||
|
||||
@@ -398,9 +404,10 @@ static ssize_t force_tx_status_write(str
|
||||
@@ -394,9 +400,10 @@ static ssize_t force_tx_status_write(str
|
||||
return count;
|
||||
}
|
||||
|
||||
@ -82,7 +82,7 @@
|
||||
.llseek = default_llseek,
|
||||
};
|
||||
|
||||
@@ -425,8 +432,9 @@ static ssize_t reset_write(struct file *
|
||||
@@ -421,8 +428,9 @@ static ssize_t reset_write(struct file *
|
||||
return count;
|
||||
}
|
||||
|
||||
@ -93,7 +93,7 @@
|
||||
.llseek = noop_llseek,
|
||||
};
|
||||
#endif
|
||||
@@ -653,8 +661,9 @@ static ssize_t stats_ ##name## _read(str
|
||||
@@ -649,8 +657,9 @@ static ssize_t stats_ ##name## _read(str
|
||||
print_devstats_##name); \
|
||||
} \
|
||||
\
|
||||
|
||||
@ -9,9 +9,9 @@ Used for AP+STA support in OpenWrt - preserve AP mode keys across STA reconnect
|
||||
|
||||
--- a/net/mac80211/cfg.c
|
||||
+++ b/net/mac80211/cfg.c
|
||||
@@ -1872,12 +1872,6 @@ static int ieee80211_stop_ap(struct wiph
|
||||
|
||||
__sta_info_flush(sdata, true, link_id, NULL);
|
||||
@@ -1883,12 +1883,6 @@ static int ieee80211_stop_ap(struct wiph
|
||||
ieee80211_link_info_change_notify(sdata, link,
|
||||
BSS_CHANGED_BEACON_ENABLED);
|
||||
|
||||
- ieee80211_remove_link_keys(link, &keys);
|
||||
- if (!list_empty(&keys)) {
|
||||
@ -19,6 +19,6 @@ Used for AP+STA support in OpenWrt - preserve AP mode keys across STA reconnect
|
||||
- ieee80211_free_key_list(local, &keys);
|
||||
- }
|
||||
-
|
||||
ieee80211_stop_mbssid(sdata);
|
||||
RCU_INIT_POINTER(link_conf->tx_bss_conf, NULL);
|
||||
|
||||
if (sdata->wdev.links[link_id].cac_started) {
|
||||
chandef = link_conf->chanreq.oper;
|
||||
wiphy_delayed_work_cancel(wiphy, &link->dfs_cac_timer_work);
|
||||
|
||||
@ -16,7 +16,7 @@ and we should ignore this.
|
||||
|
||||
--- a/net/wireless/core.c
|
||||
+++ b/net/wireless/core.c
|
||||
@@ -679,21 +679,6 @@ int wiphy_verify_iface_combinations(stru
|
||||
@@ -675,21 +675,6 @@ int wiphy_verify_iface_combinations(stru
|
||||
c->limits[j].max > 1))
|
||||
return -EINVAL;
|
||||
|
||||
|
||||
@ -18,7 +18,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||
|
||||
--- a/net/mac80211/sta_info.c
|
||||
+++ b/net/mac80211/sta_info.c
|
||||
@@ -2526,6 +2526,13 @@ static void sta_stats_decode_rate(struct
|
||||
@@ -2527,6 +2527,13 @@ static void sta_stats_decode_rate(struct
|
||||
|
||||
sband = local->hw.wiphy->bands[band];
|
||||
|
||||
|
||||
@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -4086,7 +4086,7 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
@@ -4088,7 +4088,7 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
|
||||
if (deficit < 0)
|
||||
sta->airtime[txqi->txq.ac].deficit +=
|
||||
@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
if (deficit < 0 || !aql_check) {
|
||||
list_move_tail(&txqi->schedule_order,
|
||||
@@ -4231,7 +4231,8 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
@@ -4233,7 +4233,8 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
}
|
||||
sta = container_of(iter->txq.sta, struct sta_info, sta);
|
||||
if (ieee80211_sta_deficit(sta, ac) < 0)
|
||||
@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
list_move_tail(&iter->schedule_order, &local->active_txqs[ac]);
|
||||
}
|
||||
|
||||
@@ -4239,7 +4240,7 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
@@ -4241,7 +4242,7 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
if (sta->airtime[ac].deficit >= 0)
|
||||
goto out;
|
||||
|
||||
|
||||
@ -70,7 +70,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/mac80211/ieee80211_i.h
|
||||
+++ b/net/mac80211/ieee80211_i.h
|
||||
@@ -1428,10 +1428,12 @@ struct ieee80211_local {
|
||||
@@ -1426,10 +1426,12 @@ struct ieee80211_local {
|
||||
spinlock_t handle_wake_tx_queue_lock;
|
||||
|
||||
u16 airtime_flags;
|
||||
@ -95,7 +95,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
spin_lock_init(&local->active_txq_lock[i]);
|
||||
--- a/net/mac80211/sta_info.c
|
||||
+++ b/net/mac80211/sta_info.c
|
||||
@@ -2431,13 +2431,28 @@ EXPORT_SYMBOL(ieee80211_sta_recalc_aggre
|
||||
@@ -2432,13 +2432,28 @@ EXPORT_SYMBOL(ieee80211_sta_recalc_aggre
|
||||
|
||||
void ieee80211_sta_update_pending_airtime(struct ieee80211_local *local,
|
||||
struct sta_info *sta, u8 ac,
|
||||
@ -127,7 +127,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
atomic_add(tx_airtime,
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -2556,7 +2556,7 @@ static u16 ieee80211_store_ack_skb(struc
|
||||
@@ -2558,7 +2558,7 @@ static u16 ieee80211_store_ack_skb(struc
|
||||
|
||||
spin_lock_irqsave(&local->ack_status_lock, flags);
|
||||
id = idr_alloc(&local->ack_status_frames, ack_skb,
|
||||
@ -136,7 +136,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
spin_unlock_irqrestore(&local->ack_status_lock, flags);
|
||||
|
||||
if (id >= 0) {
|
||||
@@ -3987,20 +3987,20 @@ begin:
|
||||
@@ -3989,20 +3989,20 @@ begin:
|
||||
encap_out:
|
||||
info->control.vif = vif;
|
||||
|
||||
@ -167,7 +167,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
|
||||
return skb;
|
||||
@@ -4052,6 +4052,7 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
@@ -4054,6 +4054,7 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
struct ieee80211_txq *ret = NULL;
|
||||
struct txq_info *txqi = NULL, *head = NULL;
|
||||
bool found_eligible_txq = false;
|
||||
@ -175,7 +175,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
spin_lock_bh(&local->active_txq_lock[ac]);
|
||||
|
||||
@@ -4075,26 +4076,26 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
@@ -4077,26 +4078,26 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
if (!head)
|
||||
head = txqi;
|
||||
|
||||
@ -214,7 +214,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (txqi->schedule_round == local->schedule_round[ac])
|
||||
goto out;
|
||||
|
||||
@@ -4161,7 +4162,8 @@ bool ieee80211_txq_airtime_check(struct
|
||||
@@ -4163,7 +4164,8 @@ bool ieee80211_txq_airtime_check(struct
|
||||
return true;
|
||||
|
||||
if (!txq->sta)
|
||||
@ -224,7 +224,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
if (unlikely(txq->tid == IEEE80211_NUM_TIDS))
|
||||
return true;
|
||||
@@ -4210,15 +4212,15 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
@@ -4212,15 +4214,15 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
|
||||
spin_lock_bh(&local->active_txq_lock[ac]);
|
||||
|
||||
|
||||
@ -1,39 +0,0 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Thu, 5 Mar 2026 17:04:11 +0000
|
||||
Subject: [PATCH] mac80211: fix crash in ieee80211_chan_bw_change for AP_VLAN
|
||||
stations
|
||||
|
||||
ieee80211_chan_bw_change() iterates all stations and accesses
|
||||
link->reserved.oper via sta->sdata->link[link_id]. For stations on
|
||||
AP_VLAN interfaces (e.g. 4addr WDS clients), sta->sdata points to
|
||||
the VLAN sdata, whose link never participates in chanctx reservations.
|
||||
This leaves link->reserved.oper zero-initialized with chan == NULL,
|
||||
causing a NULL pointer dereference in __ieee80211_sta_cap_rx_bw()
|
||||
when accessing chandef->chan->band during CSA.
|
||||
|
||||
Resolve the VLAN sdata to its parent AP sdata using get_bss_sdata()
|
||||
before accessing link data.
|
||||
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/net/mac80211/chan.c
|
||||
+++ b/net/mac80211/chan.c
|
||||
@@ -441,13 +441,15 @@ static void ieee80211_chan_bw_change(str
|
||||
rcu_read_lock();
|
||||
list_for_each_entry_rcu(sta, &local->sta_list,
|
||||
list) {
|
||||
- struct ieee80211_sub_if_data *sdata = sta->sdata;
|
||||
+ struct ieee80211_sub_if_data *sdata;
|
||||
enum ieee80211_sta_rx_bandwidth new_sta_bw;
|
||||
unsigned int link_id;
|
||||
|
||||
if (!ieee80211_sdata_running(sta->sdata))
|
||||
continue;
|
||||
|
||||
+ sdata = get_bss_sdata(sta->sdata);
|
||||
+
|
||||
for (link_id = 0; link_id < ARRAY_SIZE(sta->sdata->link); link_id++) {
|
||||
struct ieee80211_link_data *link =
|
||||
rcu_dereference(sdata->link[link_id]);
|
||||
@ -97,7 +97,7 @@
|
||||
return false;
|
||||
--- a/net/mac80211/ieee80211_i.h
|
||||
+++ b/net/mac80211/ieee80211_i.h
|
||||
@@ -2022,6 +2022,13 @@ int ieee80211_mesh_finish_csa(struct iee
|
||||
@@ -2020,6 +2020,13 @@ int ieee80211_mesh_finish_csa(struct iee
|
||||
u64 *changed);
|
||||
|
||||
/* scan/BSS handling */
|
||||
@ -111,7 +111,7 @@
|
||||
void ieee80211_scan_work(struct wiphy *wiphy, struct wiphy_work *work);
|
||||
int ieee80211_request_ibss_scan(struct ieee80211_sub_if_data *sdata,
|
||||
const u8 *ssid, u8 ssid_len,
|
||||
@@ -2060,6 +2067,7 @@ void ieee80211_sched_scan_stopped_work(s
|
||||
@@ -2058,6 +2065,7 @@ void ieee80211_sched_scan_stopped_work(s
|
||||
/* off-channel/mgmt-tx */
|
||||
void ieee80211_offchannel_stop_vifs(struct ieee80211_local *local);
|
||||
void ieee80211_offchannel_return(struct ieee80211_local *local);
|
||||
@ -119,7 +119,7 @@
|
||||
void ieee80211_roc_setup(struct ieee80211_local *local);
|
||||
void ieee80211_start_next_roc(struct ieee80211_local *local);
|
||||
void ieee80211_reconfig_roc(struct ieee80211_local *local);
|
||||
@@ -2719,6 +2727,8 @@ bool ieee80211_chandef_s1g_oper(struct i
|
||||
@@ -2717,6 +2725,8 @@ bool ieee80211_chandef_s1g_oper(struct i
|
||||
struct cfg80211_chan_def *chandef);
|
||||
void ieee80211_chandef_downgrade(struct cfg80211_chan_def *chandef,
|
||||
struct ieee80211_conn_settings *conn);
|
||||
@ -128,7 +128,7 @@
|
||||
static inline void
|
||||
ieee80211_chanreq_downgrade(struct ieee80211_chan_req *chanreq,
|
||||
struct ieee80211_conn_settings *conn)
|
||||
@@ -2775,7 +2785,7 @@ void ieee80211_recalc_chanctx_min_def(st
|
||||
@@ -2773,7 +2783,7 @@ void ieee80211_recalc_chanctx_min_def(st
|
||||
struct ieee80211_chanctx *ctx,
|
||||
struct ieee80211_link_data *rsvd_for,
|
||||
bool check_reserved);
|
||||
@ -211,7 +211,7 @@
|
||||
list_add_tail(&roc->list, &local->roc_list);
|
||||
--- a/net/mac80211/scan.c
|
||||
+++ b/net/mac80211/scan.c
|
||||
@@ -586,25 +586,72 @@ static int ieee80211_start_sw_scan(struc
|
||||
@@ -591,25 +591,72 @@ static int ieee80211_start_sw_scan(struc
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -289,7 +289,7 @@
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -612,12 +659,12 @@ static bool __ieee80211_can_leave_ch(str
|
||||
@@ -617,12 +664,12 @@ static bool __ieee80211_can_leave_ch(str
|
||||
|
||||
static bool ieee80211_can_scan(struct ieee80211_local *local,
|
||||
struct ieee80211_sub_if_data *sdata,
|
||||
@ -307,7 +307,7 @@
|
||||
return false;
|
||||
|
||||
if (sdata->vif.type == NL80211_IFTYPE_STATION &&
|
||||
@@ -629,19 +676,22 @@ static bool ieee80211_can_scan(struct ie
|
||||
@@ -634,19 +681,22 @@ static bool ieee80211_can_scan(struct ie
|
||||
|
||||
void ieee80211_run_deferred_scan(struct ieee80211_local *local)
|
||||
{
|
||||
@ -337,7 +337,7 @@
|
||||
return;
|
||||
|
||||
wiphy_delayed_work_queue(local->hw.wiphy, &local->scan_work,
|
||||
@@ -724,6 +774,7 @@ static int __ieee80211_start_scan(struct
|
||||
@@ -729,6 +779,7 @@ static int __ieee80211_start_scan(struct
|
||||
{
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
bool hw_scan = local->ops->hw_scan;
|
||||
@ -345,7 +345,7 @@
|
||||
int rc;
|
||||
|
||||
lockdep_assert_wiphy(local->hw.wiphy);
|
||||
@@ -738,10 +789,11 @@ static int __ieee80211_start_scan(struct
|
||||
@@ -743,10 +794,11 @@ static int __ieee80211_start_scan(struct
|
||||
!(sdata->vif.active_links & BIT(req->tsf_report_link_id)))
|
||||
return -EINVAL;
|
||||
|
||||
@ -387,7 +387,7 @@
|
||||
* the suspend->resume cycle. Since we can't check each caller
|
||||
--- a/net/wireless/util.c
|
||||
+++ b/net/wireless/util.c
|
||||
@@ -2943,6 +2943,9 @@ bool cfg80211_radio_chandef_valid(const
|
||||
@@ -2945,6 +2945,9 @@ bool cfg80211_radio_chandef_valid(const
|
||||
{
|
||||
u32 freq, width;
|
||||
|
||||
|
||||
@ -126,7 +126,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
--- a/net/mac80211/ieee80211_i.h
|
||||
+++ b/net/mac80211/ieee80211_i.h
|
||||
@@ -2839,6 +2839,11 @@ u8 *ieee80211_get_bssid(struct ieee80211
|
||||
@@ -2837,6 +2837,11 @@ u8 *ieee80211_get_bssid(struct ieee80211
|
||||
|
||||
extern const struct ethtool_ops ieee80211_ethtool_ops;
|
||||
|
||||
|
||||
@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/mac80211/sta_info.c
|
||||
+++ b/net/mac80211/sta_info.c
|
||||
@@ -2977,6 +2977,29 @@ static void sta_set_link_sinfo(struct st
|
||||
@@ -2980,6 +2980,29 @@ static void sta_set_link_sinfo(struct st
|
||||
}
|
||||
}
|
||||
|
||||
@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo,
|
||||
bool tidstats)
|
||||
{
|
||||
@@ -3201,6 +3224,8 @@ void sta_set_sinfo(struct sta_info *sta,
|
||||
@@ -3205,6 +3228,8 @@ void sta_set_sinfo(struct sta_info *sta,
|
||||
sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_TDLS_PEER);
|
||||
|
||||
thr = sta_get_expected_throughput(sta);
|
||||
|
||||
@ -320,7 +320,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
+}
|
||||
--- a/net/mac80211/ieee80211_i.h
|
||||
+++ b/net/mac80211/ieee80211_i.h
|
||||
@@ -2859,6 +2859,8 @@ void ieee80211_destroy_frag_cache(struct
|
||||
@@ -2857,6 +2857,8 @@ void ieee80211_destroy_frag_cache(struct
|
||||
|
||||
u8 ieee80211_ie_len_eht_cap(struct ieee80211_sub_if_data *sdata);
|
||||
|
||||
@ -331,7 +331,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
struct ieee80211_supported_band *sband,
|
||||
--- a/net/mac80211/iface.c
|
||||
+++ b/net/mac80211/iface.c
|
||||
@@ -1630,7 +1630,15 @@ static void ieee80211_iface_process_skb(
|
||||
@@ -1634,7 +1634,15 @@ static void ieee80211_iface_process_skb(
|
||||
}
|
||||
} else if (ieee80211_is_action(mgmt->frame_control) &&
|
||||
mgmt->u.action.category == WLAN_CATEGORY_PROTECTED_EHT) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user