mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-18 21:28:02 +00:00
mac80211: Update to version 6.1.116-1
This updates mac80211 to version 6.1.116-1. This code is based on Linux 6.1.116 and contains all fixes included in the upstream wireless subsystem from that kernel version. This includes many bugfixes and also some security fixes. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
parent
a281c02288
commit
28bf86e3e5
@ -10,13 +10,13 @@ include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=mac80211
|
||||
|
||||
PKG_VERSION:=6.1.110-1
|
||||
PKG_VERSION:=6.1.116-test1
|
||||
PKG_RELEASE:=1
|
||||
PKG_LICENSE:=GPL-2.0-only
|
||||
PKG_LICENSE_FILES:=COPYING
|
||||
|
||||
PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v6.1.110/
|
||||
PKG_HASH:=2415bc529ca25be0aa597f9638d8b6fc4138080bbaea96881a38101896df6703
|
||||
PKG_SOURCE_URL:=https://www.hauke-m.de/files/backports-test/
|
||||
PKG_HASH:=050cc57cbbb584ef5219da3b179fbb2b941b7ab57679fe551613ec02bb6948ee
|
||||
|
||||
PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz
|
||||
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/backports-$(PKG_VERSION)
|
||||
|
@ -456,7 +456,7 @@ v13:
|
||||
{
|
||||
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
|
||||
@@ -4598,6 +4598,8 @@ static const struct wmi_ops wmi_tlv_ops
|
||||
@@ -4603,6 +4603,8 @@ static const struct wmi_ops wmi_tlv_ops
|
||||
.gen_echo = ath10k_wmi_tlv_op_gen_echo,
|
||||
.gen_vdev_spectral_conf = ath10k_wmi_tlv_op_gen_vdev_spectral_conf,
|
||||
.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 = {
|
||||
--- a/drivers/net/wireless/ath/ath10k/wmi.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
|
||||
@@ -7492,6 +7492,49 @@ ath10k_wmi_op_gen_peer_set_param(struct
|
||||
@@ -7493,6 +7493,49 @@ ath10k_wmi_op_gen_peer_set_param(struct
|
||||
return skb;
|
||||
}
|
||||
|
||||
@ -517,7 +517,7 @@ v13:
|
||||
static struct sk_buff *
|
||||
ath10k_wmi_op_gen_set_psmode(struct ath10k *ar, u32 vdev_id,
|
||||
enum wmi_sta_ps_mode psmode)
|
||||
@@ -9180,6 +9223,9 @@ static const struct wmi_ops wmi_ops = {
|
||||
@@ -9181,6 +9224,9 @@ static const struct wmi_ops wmi_ops = {
|
||||
.fw_stats_fill = ath10k_wmi_main_op_fw_stats_fill,
|
||||
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
|
||||
.gen_echo = ath10k_wmi_op_gen_echo,
|
||||
@ -527,7 +527,7 @@ v13:
|
||||
/* .gen_bcn_tmpl not implemented */
|
||||
/* .gen_prb_tmpl not implemented */
|
||||
/* .gen_p2p_go_bcn_ie not implemented */
|
||||
@@ -9250,6 +9296,8 @@ static const struct wmi_ops wmi_10_1_ops
|
||||
@@ -9251,6 +9297,8 @@ static const struct wmi_ops wmi_10_1_ops
|
||||
.fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill,
|
||||
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
|
||||
.gen_echo = ath10k_wmi_op_gen_echo,
|
||||
@ -536,7 +536,7 @@ v13:
|
||||
/* .gen_bcn_tmpl not implemented */
|
||||
/* .gen_prb_tmpl not implemented */
|
||||
/* .gen_p2p_go_bcn_ie not implemented */
|
||||
@@ -9322,6 +9370,8 @@ static const struct wmi_ops wmi_10_2_ops
|
||||
@@ -9323,6 +9371,8 @@ static const struct wmi_ops wmi_10_2_ops
|
||||
.gen_delba_send = ath10k_wmi_op_gen_delba_send,
|
||||
.fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill,
|
||||
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
|
||||
@ -545,7 +545,7 @@ v13:
|
||||
/* .gen_pdev_enable_adaptive_cca not implemented */
|
||||
};
|
||||
|
||||
@@ -9393,6 +9443,8 @@ static const struct wmi_ops wmi_10_2_4_o
|
||||
@@ -9394,6 +9444,8 @@ static const struct wmi_ops wmi_10_2_4_o
|
||||
ath10k_wmi_op_gen_pdev_enable_adaptive_cca,
|
||||
.get_vdev_subtype = ath10k_wmi_10_2_4_op_get_vdev_subtype,
|
||||
.gen_bb_timing = ath10k_wmi_10_2_4_op_gen_bb_timing,
|
||||
@ -554,7 +554,7 @@ v13:
|
||||
/* .gen_bcn_tmpl not implemented */
|
||||
/* .gen_prb_tmpl not implemented */
|
||||
/* .gen_p2p_go_bcn_ie not implemented */
|
||||
@@ -9474,6 +9526,8 @@ static const struct wmi_ops wmi_10_4_ops
|
||||
@@ -9475,6 +9527,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_echo = ath10k_wmi_op_gen_echo,
|
||||
.gen_pdev_get_tpc_config = ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config,
|
||||
|
@ -55,7 +55,7 @@
|
||||
int ath9k_init_debug(struct ath_hw *ah)
|
||||
{
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
@@ -1432,6 +1480,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
@@ -1430,6 +1478,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
ath9k_tx99_init_debug(sc);
|
||||
ath9k_cmn_spectral_init_debug(&sc->spec_priv, sc->debug.debugfs_phy);
|
||||
|
||||
|
@ -53,7 +53,7 @@
|
||||
int ath9k_init_debug(struct ath_hw *ah)
|
||||
{
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
@@ -1482,6 +1528,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
@@ -1480,6 +1526,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
|
||||
debugfs_create_file("eeprom", S_IRUSR, sc->debug.debugfs_phy, sc,
|
||||
&fops_eeprom);
|
||||
|
@ -254,7 +254,7 @@
|
||||
|
||||
int ath9k_init_debug(struct ath_hw *ah)
|
||||
{
|
||||
@@ -1530,6 +1585,10 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
@@ -1528,6 +1583,10 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
&fops_eeprom);
|
||||
debugfs_create_file("chanbw", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy,
|
||||
sc, &fops_chanbw);
|
||||
|
@ -51,7 +51,7 @@
|
||||
int ath9k_init_debug(struct ath_hw *ah)
|
||||
{
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
@@ -1589,6 +1633,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
@@ -1587,6 +1631,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
debugfs_create_file("gpio_led", S_IWUSR,
|
||||
sc->debug.debugfs_phy, sc, &fops_gpio_led);
|
||||
#endif
|
||||
|
@ -1,169 +0,0 @@
|
||||
From e0f83d268974dab0361d11904dfc9acec53f96a6 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Dumazet <edumazet@google.com>
|
||||
Date: Fri, 11 Oct 2024 17:12:17 +0000
|
||||
Subject: [PATCH] genetlink: hold RCU in genlmsg_mcast()
|
||||
|
||||
[ Upstream commit 56440d7ec28d60f8da3bfa09062b3368ff9b16db ]
|
||||
|
||||
While running net selftests with CONFIG_PROVE_RCU_LIST=y I saw
|
||||
one lockdep splat [1].
|
||||
|
||||
genlmsg_mcast() uses for_each_net_rcu(), and must therefore hold RCU.
|
||||
|
||||
Instead of letting all callers guard genlmsg_multicast_allns()
|
||||
with a rcu_read_lock()/rcu_read_unlock() pair, do it in genlmsg_mcast().
|
||||
|
||||
This also means the @flags parameter is useless, we need to always use
|
||||
GFP_ATOMIC.
|
||||
|
||||
[1]
|
||||
[10882.424136] =============================
|
||||
[10882.424166] WARNING: suspicious RCU usage
|
||||
[10882.424309] 6.12.0-rc2-virtme #1156 Not tainted
|
||||
[10882.424400] -----------------------------
|
||||
[10882.424423] net/netlink/genetlink.c:1940 RCU-list traversed in non-reader section!!
|
||||
[10882.424469]
|
||||
other info that might help us debug this:
|
||||
|
||||
[10882.424500]
|
||||
rcu_scheduler_active = 2, debug_locks = 1
|
||||
[10882.424744] 2 locks held by ip/15677:
|
||||
[10882.424791] #0: ffffffffb6b491b0 (cb_lock){++++}-{3:3}, at: genl_rcv (net/netlink/genetlink.c:1219)
|
||||
[10882.426334] #1: ffffffffb6b49248 (genl_mutex){+.+.}-{3:3}, at: genl_rcv_msg (net/netlink/genetlink.c:61 net/netlink/genetlink.c:57 net/netlink/genetlink.c:1209)
|
||||
[10882.426465]
|
||||
stack backtrace:
|
||||
[10882.426805] CPU: 14 UID: 0 PID: 15677 Comm: ip Not tainted 6.12.0-rc2-virtme #1156
|
||||
[10882.426919] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
|
||||
[10882.427046] Call Trace:
|
||||
[10882.427131] <TASK>
|
||||
[10882.427244] dump_stack_lvl (lib/dump_stack.c:123)
|
||||
[10882.427335] lockdep_rcu_suspicious (kernel/locking/lockdep.c:6822)
|
||||
[10882.427387] genlmsg_multicast_allns (net/netlink/genetlink.c:1940 (discriminator 7) net/netlink/genetlink.c:1977 (discriminator 7))
|
||||
[10882.427436] l2tp_tunnel_notify.constprop.0 (net/l2tp/l2tp_netlink.c:119) l2tp_netlink
|
||||
[10882.427683] l2tp_nl_cmd_tunnel_create (net/l2tp/l2tp_netlink.c:253) l2tp_netlink
|
||||
[10882.427748] genl_family_rcv_msg_doit (net/netlink/genetlink.c:1115)
|
||||
[10882.427834] genl_rcv_msg (net/netlink/genetlink.c:1195 net/netlink/genetlink.c:1210)
|
||||
[10882.427877] ? __pfx_l2tp_nl_cmd_tunnel_create (net/l2tp/l2tp_netlink.c:186) l2tp_netlink
|
||||
[10882.427927] ? __pfx_genl_rcv_msg (net/netlink/genetlink.c:1201)
|
||||
[10882.427959] netlink_rcv_skb (net/netlink/af_netlink.c:2551)
|
||||
[10882.428069] genl_rcv (net/netlink/genetlink.c:1220)
|
||||
[10882.428095] netlink_unicast (net/netlink/af_netlink.c:1332 net/netlink/af_netlink.c:1357)
|
||||
[10882.428140] netlink_sendmsg (net/netlink/af_netlink.c:1901)
|
||||
[10882.428210] ____sys_sendmsg (net/socket.c:729 (discriminator 1) net/socket.c:744 (discriminator 1) net/socket.c:2607 (discriminator 1))
|
||||
|
||||
Fixes: 33f72e6f0c67 ("l2tp : multicast notification to the registered listeners")
|
||||
Signed-off-by: Eric Dumazet <edumazet@google.com>
|
||||
Cc: James Chapman <jchapman@katalix.com>
|
||||
Cc: Tom Parkin <tparkin@katalix.com>
|
||||
Cc: Johannes Berg <johannes.berg@intel.com>
|
||||
Link: https://patch.msgid.link/20241011171217.3166614-1-edumazet@google.com
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
Signed-off-by: Sasha Levin <sashal@kernel.org>
|
||||
---
|
||||
drivers/target/target_core_user.c | 2 +-
|
||||
include/net/genetlink.h | 3 +--
|
||||
net/l2tp/l2tp_netlink.c | 4 ++--
|
||||
net/netlink/genetlink.c | 28 ++++++++++++++--------------
|
||||
net/wireless/nl80211.c | 8 ++------
|
||||
5 files changed, 20 insertions(+), 25 deletions(-)
|
||||
|
||||
--- a/backport-include/net/genetlink.h
|
||||
+++ b/backport-include/net/genetlink.h
|
||||
@@ -150,7 +150,7 @@ int genlmsg_multicast(const struct genl_
|
||||
#define genlmsg_multicast_allns LINUX_BACKPORT(genlmsg_multicast_allns)
|
||||
int backport_genlmsg_multicast_allns(const struct genl_family *family,
|
||||
struct sk_buff *skb, u32 portid,
|
||||
- unsigned int group, gfp_t flags);
|
||||
+ unsigned int group);
|
||||
|
||||
#define genl_family_attrbuf LINUX_BACKPORT(genl_family_attrbuf)
|
||||
static inline struct nlattr **genl_family_attrbuf(struct genl_family *family)
|
||||
--- a/compat/backport-genetlink.c
|
||||
+++ b/compat/backport-genetlink.c
|
||||
@@ -198,23 +198,23 @@ int genlmsg_multicast(const struct genl_
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(genlmsg_multicast);
|
||||
|
||||
-static int genlmsg_mcast(struct sk_buff *skb, u32 portid, unsigned long group,
|
||||
- gfp_t flags)
|
||||
+static int genlmsg_mcast(struct sk_buff *skb, u32 portid, unsigned long group)
|
||||
{
|
||||
struct sk_buff *tmp;
|
||||
struct net *net, *prev = NULL;
|
||||
bool delivered = false;
|
||||
int err;
|
||||
|
||||
+ rcu_read_lock();
|
||||
for_each_net_rcu(net) {
|
||||
if (prev) {
|
||||
- tmp = skb_clone(skb, flags);
|
||||
+ tmp = skb_clone(skb, GFP_ATOMIC);
|
||||
if (!tmp) {
|
||||
err = -ENOMEM;
|
||||
goto error;
|
||||
}
|
||||
err = nlmsg_multicast(prev->genl_sock, tmp,
|
||||
- portid, group, flags);
|
||||
+ portid, group, GFP_ATOMIC);
|
||||
if (!err)
|
||||
delivered = true;
|
||||
else if (err != -ESRCH)
|
||||
@@ -223,25 +223,29 @@ static int genlmsg_mcast(struct sk_buff
|
||||
|
||||
prev = net;
|
||||
}
|
||||
+ err = nlmsg_multicast(prev->genl_sock, skb, portid, group, GFP_ATOMIC);
|
||||
+
|
||||
+ rcu_read_unlock();
|
||||
|
||||
- err = nlmsg_multicast(prev->genl_sock, skb, portid, group, flags);
|
||||
if (!err)
|
||||
delivered = true;
|
||||
else if (err != -ESRCH)
|
||||
return err;
|
||||
return delivered ? 0 : -ESRCH;
|
||||
error:
|
||||
+ rcu_read_unlock();
|
||||
+
|
||||
kfree_skb(skb);
|
||||
return err;
|
||||
}
|
||||
|
||||
int backport_genlmsg_multicast_allns(const struct genl_family *family,
|
||||
struct sk_buff *skb, u32 portid,
|
||||
- unsigned int group, gfp_t flags)
|
||||
+ unsigned int group)
|
||||
{
|
||||
group = __backport_genl_group(family, group);
|
||||
if (group == INVALID_GROUP)
|
||||
return -EINVAL;
|
||||
- return genlmsg_mcast(skb, portid, group, flags);
|
||||
+ return genlmsg_mcast(skb, portid, group);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(backport_genlmsg_multicast_allns);
|
||||
--- a/net/wireless/nl80211.c
|
||||
+++ b/net/wireless/nl80211.c
|
||||
@@ -17627,10 +17627,8 @@ void nl80211_common_reg_change_event(enu
|
||||
|
||||
genlmsg_end(msg, hdr);
|
||||
|
||||
- rcu_read_lock();
|
||||
genlmsg_multicast_allns(&nl80211_fam, msg, 0,
|
||||
- NL80211_MCGRP_REGULATORY, GFP_ATOMIC);
|
||||
- rcu_read_unlock();
|
||||
+ NL80211_MCGRP_REGULATORY);
|
||||
|
||||
return;
|
||||
|
||||
@@ -18248,10 +18246,8 @@ void nl80211_send_beacon_hint_event(stru
|
||||
|
||||
genlmsg_end(msg, hdr);
|
||||
|
||||
- rcu_read_lock();
|
||||
genlmsg_multicast_allns(&nl80211_fam, msg, 0,
|
||||
- NL80211_MCGRP_REGULATORY, GFP_ATOMIC);
|
||||
- rcu_read_unlock();
|
||||
+ NL80211_MCGRP_REGULATORY);
|
||||
|
||||
return;
|
||||
|
@ -51,7 +51,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
*
|
||||
* Drivers can optionally delegate responsibility for scheduling queues to
|
||||
* mac80211, to take advantage of airtime fairness accounting. In this case, to
|
||||
@@ -2257,8 +2258,8 @@ struct ieee80211_link_sta {
|
||||
@@ -2258,8 +2259,8 @@ struct ieee80211_link_sta {
|
||||
* For non MLO STA it will point to the deflink data. For MLO STA
|
||||
* ieee80211_sta_recalc_aggregates() must be called to update it.
|
||||
* @support_p2p_ps: indicates whether the STA supports P2P PS mechanism or not.
|
||||
@ -62,7 +62,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
* @deflink: This holds the default link STA information, for non MLO STA all link
|
||||
* specific STA information is accessed through @deflink or through
|
||||
* link[0] which points to address of @deflink. For MLO Link STA
|
||||
@@ -5700,7 +5701,7 @@ void ieee80211_key_replay(struct ieee802
|
||||
@@ -5701,7 +5702,7 @@ void ieee80211_key_replay(struct ieee802
|
||||
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||
* @queue: queue number (counted from zero).
|
||||
*
|
||||
@ -71,7 +71,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
*/
|
||||
void ieee80211_wake_queue(struct ieee80211_hw *hw, int queue);
|
||||
|
||||
@@ -5709,7 +5710,7 @@ void ieee80211_wake_queue(struct ieee802
|
||||
@@ -5710,7 +5711,7 @@ void ieee80211_wake_queue(struct ieee802
|
||||
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||
* @queue: queue number (counted from zero).
|
||||
*
|
||||
@ -80,7 +80,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
*/
|
||||
void ieee80211_stop_queue(struct ieee80211_hw *hw, int queue);
|
||||
|
||||
@@ -5718,7 +5719,7 @@ void ieee80211_stop_queue(struct ieee802
|
||||
@@ -5719,7 +5720,7 @@ void ieee80211_stop_queue(struct ieee802
|
||||
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||
* @queue: queue number (counted from zero).
|
||||
*
|
||||
@ -89,7 +89,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
*
|
||||
* Return: %true if the queue is stopped. %false otherwise.
|
||||
*/
|
||||
@@ -5729,7 +5730,7 @@ int ieee80211_queue_stopped(struct ieee8
|
||||
@@ -5730,7 +5731,7 @@ int ieee80211_queue_stopped(struct ieee8
|
||||
* ieee80211_stop_queues - stop all queues
|
||||
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||
*
|
||||
@ -98,7 +98,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
*/
|
||||
void ieee80211_stop_queues(struct ieee80211_hw *hw);
|
||||
|
||||
@@ -5737,7 +5738,7 @@ void ieee80211_stop_queues(struct ieee80
|
||||
@@ -5738,7 +5739,7 @@ void ieee80211_stop_queues(struct ieee80
|
||||
* ieee80211_wake_queues - wake all queues
|
||||
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||
*
|
||||
@ -107,7 +107,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
*/
|
||||
void ieee80211_wake_queues(struct ieee80211_hw *hw);
|
||||
|
||||
@@ -6960,6 +6961,18 @@ static inline struct sk_buff *ieee80211_
|
||||
@@ -6961,6 +6962,18 @@ static inline struct sk_buff *ieee80211_
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -11,7 +11,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
|
||||
--- a/net/mac80211/cfg.c
|
||||
+++ b/net/mac80211/cfg.c
|
||||
@@ -4359,9 +4359,6 @@ static int ieee80211_get_txq_stats(struc
|
||||
@@ -4360,9 +4360,6 @@ static int ieee80211_get_txq_stats(struc
|
||||
struct ieee80211_sub_if_data *sdata;
|
||||
int ret = 0;
|
||||
|
||||
@ -73,7 +73,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
void ieee80211_add_pending_skbs(struct ieee80211_local *local,
|
||||
--- a/net/mac80211/iface.c
|
||||
+++ b/net/mac80211/iface.c
|
||||
@@ -481,12 +481,6 @@ static void ieee80211_do_stop(struct iee
|
||||
@@ -482,12 +482,6 @@ static void ieee80211_do_stop(struct iee
|
||||
if (cancel_scan)
|
||||
ieee80211_scan_cancel(local);
|
||||
|
||||
@ -86,7 +86,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
ieee80211_roc_purge(local, sdata);
|
||||
|
||||
switch (sdata->vif.type) {
|
||||
@@ -834,25 +828,6 @@ static void ieee80211_uninit(struct net_
|
||||
@@ -849,25 +843,6 @@ static void ieee80211_uninit(struct net_
|
||||
ieee80211_teardown_sdata(IEEE80211_DEV_TO_SUB_IF(dev));
|
||||
}
|
||||
|
||||
@ -112,7 +112,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
static void
|
||||
ieee80211_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)
|
||||
{
|
||||
@@ -866,7 +841,6 @@ static const struct net_device_ops ieee8
|
||||
@@ -881,7 +856,6 @@ static const struct net_device_ops ieee8
|
||||
.ndo_start_xmit = ieee80211_subif_start_xmit,
|
||||
.ndo_set_rx_mode = ieee80211_set_multicast_list,
|
||||
.ndo_set_mac_address = ieee80211_change_mac,
|
||||
@ -120,7 +120,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
.ndo_get_stats64 = ieee80211_get_stats64,
|
||||
};
|
||||
|
||||
@@ -988,7 +962,6 @@ static const struct net_device_ops ieee8
|
||||
@@ -1003,7 +977,6 @@ static const struct net_device_ops ieee8
|
||||
.ndo_start_xmit = ieee80211_subif_start_xmit_8023,
|
||||
.ndo_set_rx_mode = ieee80211_set_multicast_list,
|
||||
.ndo_set_mac_address = ieee80211_change_mac,
|
||||
@ -128,7 +128,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
.ndo_get_stats64 = ieee80211_get_stats64,
|
||||
#if LINUX_VERSION_IS_GEQ(5,13,0)
|
||||
.ndo_fill_forward_path = ieee80211_netdev_fill_forward_path,
|
||||
@@ -1492,35 +1465,6 @@ int ieee80211_do_open(struct wireless_de
|
||||
@@ -1507,35 +1480,6 @@ int ieee80211_do_open(struct wireless_de
|
||||
|
||||
ieee80211_recalc_ps(local);
|
||||
|
||||
@ -164,7 +164,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
set_bit(SDATA_STATE_RUNNING, &sdata->state);
|
||||
|
||||
return 0;
|
||||
@@ -1550,17 +1494,12 @@ static void ieee80211_if_setup(struct ne
|
||||
@@ -1565,17 +1509,12 @@ static void ieee80211_if_setup(struct ne
|
||||
{
|
||||
ether_setup(dev);
|
||||
dev->priv_flags &= ~IFF_TX_SKB_SHARING;
|
||||
@ -183,7 +183,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
static void ieee80211_iface_process_skb(struct ieee80211_local *local,
|
||||
struct ieee80211_sub_if_data *sdata,
|
||||
struct sk_buff *skb)
|
||||
@@ -2145,9 +2084,7 @@ int ieee80211_if_add(struct ieee80211_lo
|
||||
@@ -2160,9 +2099,7 @@ int ieee80211_if_add(struct ieee80211_lo
|
||||
struct net_device *ndev = NULL;
|
||||
struct ieee80211_sub_if_data *sdata = NULL;
|
||||
struct txq_info *txqi;
|
||||
@ -193,7 +193,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
|
||||
ASSERT_RTNL();
|
||||
|
||||
@@ -2170,30 +2107,18 @@ int ieee80211_if_add(struct ieee80211_lo
|
||||
@@ -2185,30 +2122,18 @@ int ieee80211_if_add(struct ieee80211_lo
|
||||
sizeof(void *));
|
||||
int txq_size = 0;
|
||||
|
||||
@ -466,7 +466,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
}
|
||||
spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
|
||||
|
||||
@@ -5970,10 +5951,9 @@ int ieee80211_tx_control_port(struct wip
|
||||
@@ -5972,10 +5953,9 @@ int ieee80211_tx_control_port(struct wip
|
||||
}
|
||||
|
||||
if (!IS_ERR(sta)) {
|
||||
|
@ -59,7 +59,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
flow = fq_find_fattest_flow(fq);
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -1816,6 +1816,10 @@ struct ieee80211_vif_cfg {
|
||||
@@ -1817,6 +1817,10 @@ struct ieee80211_vif_cfg {
|
||||
* @addr: address of this interface
|
||||
* @p2p: indicates whether this AP or STA interface is a p2p
|
||||
* interface, i.e. a GO or p2p-sta respectively
|
||||
@ -70,7 +70,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
* @driver_flags: flags/capabilities the driver has for this interface,
|
||||
* these need to be set (or cleared) when the interface is added
|
||||
* or, if supported by the driver, the interface type is changed
|
||||
@@ -1855,6 +1859,7 @@ struct ieee80211_vif {
|
||||
@@ -1856,6 +1860,7 @@ struct ieee80211_vif {
|
||||
|
||||
struct ieee80211_txq *txq;
|
||||
|
||||
@ -80,7 +80,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/mac80211/iface.c
|
||||
+++ b/net/mac80211/iface.c
|
||||
@@ -2218,6 +2218,7 @@ int ieee80211_if_add(struct ieee80211_lo
|
||||
@@ -2233,6 +2233,7 @@ int ieee80211_if_add(struct ieee80211_lo
|
||||
ndev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
|
||||
ndev->hw_features |= ndev->features &
|
||||
MAC80211_SUPPORTED_FEATURES_TX;
|
||||
|
@ -13,7 +13,7 @@ Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
|
||||
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -5977,6 +5977,18 @@ void ieee80211_queue_delayed_work(struct
|
||||
@@ -5978,6 +5978,18 @@ void ieee80211_queue_delayed_work(struct
|
||||
unsigned long delay);
|
||||
|
||||
/**
|
||||
|
@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -4201,6 +4201,10 @@ struct ieee80211_prep_tx_info {
|
||||
@@ -4202,6 +4202,10 @@ struct ieee80211_prep_tx_info {
|
||||
* Note that a sta can also be inserted or removed with valid links,
|
||||
* i.e. passed to @sta_add/@sta_state with sta->valid_links not zero.
|
||||
* In fact, cannot change from having valid_links and not having them.
|
||||
@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
*/
|
||||
struct ieee80211_ops {
|
||||
void (*tx)(struct ieee80211_hw *hw,
|
||||
@@ -4556,6 +4560,11 @@ struct ieee80211_ops {
|
||||
@@ -4557,6 +4561,11 @@ struct ieee80211_ops {
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta,
|
||||
u16 old_links, u16 new_links);
|
||||
@ -75,7 +75,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
MAC80211_SUPPORTED_FEATURES_RX)
|
||||
--- a/net/mac80211/iface.c
|
||||
+++ b/net/mac80211/iface.c
|
||||
@@ -834,6 +834,21 @@ ieee80211_get_stats64(struct net_device
|
||||
@@ -849,6 +849,21 @@ ieee80211_get_stats64(struct net_device
|
||||
dev_fetch_sw_netstats(stats, dev->tstats);
|
||||
}
|
||||
|
||||
@ -97,7 +97,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
static const struct net_device_ops ieee80211_dataif_ops = {
|
||||
.ndo_open = ieee80211_open,
|
||||
.ndo_stop = ieee80211_stop,
|
||||
@@ -842,6 +857,7 @@ static const struct net_device_ops ieee8
|
||||
@@ -857,6 +872,7 @@ static const struct net_device_ops ieee8
|
||||
.ndo_set_rx_mode = ieee80211_set_multicast_list,
|
||||
.ndo_set_mac_address = ieee80211_change_mac,
|
||||
.ndo_get_stats64 = ieee80211_get_stats64,
|
||||
@ -105,7 +105,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
};
|
||||
|
||||
#if LINUX_VERSION_IS_GEQ(5,2,0)
|
||||
@@ -966,6 +982,7 @@ static const struct net_device_ops ieee8
|
||||
@@ -981,6 +997,7 @@ static const struct net_device_ops ieee8
|
||||
#if LINUX_VERSION_IS_GEQ(5,13,0)
|
||||
.ndo_fill_forward_path = ieee80211_netdev_fill_forward_path,
|
||||
#endif
|
||||
|
@ -12,7 +12,7 @@ Reviewed-by: Greenman, Gregory <gregory.greenman@intel.com>
|
||||
|
||||
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
|
||||
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
|
||||
@@ -4844,9 +4844,6 @@ static void iwl_mvm_mac_flush(struct iee
|
||||
@@ -4848,9 +4848,6 @@ static void iwl_mvm_mac_flush(struct iee
|
||||
return;
|
||||
}
|
||||
|
||||
@ -22,7 +22,7 @@ Reviewed-by: Greenman, Gregory <gregory.greenman@intel.com>
|
||||
/* Make sure we're done with the deferred traffic before flushing */
|
||||
flush_work(&mvm->add_stream_wk);
|
||||
|
||||
@@ -4864,9 +4861,6 @@ static void iwl_mvm_mac_flush(struct iee
|
||||
@@ -4868,9 +4865,6 @@ static void iwl_mvm_mac_flush(struct iee
|
||||
if (mvmsta->vif != vif)
|
||||
continue;
|
||||
|
||||
|
@ -12,7 +12,7 @@ Reviewed-by: Greenman, Gregory <gregory.greenman@intel.com>
|
||||
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -3927,6 +3927,10 @@ struct ieee80211_prep_tx_info {
|
||||
@@ -3928,6 +3928,10 @@ struct ieee80211_prep_tx_info {
|
||||
* Note that vif can be NULL.
|
||||
* The callback can sleep.
|
||||
*
|
||||
@ -23,7 +23,7 @@ Reviewed-by: Greenman, Gregory <gregory.greenman@intel.com>
|
||||
* @channel_switch: Drivers that need (or want) to offload the channel
|
||||
* switch operation for CSAs received from the AP may implement this
|
||||
* callback. They must then call ieee80211_chswitch_done() to indicate
|
||||
@@ -4381,6 +4385,8 @@ struct ieee80211_ops {
|
||||
@@ -4382,6 +4386,8 @@ struct ieee80211_ops {
|
||||
#endif
|
||||
void (*flush)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
u32 queues, bool drop);
|
||||
|
@ -11,7 +11,7 @@ Reviewed-by: Greenman, Gregory <gregory.greenman@intel.com>
|
||||
|
||||
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
|
||||
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
|
||||
@@ -4880,6 +4880,31 @@ static void iwl_mvm_mac_flush(struct iee
|
||||
@@ -4887,6 +4887,31 @@ static void iwl_mvm_mac_flush(struct iee
|
||||
iwl_trans_wait_tx_queues_empty(mvm->trans, msk);
|
||||
}
|
||||
|
||||
@ -43,7 +43,7 @@ Reviewed-by: Greenman, Gregory <gregory.greenman@intel.com>
|
||||
static int iwl_mvm_mac_get_survey(struct ieee80211_hw *hw, int idx,
|
||||
struct survey_info *survey)
|
||||
{
|
||||
@@ -5407,6 +5432,7 @@ const struct ieee80211_ops iwl_mvm_hw_op
|
||||
@@ -5414,6 +5439,7 @@ const struct ieee80211_ops iwl_mvm_hw_op
|
||||
.mgd_complete_tx = iwl_mvm_mac_mgd_complete_tx,
|
||||
.mgd_protect_tdls_discover = iwl_mvm_mac_mgd_protect_tdls_discover,
|
||||
.flush = iwl_mvm_mac_flush,
|
||||
|
@ -38,7 +38,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -5265,6 +5265,74 @@ ieee80211_beacon_get_template(struct iee
|
||||
@@ -5266,6 +5266,74 @@ ieee80211_beacon_get_template(struct iee
|
||||
unsigned int link_id);
|
||||
|
||||
/**
|
||||
@ -129,7 +129,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
}
|
||||
|
||||
new = kzalloc(size, GFP_KERNEL);
|
||||
@@ -3396,8 +3396,11 @@ cfg80211_beacon_dup(struct cfg80211_beac
|
||||
@@ -3397,8 +3397,11 @@ cfg80211_beacon_dup(struct cfg80211_beac
|
||||
|
||||
len = beacon->head_len + beacon->tail_len + beacon->beacon_ies_len +
|
||||
beacon->proberesp_ies_len + beacon->assocresp_ies_len +
|
||||
@ -222,7 +222,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
offs->mbssid_off = skb->len - mbssid_len;
|
||||
}
|
||||
|
||||
@@ -5288,12 +5298,51 @@ ieee80211_beacon_get_ap(struct ieee80211
|
||||
@@ -5290,12 +5300,51 @@ ieee80211_beacon_get_ap(struct ieee80211
|
||||
return skb;
|
||||
}
|
||||
|
||||
@ -275,7 +275,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
{
|
||||
struct ieee80211_local *local = hw_to_local(hw);
|
||||
struct beacon_data *beacon = NULL;
|
||||
@@ -5322,8 +5371,29 @@ __ieee80211_beacon_get(struct ieee80211_
|
||||
@@ -5324,8 +5373,29 @@ __ieee80211_beacon_get(struct ieee80211_
|
||||
if (!beacon)
|
||||
goto out;
|
||||
|
||||
@ -307,7 +307,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
} else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) {
|
||||
struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
|
||||
struct ieee80211_hdr *hdr;
|
||||
@@ -5411,10 +5481,50 @@ ieee80211_beacon_get_template(struct iee
|
||||
@@ -5413,10 +5483,50 @@ ieee80211_beacon_get_template(struct iee
|
||||
struct ieee80211_mutable_offsets *offs,
|
||||
unsigned int link_id)
|
||||
{
|
||||
@ -359,7 +359,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
struct sk_buff *ieee80211_beacon_get_tim(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
u16 *tim_offset, u16 *tim_length,
|
||||
@@ -5422,7 +5532,9 @@ struct sk_buff *ieee80211_beacon_get_tim
|
||||
@@ -5424,7 +5534,9 @@ struct sk_buff *ieee80211_beacon_get_tim
|
||||
{
|
||||
struct ieee80211_mutable_offsets offs = {};
|
||||
struct sk_buff *bcn = __ieee80211_beacon_get(hw, vif, &offs, false,
|
||||
|
@ -113,7 +113,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
{
|
||||
--- a/net/wireless/core.h
|
||||
+++ b/net/wireless/core.h
|
||||
@@ -497,6 +497,8 @@ void cfg80211_set_dfs_state(struct wiphy
|
||||
@@ -491,6 +491,8 @@ void cfg80211_set_dfs_state(struct wiphy
|
||||
enum nl80211_dfs_state dfs_state);
|
||||
|
||||
void cfg80211_dfs_channels_update_work(struct work_struct *work);
|
||||
|
@ -76,7 +76,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
|
||||
--- a/net/wireless/core.h
|
||||
+++ b/net/wireless/core.h
|
||||
@@ -283,6 +283,8 @@ struct cfg80211_event {
|
||||
@@ -277,6 +277,8 @@ struct cfg80211_event {
|
||||
} ij;
|
||||
struct {
|
||||
u8 bssid[ETH_ALEN];
|
||||
@ -85,7 +85,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
} pa;
|
||||
};
|
||||
};
|
||||
@@ -427,7 +429,8 @@ int cfg80211_disconnect(struct cfg80211_
|
||||
@@ -421,7 +423,8 @@ int cfg80211_disconnect(struct cfg80211_
|
||||
bool wextev);
|
||||
void __cfg80211_roamed(struct wireless_dev *wdev,
|
||||
struct cfg80211_roam_info *info);
|
||||
@ -97,7 +97,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
void cfg80211_autodisconnect_wk(struct work_struct *work);
|
||||
--- a/net/wireless/nl80211.c
|
||||
+++ b/net/wireless/nl80211.c
|
||||
@@ -18022,7 +18022,8 @@ void nl80211_send_roamed(struct cfg80211
|
||||
@@ -18036,7 +18036,8 @@ void nl80211_send_roamed(struct cfg80211
|
||||
}
|
||||
|
||||
void nl80211_send_port_authorized(struct cfg80211_registered_device *rdev,
|
||||
@ -107,7 +107,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
{
|
||||
struct sk_buff *msg;
|
||||
void *hdr;
|
||||
@@ -18042,6 +18043,11 @@ void nl80211_send_port_authorized(struct
|
||||
@@ -18056,6 +18057,11 @@ void nl80211_send_port_authorized(struct
|
||||
nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, bssid))
|
||||
goto nla_put_failure;
|
||||
|
||||
@ -133,7 +133,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
const u8 *ie, size_t ie_len, bool from_ap);
|
||||
--- a/net/wireless/sme.c
|
||||
+++ b/net/wireless/sme.c
|
||||
@@ -1266,7 +1266,8 @@ out:
|
||||
@@ -1267,7 +1267,8 @@ out:
|
||||
}
|
||||
EXPORT_SYMBOL(cfg80211_roamed);
|
||||
|
||||
@ -143,7 +143,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
{
|
||||
ASSERT_WDEV_LOCK(wdev);
|
||||
|
||||
@@ -1279,11 +1280,11 @@ void __cfg80211_port_authorized(struct w
|
||||
@@ -1280,11 +1281,11 @@ void __cfg80211_port_authorized(struct w
|
||||
return;
|
||||
|
||||
nl80211_send_port_authorized(wiphy_to_rdev(wdev->wiphy), wdev->netdev,
|
||||
@ -157,7 +157,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
{
|
||||
struct wireless_dev *wdev = dev->ieee80211_ptr;
|
||||
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
|
||||
@@ -1293,12 +1294,15 @@ void cfg80211_port_authorized(struct net
|
||||
@@ -1294,12 +1295,15 @@ void cfg80211_port_authorized(struct net
|
||||
if (WARN_ON(!bssid))
|
||||
return;
|
||||
|
||||
|
@ -18,7 +18,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -1477,6 +1477,7 @@ enum mac80211_rx_encoding {
|
||||
@@ -1478,6 +1478,7 @@ enum mac80211_rx_encoding {
|
||||
RX_ENC_HT,
|
||||
RX_ENC_VHT,
|
||||
RX_ENC_HE,
|
||||
@ -26,7 +26,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -1510,7 +1511,7 @@ enum mac80211_rx_encoding {
|
||||
@@ -1511,7 +1512,7 @@ enum mac80211_rx_encoding {
|
||||
* @antenna: antenna used
|
||||
* @rate_idx: index of data rate into band's supported rates or MCS index if
|
||||
* HT or VHT is used (%RX_FLAG_HT/%RX_FLAG_VHT)
|
||||
@ -35,7 +35,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
* @flag: %RX_FLAG_\*
|
||||
* @encoding: &enum mac80211_rx_encoding
|
||||
* @bw: &enum rate_info_bw
|
||||
@@ -1518,6 +1519,8 @@ enum mac80211_rx_encoding {
|
||||
@@ -1519,6 +1520,8 @@ enum mac80211_rx_encoding {
|
||||
* @he_ru: HE RU, from &enum nl80211_he_ru_alloc
|
||||
* @he_gi: HE GI, from &enum nl80211_he_gi
|
||||
* @he_dcm: HE DCM value
|
||||
@ -44,7 +44,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
* @rx_flags: internal RX flags for mac80211
|
||||
* @ampdu_reference: A-MPDU reference number, must be a different value for
|
||||
* each A-MPDU but the same for each subframe within one A-MPDU
|
||||
@@ -1539,8 +1542,18 @@ struct ieee80211_rx_status {
|
||||
@@ -1540,8 +1543,18 @@ struct ieee80211_rx_status {
|
||||
u32 flag;
|
||||
u16 freq: 13, freq_offset: 1;
|
||||
u8 enc_flags;
|
||||
@ -157,7 +157,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
return STA_STATS_RATE_INVALID;
|
||||
--- a/net/mac80211/util.c
|
||||
+++ b/net/mac80211/util.c
|
||||
@@ -3902,6 +3902,19 @@ u64 ieee80211_calculate_rx_timestamp(str
|
||||
@@ -3904,6 +3904,19 @@ u64 ieee80211_calculate_rx_timestamp(str
|
||||
|
||||
/* Fill cfg80211 rate info */
|
||||
switch (status->encoding) {
|
||||
|
@ -62,7 +62,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
bool mu_mimo_owner;
|
||||
--- a/net/mac80211/cfg.c
|
||||
+++ b/net/mac80211/cfg.c
|
||||
@@ -4197,7 +4197,7 @@ static int ieee80211_set_ap_chanwidth(st
|
||||
@@ -4198,7 +4198,7 @@ static int ieee80211_set_ap_chanwidth(st
|
||||
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
struct ieee80211_link_data *link;
|
||||
int ret;
|
||||
@ -73,7 +73,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
|
||||
--- a/net/mac80211/chan.c
|
||||
+++ b/net/mac80211/chan.c
|
||||
@@ -1935,7 +1935,7 @@ int ieee80211_link_use_reserved_context(
|
||||
@@ -1937,7 +1937,7 @@ int ieee80211_link_use_reserved_context(
|
||||
|
||||
int ieee80211_link_change_bandwidth(struct ieee80211_link_data *link,
|
||||
const struct cfg80211_chan_def *chandef,
|
||||
|
@ -152,7 +152,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
if (!cfg80211_reg_can_beacon_relax(&rdev->wiphy, ¶ms->chandef,
|
||||
wdev->iftype)) {
|
||||
err = -EINVAL;
|
||||
@@ -10107,6 +10131,14 @@ skip_beacons:
|
||||
@@ -10121,6 +10145,14 @@ skip_beacons:
|
||||
if (info->attrs[NL80211_ATTR_CH_SWITCH_BLOCK_TX])
|
||||
params.block_tx = true;
|
||||
|
||||
|
@ -91,7 +91,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
* ieee80211_operating_class_to_band - convert operating class to band
|
||||
--- a/net/mac80211/cfg.c
|
||||
+++ b/net/mac80211/cfg.c
|
||||
@@ -3612,7 +3612,8 @@ static int __ieee80211_csa_finalize(stru
|
||||
@@ -3613,7 +3613,8 @@ static int __ieee80211_csa_finalize(stru
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
@ -101,7 +101,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -3884,7 +3885,7 @@ __ieee80211_channel_switch(struct wiphy
|
||||
@@ -3885,7 +3886,7 @@ __ieee80211_channel_switch(struct wiphy
|
||||
|
||||
cfg80211_ch_switch_started_notify(sdata->dev,
|
||||
&sdata->deflink.csa_chandef, 0,
|
||||
@ -132,7 +132,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
/* use driver's channel switch callback */
|
||||
--- a/net/wireless/nl80211.c
|
||||
+++ b/net/wireless/nl80211.c
|
||||
@@ -19081,7 +19081,7 @@ static void nl80211_ch_switch_notify(str
|
||||
@@ -19095,7 +19095,7 @@ static void nl80211_ch_switch_notify(str
|
||||
struct cfg80211_chan_def *chandef,
|
||||
gfp_t gfp,
|
||||
enum nl80211_commands notif,
|
||||
@ -141,7 +141,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
{
|
||||
struct wireless_dev *wdev = netdev->ieee80211_ptr;
|
||||
struct sk_buff *msg;
|
||||
@@ -19115,6 +19115,9 @@ static void nl80211_ch_switch_notify(str
|
||||
@@ -19129,6 +19129,9 @@ static void nl80211_ch_switch_notify(str
|
||||
goto nla_put_failure;
|
||||
}
|
||||
|
||||
@ -151,7 +151,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
genlmsg_end(msg, hdr);
|
||||
|
||||
genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0,
|
||||
@@ -19127,7 +19130,7 @@ static void nl80211_ch_switch_notify(str
|
||||
@@ -19141,7 +19144,7 @@ static void nl80211_ch_switch_notify(str
|
||||
|
||||
void cfg80211_ch_switch_notify(struct net_device *dev,
|
||||
struct cfg80211_chan_def *chandef,
|
||||
@ -160,7 +160,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
{
|
||||
struct wireless_dev *wdev = dev->ieee80211_ptr;
|
||||
struct wiphy *wiphy = wdev->wiphy;
|
||||
@@ -19136,7 +19139,7 @@ void cfg80211_ch_switch_notify(struct ne
|
||||
@@ -19150,7 +19153,7 @@ void cfg80211_ch_switch_notify(struct ne
|
||||
ASSERT_WDEV_LOCK(wdev);
|
||||
WARN_INVALID_LINK_ID(wdev, link_id);
|
||||
|
||||
@ -169,7 +169,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
|
||||
switch (wdev->iftype) {
|
||||
case NL80211_IFTYPE_STATION:
|
||||
@@ -19164,14 +19167,15 @@ void cfg80211_ch_switch_notify(struct ne
|
||||
@@ -19178,14 +19181,15 @@ void cfg80211_ch_switch_notify(struct ne
|
||||
cfg80211_sched_dfs_chan_update(rdev);
|
||||
|
||||
nl80211_ch_switch_notify(rdev, dev, link_id, chandef, GFP_KERNEL,
|
||||
@ -187,7 +187,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
{
|
||||
struct wireless_dev *wdev = dev->ieee80211_ptr;
|
||||
struct wiphy *wiphy = wdev->wiphy;
|
||||
@@ -19180,11 +19184,13 @@ void cfg80211_ch_switch_started_notify(s
|
||||
@@ -19194,11 +19198,13 @@ void cfg80211_ch_switch_started_notify(s
|
||||
ASSERT_WDEV_LOCK(wdev);
|
||||
WARN_INVALID_LINK_ID(wdev, link_id);
|
||||
|
||||
|
@ -59,7 +59,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP &&
|
||||
params->mbssid_config.tx_wdev) {
|
||||
err = ieee80211_set_ap_mbssid_options(sdata,
|
||||
@@ -3571,6 +3576,12 @@ static int __ieee80211_csa_finalize(stru
|
||||
@@ -3572,6 +3577,12 @@ static int __ieee80211_csa_finalize(stru
|
||||
lockdep_assert_held(&local->mtx);
|
||||
lockdep_assert_held(&local->chanctx_mtx);
|
||||
|
||||
@ -72,7 +72,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
/*
|
||||
* using reservation isn't immediate as it may be deferred until later
|
||||
* with multi-vif. once reservation is complete it will re-schedule the
|
||||
@@ -3613,7 +3624,7 @@ static int __ieee80211_csa_finalize(stru
|
||||
@@ -3614,7 +3625,7 @@ static int __ieee80211_csa_finalize(stru
|
||||
return err;
|
||||
|
||||
cfg80211_ch_switch_notify(sdata->dev, &sdata->deflink.csa_chandef, 0,
|
||||
@ -81,7 +81,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -3875,9 +3886,13 @@ __ieee80211_channel_switch(struct wiphy
|
||||
@@ -3876,9 +3887,13 @@ __ieee80211_channel_switch(struct wiphy
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -95,7 +95,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
|
||||
if (sdata->deflink.csa_block_tx)
|
||||
ieee80211_stop_vif_queues(local, sdata,
|
||||
@@ -3885,7 +3900,8 @@ __ieee80211_channel_switch(struct wiphy
|
||||
@@ -3886,7 +3901,8 @@ __ieee80211_channel_switch(struct wiphy
|
||||
|
||||
cfg80211_ch_switch_started_notify(sdata->dev,
|
||||
&sdata->deflink.csa_chandef, 0,
|
||||
|
@ -17,7 +17,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
|
||||
--- a/net/mac80211/util.c
|
||||
+++ b/net/mac80211/util.c
|
||||
@@ -2497,21 +2497,55 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
@@ -2499,21 +2499,55 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
|
||||
/* Finally also reconfigure all the BSS information */
|
||||
list_for_each_entry(sdata, &local->interfaces, list) {
|
||||
@ -77,7 +77,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
}
|
||||
|
||||
switch (sdata->vif.type) {
|
||||
@@ -2531,42 +2565,42 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
@@ -2533,42 +2567,42 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
&sdata->deflink.tx_conf[i]);
|
||||
break;
|
||||
}
|
||||
@ -150,7 +150,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
break;
|
||||
case NL80211_IFTYPE_OCB:
|
||||
changed |= BSS_CHANGED_OCB;
|
||||
@@ -2601,6 +2635,7 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
@@ -2603,6 +2637,7 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
case NL80211_IFTYPE_NAN:
|
||||
res = ieee80211_reconfig_nan(sdata);
|
||||
if (res < 0) {
|
||||
@ -158,7 +158,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
ieee80211_handle_reconfig_failure(local);
|
||||
return res;
|
||||
}
|
||||
@@ -2618,6 +2653,10 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
@@ -2620,6 +2655,10 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
WARN_ON(1);
|
||||
break;
|
||||
}
|
||||
|
@ -17,7 +17,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
|
||||
--- a/net/mac80211/util.c
|
||||
+++ b/net/mac80211/util.c
|
||||
@@ -2348,6 +2348,35 @@ static int ieee80211_reconfig_nan(struct
|
||||
@@ -2350,6 +2350,35 @@ static int ieee80211_reconfig_nan(struct
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -53,7 +53,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
int ieee80211_reconfig(struct ieee80211_local *local)
|
||||
{
|
||||
struct ieee80211_hw *hw = &local->hw;
|
||||
@@ -2610,7 +2639,13 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
@@ -2612,7 +2641,13 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
changed |= BSS_CHANGED_IBSS;
|
||||
fallthrough;
|
||||
case NL80211_IFTYPE_AP:
|
||||
@ -68,7 +68,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
|
||||
if (sdata->vif.bss_conf.ftm_responder == 1 &&
|
||||
wiphy_ext_feature_isset(sdata->local->hw.wiphy,
|
||||
@@ -2620,6 +2655,13 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
@@ -2622,6 +2657,13 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP) {
|
||||
changed |= BSS_CHANGED_AP_PROBE_RESP;
|
||||
|
||||
|
@ -33,7 +33,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -1936,6 +1936,27 @@ struct ieee80211_vif {
|
||||
@@ -1937,6 +1937,27 @@ struct ieee80211_vif {
|
||||
u8 drv_priv[] __aligned(sizeof(void *));
|
||||
};
|
||||
|
||||
@ -132,7 +132,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
chanctx_conf = rcu_dereference(sdata->vif.bss_conf.chanctx_conf);
|
||||
--- a/net/mac80211/iface.c
|
||||
+++ b/net/mac80211/iface.c
|
||||
@@ -542,7 +542,7 @@ static void ieee80211_do_stop(struct iee
|
||||
@@ -543,7 +543,7 @@ static void ieee80211_do_stop(struct iee
|
||||
cancel_work_sync(&sdata->recalc_smps);
|
||||
|
||||
sdata_lock(sdata);
|
||||
@ -141,7 +141,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
"destroying interface with valid links 0x%04x\n",
|
||||
sdata->vif.valid_links);
|
||||
|
||||
@@ -1855,7 +1855,7 @@ static int ieee80211_runtime_change_ifty
|
||||
@@ -1870,7 +1870,7 @@ static int ieee80211_runtime_change_ifty
|
||||
return -EBUSY;
|
||||
|
||||
/* for now, don't support changing while links exist */
|
||||
@ -456,7 +456,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
chanctx_conf =
|
||||
rcu_dereference(sdata->vif.bss_conf.chanctx_conf);
|
||||
if (unlikely(!chanctx_conf)) {
|
||||
@@ -6008,7 +6008,7 @@ void __ieee80211_tx_skb_tid_band(struct
|
||||
@@ -6010,7 +6010,7 @@ void __ieee80211_tx_skb_tid_band(struct
|
||||
BUILD_BUG_ON(!FIELD_FIT(IEEE80211_TX_CTRL_MLO_LINK,
|
||||
IEEE80211_LINK_UNSPECIFIED));
|
||||
|
||||
@ -465,7 +465,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
link = 0;
|
||||
} else if (link_id >= 0) {
|
||||
link = link_id;
|
||||
@@ -6054,7 +6054,7 @@ void ieee80211_tx_skb_tid(struct ieee802
|
||||
@@ -6056,7 +6056,7 @@ void ieee80211_tx_skb_tid(struct ieee802
|
||||
enum nl80211_band band;
|
||||
|
||||
rcu_read_lock();
|
||||
@ -476,7 +476,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
rcu_dereference(sdata->vif.bss_conf.chanctx_conf);
|
||||
--- a/net/mac80211/util.c
|
||||
+++ b/net/mac80211/util.c
|
||||
@@ -1701,7 +1701,7 @@ void ieee80211_send_auth(struct ieee8021
|
||||
@@ -1703,7 +1703,7 @@ void ieee80211_send_auth(struct ieee8021
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
struct sk_buff *skb;
|
||||
struct ieee80211_mgmt *mgmt;
|
||||
@ -485,7 +485,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
struct {
|
||||
u8 id;
|
||||
u8 len;
|
||||
@@ -2546,7 +2546,7 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
@@ -2548,7 +2548,7 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
continue;
|
||||
|
||||
sdata_lock(sdata);
|
||||
@ -494,7 +494,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
struct ieee80211_bss_conf *old[IEEE80211_MLD_MAX_NUM_LINKS] = {
|
||||
[0] = &sdata->vif.bss_conf,
|
||||
};
|
||||
@@ -2566,7 +2566,7 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
@@ -2568,7 +2568,7 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
for (link_id = 0;
|
||||
link_id < ARRAY_SIZE(sdata->vif.link_conf);
|
||||
link_id++) {
|
||||
@ -503,7 +503,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
!(sdata->vif.active_links & BIT(link_id)))
|
||||
continue;
|
||||
|
||||
@@ -2598,12 +2598,12 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
@@ -2600,12 +2600,12 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
if (sdata->vif.bss_conf.mu_mimo_owner)
|
||||
changed |= BSS_CHANGED_MU_GROUPS;
|
||||
|
||||
@ -518,7 +518,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
changed |= BSS_CHANGED_ASSOC |
|
||||
BSS_CHANGED_ARP_FILTER |
|
||||
BSS_CHANGED_PS;
|
||||
@@ -2641,7 +2641,7 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
@@ -2643,7 +2643,7 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
case NL80211_IFTYPE_AP:
|
||||
changed |= BSS_CHANGED_P2P_PS;
|
||||
|
||||
@ -527,7 +527,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
ieee80211_vif_cfg_change_notify(sdata,
|
||||
BSS_CHANGED_SSID);
|
||||
else
|
||||
@@ -2655,7 +2655,7 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
@@ -2657,7 +2657,7 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP) {
|
||||
changed |= BSS_CHANGED_AP_PROBE_RESP;
|
||||
|
||||
|
@ -18,7 +18,7 @@
|
||||
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -1714,6 +1714,7 @@ enum ieee80211_smps_mode {
|
||||
@@ -1715,6 +1715,7 @@ enum ieee80211_smps_mode {
|
||||
*
|
||||
* @power_level: requested transmit power (in dBm), backward compatibility
|
||||
* value only that is set to the minimum of all interfaces
|
||||
@ -26,7 +26,7 @@
|
||||
*
|
||||
* @chandef: the channel definition to tune to
|
||||
* @radar_enabled: whether radar detection is enabled
|
||||
@@ -1734,6 +1735,7 @@ enum ieee80211_smps_mode {
|
||||
@@ -1735,6 +1736,7 @@ enum ieee80211_smps_mode {
|
||||
struct ieee80211_conf {
|
||||
u32 flags;
|
||||
int power_level, dynamic_ps_timeout;
|
||||
@ -56,7 +56,7 @@
|
||||
__NL80211_ATTR_AFTER_LAST,
|
||||
--- a/net/mac80211/cfg.c
|
||||
+++ b/net/mac80211/cfg.c
|
||||
@@ -3079,6 +3079,19 @@ static int ieee80211_get_tx_power(struct
|
||||
@@ -3080,6 +3080,19 @@ static int ieee80211_get_tx_power(struct
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -76,7 +76,7 @@
|
||||
static void ieee80211_rfkill_poll(struct wiphy *wiphy)
|
||||
{
|
||||
struct ieee80211_local *local = wiphy_priv(wiphy);
|
||||
@@ -5009,6 +5022,7 @@ const struct cfg80211_ops mac80211_confi
|
||||
@@ -5010,6 +5023,7 @@ const struct cfg80211_ops mac80211_confi
|
||||
.set_wiphy_params = ieee80211_set_wiphy_params,
|
||||
.set_tx_power = ieee80211_set_tx_power,
|
||||
.get_tx_power = ieee80211_get_tx_power,
|
||||
|
Loading…
Reference in New Issue
Block a user