mirror of
https://github.com/torvalds/linux.git
synced 2026-05-25 23:52:08 +02:00
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
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEpeA8sTs3M8SN2hR410qiO8sPaAAFAmfRSMgACgkQ10qiO8sP
aACdkw//YrPrch8eZY9YztRekiX6Ad8tuQLciJxEJh4VHMfJd7hk78QB43m1Kf75
FITeMktCD7hjI39vGaWxJSe/eZOj4pf6BSHF2wMX1NbXpEL+drlgL5Z8+NN1Ps3l
qy5z3JIb3EVh4Y4C2xJqP/RbZD4vXU1XoETeJQJeUI8DZgrhtTWrfrrp8PCBRFzB
lM991wplOHyMb05M71njCDwnMqcwZ4A+QyXp2rb8oZuCM59OOM0/kkNTRd+YCJNg
uBlAZuLIU+bipA4Fcq3h17S4CulJDzNjKSfhmDLk9gvO/JgTgYFWruXG8svACMWO
g2frQElM1IHAYVypbQt85PtRvzENU9lcwtR8k2Nijk+wvd3BiZuGRIdhn53FVN1z
mTpNFP/UjBBPyBI7CHQOWw2jJO44/AraENWema4JwQbTqgdhN7Tf79OeTPUsgXz9
0D+PIf57P+uH61AYT9znN1A9t6YSdLh0a7LXGYP3E9dpkwENer5JGbqubWXKkme7
mjQpJsiuJYUEmR8dFDq/6H4UxnYDeA/bSf9xLatmgJoU47lDg+T7eefVULTLGla9
bVN68LxHIcegelwMw45GfGx3pRoRk0qw6/2d1ELfrAw81FrhZ2/kjOeoDWlnJtIy
GZkRTTOBq6nLL4LGGqUXP80q8uillDtJhbddljA/pkupPn69EEk=
=ENOH
-----END PGP SIGNATURE-----
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:
commit
081b575617
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;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user