mirror of
https://github.com/Dasharo/linux.git
synced 2026-03-06 15:25:10 -08:00
Merge tag 'wireless-2025-03-12' of https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless
Johannes berg says: ==================== Few more fixes: - cfg80211/mac80211 - stop possible runaway wiphy worker - EHT should not use reserved MPDU size bits - don't run worker for stopped interfaces - fix SA Query processing with MLO - fix lookup of assoc link BSS entries - correct station flush on unauthorize - iwlwifi: - TSO fixes - fix non-MSI-X platforms - stop possible runaway restart worker - rejigger maintainers so I'm not CC'ed on everything ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
37
MAINTAINERS
37
MAINTAINERS
@@ -124,6 +124,7 @@ F: include/net/ieee80211_radiotap.h
|
||||
F: include/net/iw_handler.h
|
||||
F: include/net/wext.h
|
||||
F: include/uapi/linux/nl80211.h
|
||||
N: include/uapi/linux/nl80211-.*
|
||||
F: include/uapi/linux/wireless.h
|
||||
F: net/wireless/
|
||||
|
||||
@@ -514,7 +515,7 @@ F: drivers/hwmon/adm1029.c
|
||||
ADM8211 WIRELESS DRIVER
|
||||
L: linux-wireless@vger.kernel.org
|
||||
S: Orphan
|
||||
F: drivers/net/wireless/admtek/adm8211.*
|
||||
F: drivers/net/wireless/admtek/
|
||||
|
||||
ADP1050 HARDWARE MONITOR DRIVER
|
||||
M: Radu Sabau <radu.sabau@analog.com>
|
||||
@@ -6207,7 +6208,7 @@ F: Documentation/process/cve.rst
|
||||
|
||||
CW1200 WLAN driver
|
||||
S: Orphan
|
||||
F: drivers/net/wireless/st/cw1200/
|
||||
F: drivers/net/wireless/st/
|
||||
F: include/linux/platform_data/net-cw1200.h
|
||||
|
||||
CX18 VIDEO4LINUX DRIVER
|
||||
@@ -13997,6 +13998,7 @@ MARVELL LIBERTAS WIRELESS DRIVER
|
||||
L: libertas-dev@lists.infradead.org
|
||||
S: Orphan
|
||||
F: drivers/net/wireless/marvell/libertas/
|
||||
F: drivers/net/wireless/marvell/libertas_tf/
|
||||
|
||||
MARVELL MACCHIATOBIN SUPPORT
|
||||
M: Russell King <linux@armlinux.org.uk>
|
||||
@@ -15666,7 +15668,7 @@ M: Ajay Singh <ajay.kathat@microchip.com>
|
||||
M: Claudiu Beznea <claudiu.beznea@tuxon.dev>
|
||||
L: linux-wireless@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/net/wireless/microchip/wilc1000/
|
||||
F: drivers/net/wireless/microchip/
|
||||
|
||||
MICROSEMI MIPS SOCS
|
||||
M: Alexandre Belloni <alexandre.belloni@bootlin.com>
|
||||
@@ -16452,6 +16454,23 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git
|
||||
F: Documentation/devicetree/bindings/net/wireless/
|
||||
F: drivers/net/wireless/
|
||||
X: drivers/net/wireless/ath/
|
||||
X: drivers/net/wireless/broadcom/
|
||||
X: drivers/net/wireless/intel/
|
||||
X: drivers/net/wireless/intersil/
|
||||
X: drivers/net/wireless/marvell/
|
||||
X: drivers/net/wireless/mediatek/mt76/
|
||||
X: drivers/net/wireless/mediatek/mt7601u/
|
||||
X: drivers/net/wireless/microchip/
|
||||
X: drivers/net/wireless/purelifi/
|
||||
X: drivers/net/wireless/quantenna/
|
||||
X: drivers/net/wireless/ralink/
|
||||
X: drivers/net/wireless/realtek/
|
||||
X: drivers/net/wireless/rsi/
|
||||
X: drivers/net/wireless/silabs/
|
||||
X: drivers/net/wireless/st/
|
||||
X: drivers/net/wireless/ti/
|
||||
X: drivers/net/wireless/zydas/
|
||||
|
||||
NETWORKING [DSA]
|
||||
M: Andrew Lunn <andrew@lunn.ch>
|
||||
@@ -17836,7 +17855,7 @@ M: Christian Lamparter <chunkeey@googlemail.com>
|
||||
L: linux-wireless@vger.kernel.org
|
||||
S: Maintained
|
||||
W: https://wireless.wiki.kernel.org/en/users/Drivers/p54
|
||||
F: drivers/net/wireless/intersil/p54/
|
||||
F: drivers/net/wireless/intersil/
|
||||
|
||||
PACKET SOCKETS
|
||||
M: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
|
||||
@@ -19113,7 +19132,7 @@ PURELIFI PLFXLC DRIVER
|
||||
M: Srinivasan Raju <srini.raju@purelifi.com>
|
||||
L: linux-wireless@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/net/wireless/purelifi/plfxlc/
|
||||
F: drivers/net/wireless/purelifi/
|
||||
|
||||
PVRUSB2 VIDEO4LINUX DRIVER
|
||||
M: Mike Isely <isely@pobox.com>
|
||||
@@ -19664,7 +19683,7 @@ M: Igor Mitsyanko <imitsyanko@quantenna.com>
|
||||
R: Sergey Matyukevich <geomatsi@gmail.com>
|
||||
L: linux-wireless@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/wireless/quantenna
|
||||
F: drivers/net/wireless/quantenna/
|
||||
|
||||
RADEON and AMDGPU DRM DRIVERS
|
||||
M: Alex Deucher <alexander.deucher@amd.com>
|
||||
@@ -19744,7 +19763,7 @@ RALINK RT2X00 WIRELESS LAN DRIVER
|
||||
M: Stanislaw Gruszka <stf_xl@wp.pl>
|
||||
L: linux-wireless@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/wireless/ralink/rt2x00/
|
||||
F: drivers/net/wireless/ralink/
|
||||
|
||||
RAMDISK RAM BLOCK DEVICE DRIVER
|
||||
M: Jens Axboe <axboe@kernel.dk>
|
||||
@@ -21710,7 +21729,7 @@ SILICON LABS WIRELESS DRIVERS (for WFxxx series)
|
||||
M: Jérôme Pouiller <jerome.pouiller@silabs.com>
|
||||
S: Supported
|
||||
F: Documentation/devicetree/bindings/net/wireless/silabs,wfx.yaml
|
||||
F: drivers/net/wireless/silabs/wfx/
|
||||
F: drivers/net/wireless/silabs/
|
||||
|
||||
SILICON MOTION SM712 FRAME BUFFER DRIVER
|
||||
M: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
|
||||
@@ -26210,7 +26229,7 @@ F: mm/zbud.c
|
||||
ZD1211RW WIRELESS DRIVER
|
||||
L: linux-wireless@vger.kernel.org
|
||||
S: Orphan
|
||||
F: drivers/net/wireless/zydas/zd1211rw/
|
||||
F: drivers/net/wireless/zydas/
|
||||
|
||||
ZD1301 MEDIA DRIVER
|
||||
L: linux-media@vger.kernel.org
|
||||
|
||||
@@ -403,6 +403,8 @@ void iwl_trans_op_mode_leave(struct iwl_trans *trans)
|
||||
|
||||
iwl_trans_pcie_op_mode_leave(trans);
|
||||
|
||||
cancel_work_sync(&trans->restart.wk);
|
||||
|
||||
trans->op_mode = NULL;
|
||||
|
||||
trans->state = IWL_TRANS_NO_FW;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
|
||||
/*
|
||||
* Copyright (C) 2012-2014, 2018-2024 Intel Corporation
|
||||
* Copyright (C) 2012-2014, 2018-2025 Intel Corporation
|
||||
* Copyright (C) 2013-2015 Intel Mobile Communications GmbH
|
||||
* Copyright (C) 2016-2017 Intel Deutschland GmbH
|
||||
*/
|
||||
@@ -422,6 +422,8 @@ static int iwl_mvm_load_ucode_wait_alive(struct iwl_mvm *mvm,
|
||||
/* if reached this point, Alive notification was received */
|
||||
iwl_mei_alive_notif(true);
|
||||
|
||||
iwl_trans_fw_alive(mvm->trans, alive_data.scd_base_addr);
|
||||
|
||||
ret = iwl_pnvm_load(mvm->trans, &mvm->notif_wait,
|
||||
&mvm->fw->ucode_capa);
|
||||
if (ret) {
|
||||
@@ -430,8 +432,6 @@ static int iwl_mvm_load_ucode_wait_alive(struct iwl_mvm *mvm,
|
||||
return ret;
|
||||
}
|
||||
|
||||
iwl_trans_fw_alive(mvm->trans, alive_data.scd_base_addr);
|
||||
|
||||
/*
|
||||
* Note: all the queues are enabled as part of the interface
|
||||
* initialization, but in firmware restart scenarios they
|
||||
|
||||
@@ -1869,12 +1869,12 @@ struct sg_table *iwl_pcie_prep_tso(struct iwl_trans *trans, struct sk_buff *skb,
|
||||
unsigned int offset)
|
||||
{
|
||||
struct sg_table *sgt;
|
||||
unsigned int n_segments;
|
||||
unsigned int n_segments = skb_shinfo(skb)->nr_frags + 1;
|
||||
int orig_nents;
|
||||
|
||||
if (WARN_ON_ONCE(skb_has_frag_list(skb)))
|
||||
return NULL;
|
||||
|
||||
n_segments = DIV_ROUND_UP(skb->len - offset, skb_shinfo(skb)->gso_size);
|
||||
*hdr = iwl_pcie_get_page_hdr(trans,
|
||||
hdr_room + __alignof__(struct sg_table) +
|
||||
sizeof(struct sg_table) +
|
||||
@@ -1889,11 +1889,12 @@ struct sg_table *iwl_pcie_prep_tso(struct iwl_trans *trans, struct sk_buff *skb,
|
||||
sg_init_table(sgt->sgl, n_segments);
|
||||
|
||||
/* Only map the data, not the header (it is copied to the TSO page) */
|
||||
sgt->orig_nents = skb_to_sgvec(skb, sgt->sgl, offset,
|
||||
skb->len - offset);
|
||||
if (WARN_ON_ONCE(sgt->orig_nents <= 0))
|
||||
orig_nents = skb_to_sgvec(skb, sgt->sgl, offset, skb->len - offset);
|
||||
if (WARN_ON_ONCE(orig_nents <= 0))
|
||||
return NULL;
|
||||
|
||||
sgt->orig_nents = orig_nents;
|
||||
|
||||
/* And map the entire SKB */
|
||||
if (dma_map_sgtable(trans->dev, sgt, DMA_TO_DEVICE, 0) < 0)
|
||||
return NULL;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/*
|
||||
* EHT handling
|
||||
*
|
||||
* Copyright(c) 2021-2024 Intel Corporation
|
||||
* Copyright(c) 2021-2025 Intel Corporation
|
||||
*/
|
||||
|
||||
#include "ieee80211_i.h"
|
||||
@@ -76,6 +76,13 @@ ieee80211_eht_cap_ie_to_sta_eht_cap(struct ieee80211_sub_if_data *sdata,
|
||||
link_sta->cur_max_bandwidth = ieee80211_sta_cap_rx_bw(link_sta);
|
||||
link_sta->pub->bandwidth = ieee80211_sta_cur_vht_bw(link_sta);
|
||||
|
||||
/*
|
||||
* The MPDU length bits are reserved on all but 2.4 GHz and get set via
|
||||
* VHT (5 GHz) or HE (6 GHz) capabilities.
|
||||
*/
|
||||
if (sband->band != NL80211_BAND_2GHZ)
|
||||
return;
|
||||
|
||||
switch (u8_get_bits(eht_cap->eht_cap_elem.mac_cap_info[0],
|
||||
IEEE80211_EHT_MAC_CAP0_MAX_MPDU_LEN_MASK)) {
|
||||
case IEEE80211_EHT_MAC_CAP0_MAX_MPDU_LEN_11454:
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* Copyright 2007-2010 Johannes Berg <johannes@sipsolutions.net>
|
||||
* Copyright 2013-2014 Intel Mobile Communications GmbH
|
||||
* Copyright(c) 2015 - 2017 Intel Deutschland GmbH
|
||||
* Copyright (C) 2018-2024 Intel Corporation
|
||||
* Copyright (C) 2018-2025 Intel Corporation
|
||||
*/
|
||||
|
||||
#include <linux/jiffies.h>
|
||||
@@ -3329,8 +3329,8 @@ static void ieee80211_process_sa_query_req(struct ieee80211_sub_if_data *sdata,
|
||||
return;
|
||||
}
|
||||
|
||||
if (!ether_addr_equal(mgmt->sa, sdata->deflink.u.mgd.bssid) ||
|
||||
!ether_addr_equal(mgmt->bssid, sdata->deflink.u.mgd.bssid)) {
|
||||
if (!ether_addr_equal(mgmt->sa, sdata->vif.cfg.ap_addr) ||
|
||||
!ether_addr_equal(mgmt->bssid, sdata->vif.cfg.ap_addr)) {
|
||||
/* Not from the current AP or not associated yet. */
|
||||
return;
|
||||
}
|
||||
@@ -3346,9 +3346,9 @@ static void ieee80211_process_sa_query_req(struct ieee80211_sub_if_data *sdata,
|
||||
|
||||
skb_reserve(skb, local->hw.extra_tx_headroom);
|
||||
resp = skb_put_zero(skb, 24);
|
||||
memcpy(resp->da, mgmt->sa, ETH_ALEN);
|
||||
memcpy(resp->da, sdata->vif.cfg.ap_addr, ETH_ALEN);
|
||||
memcpy(resp->sa, sdata->vif.addr, ETH_ALEN);
|
||||
memcpy(resp->bssid, sdata->deflink.u.mgd.bssid, ETH_ALEN);
|
||||
memcpy(resp->bssid, sdata->vif.cfg.ap_addr, ETH_ALEN);
|
||||
resp->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
|
||||
IEEE80211_STYPE_ACTION);
|
||||
skb_put(skb, 1 + sizeof(resp->u.action.u.sa_query));
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
|
||||
* Copyright 2013-2014 Intel Mobile Communications GmbH
|
||||
* Copyright (C) 2015 - 2017 Intel Deutschland GmbH
|
||||
* Copyright (C) 2018-2023 Intel Corporation
|
||||
* Copyright (C) 2018-2024 Intel Corporation
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
@@ -1335,9 +1335,13 @@ static int _sta_info_move_state(struct sta_info *sta,
|
||||
sta->sta.addr, new_state);
|
||||
|
||||
/* notify the driver before the actual changes so it can
|
||||
* fail the transition
|
||||
* fail the transition if the state is increasing.
|
||||
* The driver is required not to fail when the transition
|
||||
* is decreasing the state, so first, do all the preparation
|
||||
* work and only then, notify the driver.
|
||||
*/
|
||||
if (test_sta_flag(sta, WLAN_STA_INSERTED)) {
|
||||
if (new_state > sta->sta_state &&
|
||||
test_sta_flag(sta, WLAN_STA_INSERTED)) {
|
||||
int err = drv_sta_state(sta->local, sta->sdata, sta,
|
||||
sta->sta_state, new_state);
|
||||
if (err)
|
||||
@@ -1413,6 +1417,16 @@ static int _sta_info_move_state(struct sta_info *sta,
|
||||
break;
|
||||
}
|
||||
|
||||
if (new_state < sta->sta_state &&
|
||||
test_sta_flag(sta, WLAN_STA_INSERTED)) {
|
||||
int err = drv_sta_state(sta->local, sta->sdata, sta,
|
||||
sta->sta_state, new_state);
|
||||
|
||||
WARN_ONCE(err,
|
||||
"Driver is not allowed to fail if the sta_state is transitioning down the list: %d\n",
|
||||
err);
|
||||
}
|
||||
|
||||
sta->sta_state = new_state;
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* Copyright 2007 Johannes Berg <johannes@sipsolutions.net>
|
||||
* Copyright 2013-2014 Intel Mobile Communications GmbH
|
||||
* Copyright (C) 2015-2017 Intel Deutschland GmbH
|
||||
* Copyright (C) 2018-2024 Intel Corporation
|
||||
* Copyright (C) 2018-2025 Intel Corporation
|
||||
*
|
||||
* utilities for mac80211
|
||||
*/
|
||||
@@ -2193,8 +2193,10 @@ int ieee80211_reconfig(struct ieee80211_local *local)
|
||||
ieee80211_reconfig_roc(local);
|
||||
|
||||
/* Requeue all works */
|
||||
list_for_each_entry(sdata, &local->interfaces, list)
|
||||
wiphy_work_queue(local->hw.wiphy, &sdata->work);
|
||||
list_for_each_entry(sdata, &local->interfaces, list) {
|
||||
if (ieee80211_sdata_running(sdata))
|
||||
wiphy_work_queue(local->hw.wiphy, &sdata->work);
|
||||
}
|
||||
}
|
||||
|
||||
ieee80211_wake_queues_by_reason(hw, IEEE80211_MAX_QUEUE_MAP,
|
||||
|
||||
@@ -1191,6 +1191,13 @@ void cfg80211_dev_free(struct cfg80211_registered_device *rdev)
|
||||
{
|
||||
struct cfg80211_internal_bss *scan, *tmp;
|
||||
struct cfg80211_beacon_registration *reg, *treg;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&rdev->wiphy_work_lock, flags);
|
||||
WARN_ON(!list_empty(&rdev->wiphy_work_list));
|
||||
spin_unlock_irqrestore(&rdev->wiphy_work_lock, flags);
|
||||
cancel_work_sync(&rdev->wiphy_work);
|
||||
|
||||
rfkill_destroy(rdev->wiphy.rfkill);
|
||||
list_for_each_entry_safe(reg, treg, &rdev->beacon_registrations, list) {
|
||||
list_del(®->list);
|
||||
|
||||
@@ -11123,6 +11123,7 @@ static struct cfg80211_bss *nl80211_assoc_bss(struct cfg80211_registered_device
|
||||
|
||||
static int nl80211_process_links(struct cfg80211_registered_device *rdev,
|
||||
struct cfg80211_assoc_link *links,
|
||||
int assoc_link_id,
|
||||
const u8 *ssid, int ssid_len,
|
||||
struct genl_info *info)
|
||||
{
|
||||
@@ -11153,7 +11154,7 @@ static int nl80211_process_links(struct cfg80211_registered_device *rdev,
|
||||
}
|
||||
links[link_id].bss =
|
||||
nl80211_assoc_bss(rdev, ssid, ssid_len, attrs,
|
||||
link_id, link_id);
|
||||
assoc_link_id, link_id);
|
||||
if (IS_ERR(links[link_id].bss)) {
|
||||
err = PTR_ERR(links[link_id].bss);
|
||||
links[link_id].bss = NULL;
|
||||
@@ -11350,8 +11351,8 @@ static int nl80211_associate(struct sk_buff *skb, struct genl_info *info)
|
||||
req.ap_mld_addr = nla_data(info->attrs[NL80211_ATTR_MLD_ADDR]);
|
||||
ap_addr = req.ap_mld_addr;
|
||||
|
||||
err = nl80211_process_links(rdev, req.links, ssid, ssid_len,
|
||||
info);
|
||||
err = nl80211_process_links(rdev, req.links, req.link_id,
|
||||
ssid, ssid_len, info);
|
||||
if (err)
|
||||
goto free;
|
||||
|
||||
@@ -16506,7 +16507,10 @@ static int nl80211_assoc_ml_reconf(struct sk_buff *skb, struct genl_info *info)
|
||||
|
||||
add_links = 0;
|
||||
if (info->attrs[NL80211_ATTR_MLO_LINKS]) {
|
||||
err = nl80211_process_links(rdev, links, NULL, 0, info);
|
||||
err = nl80211_process_links(rdev, links,
|
||||
/* mark as MLO, but not assoc */
|
||||
IEEE80211_MLD_MAX_NUM_LINKS,
|
||||
NULL, 0, info);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user