Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'wireless-2026-02-04' of https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless

Johannes Berg says:

====================
Two last-minute iwlwifi fixes:
- cancel mlo_scan_work on disassoc to avoid
use-after-free/init-after-queue issues
- pause TCM work on suspend to avoid crashing
the FW (and sometimes the host) on resume
with traffic

* tag 'wireless-2026-02-04' of https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless:
wifi: iwlwifi: mvm: pause TCM on fast resume
wifi: iwlwifi: mld: cancel mlo_scan_start_wk
====================

Link: https://patch.msgid.link/20260204113547.159742-4-johannes@sipsolutions.net
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+7 -3
-2
drivers/net/wireless/intel/iwlwifi/mld/iface.c
··· 55 55 56 56 ieee80211_iter_keys(mld->hw, vif, iwl_mld_cleanup_keys_iter, NULL); 57 57 58 - wiphy_delayed_work_cancel(mld->wiphy, &mld_vif->mlo_scan_start_wk); 59 - 60 58 CLEANUP_STRUCT(mld_vif); 61 59 } 62 60
+2
drivers/net/wireless/intel/iwlwifi/mld/mac80211.c
··· 1759 1759 wiphy_work_cancel(mld->wiphy, &mld_vif->emlsr.unblock_tpt_wk); 1760 1760 wiphy_delayed_work_cancel(mld->wiphy, 1761 1761 &mld_vif->emlsr.check_tpt_wk); 1762 + wiphy_delayed_work_cancel(mld->wiphy, 1763 + &mld_vif->mlo_scan_start_wk); 1762 1764 1763 1765 iwl_mld_reset_cca_40mhz_workaround(mld, vif); 1764 1766 iwl_mld_smps_workaround(mld, vif, true);
+5 -1
drivers/net/wireless/intel/iwlwifi/mvm/d3.c
··· 1 1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause 2 2 /* 3 - * Copyright (C) 2012-2014, 2018-2025 Intel Corporation 3 + * Copyright (C) 2012-2014, 2018-2026 Intel Corporation 4 4 * Copyright (C) 2013-2015 Intel Mobile Communications GmbH 5 5 * Copyright (C) 2016-2017 Intel Deutschland GmbH 6 6 */ ··· 3239 3239 3240 3240 IWL_DEBUG_WOWLAN(mvm, "Starting fast suspend flow\n"); 3241 3241 3242 + iwl_mvm_pause_tcm(mvm, true); 3243 + 3242 3244 mvm->fast_resume = true; 3243 3245 set_bit(IWL_MVM_STATUS_IN_D3, &mvm->status); 3244 3246 ··· 3296 3294 IWL_ERR(mvm, "Couldn't get the d3 notif %d\n", ret); 3297 3295 mvm->trans->state = IWL_TRANS_NO_FW; 3298 3296 } 3297 + 3298 + iwl_mvm_resume_tcm(mvm); 3299 3299 3300 3300 out: 3301 3301 clear_bit(IWL_MVM_STATUS_IN_D3, &mvm->status);