From patchwork Sat Mar 8 22:01:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 871849 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1C98018DB33 for ; Sat, 8 Mar 2025 22:01:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471301; cv=none; b=soKVA4TU6mmh+IwGLW6yCLXPMF0RJ4OwjvEYibP1/FgOFvWQCqb7CXjwC6HgtqERLjSKcIWW20S4sUdVVdNFbqLogOFQ+5oiXSiHAIOpuj5s96cNVMmKC2mysMXA+4Zwj3qXRuL7/lhNuPA+WAMPq4HbQDdTWAuBXYt47qf40i0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471301; c=relaxed/simple; bh=E5Z4OPGNz8H9581BuBj0UoVBdzsVdMpx+AwxQ29Ihwk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=juvaGg3zhyPGgEJQFsU6Q+AcgVJ7O1p0Ds9G4EF3DH0vjh5LAluzdYA7yZZuzuNgATvYxNZa0B2LBUgaXz9VMW6xlFVngXthPRqUwLWkJ16E4Wvhv2EugNpEx1tUvPwVwTI+YXDaMMPK1CX5EqtqIf9K0oYj6HMBeBrs0Cb6keU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=CJbyreTl; arc=none smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="CJbyreTl" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741471300; x=1773007300; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=E5Z4OPGNz8H9581BuBj0UoVBdzsVdMpx+AwxQ29Ihwk=; b=CJbyreTlpXV9/H0THkqaQ2w4m0UufjR16gUn0Xq/tocteLL90skVf7IQ qO8Nsy13tIQSJOcjwCfIY5BVj0EHGqH0JvxIT1ImJcbCrZpMH+rcLx119 gmVpRFx/ZDdvMSXzCGs0qrHhA4/Nr3XV0/FMLnqkIF4fSZpVYmK0WL0L5 u1pzLC0BGN0zUlt6G8m0HiH49gaj2gQ5+E/aEMM041zr4NPlIgMZk6ED6 o6dvL3PdiEhiUBs9NIp4BuDWeuIKfrUt7eQdMrN+Nt+N0kJYMSMvo5ZhI hEDc2PZyM9bhkdCWDdgDGVnwK9BWllXnbFOtgbvSSna3BOgHidqa77Xyy A==; X-CSE-ConnectionGUID: NETaJXCERMqFNQkGFXZRcg== X-CSE-MsgGUID: CxcnufoPSEWxwx8Vkmb6Lw== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="42540613" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="42540613" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:39 -0800 X-CSE-ConnectionGUID: LxBRsgRhQg2AuE5K9Z+5/g== X-CSE-MsgGUID: f5zKv7WPTzqlGy3/8EJjkw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="120352062" Received: from weis0040.iil.intel.com ([10.12.217.108]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:38 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Emmanuel Grumbach Subject: [PATCH wireless-next 01/15] wifi: iwlwifi: mld: fix build with CONFIG_PM_SLEEP undefined Date: Sun, 9 Mar 2025 00:01:11 +0200 Message-Id: <20250308235203.6f7e44a27b87.I78b9311019b59477a1961cddc4640b255ceda651@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> References: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Israel (74) Limited fw_status.in_d3 is only defined under CONFIG_PM_SLEEP. Signed-off-by: Miri Korenblit Reviewed-by: Emmanuel Grumbach --- drivers/net/wireless/intel/iwlwifi/mld/hcmd.h | 4 +++- drivers/net/wireless/intel/iwlwifi/mld/mld.h | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/hcmd.h b/drivers/net/wireless/intel/iwlwifi/mld/hcmd.h index 773bc1b09392..64a8d4248324 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/hcmd.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/hcmd.h @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ /* - * Copyright (C) 2024 Intel Corporation + * Copyright (C) 2024-2025 Intel Corporation */ #ifndef __iwl_mld_hcmd_h__ #define __iwl_mld_hcmd_h__ @@ -10,8 +10,10 @@ static inline int iwl_mld_send_cmd(struct iwl_mld *mld, struct iwl_host_cmd *cmd /* No commands, including the d3 related commands, should be sent * after entering d3 */ +#ifdef CONFIG_PM_SLEEP if (WARN_ON(mld->fw_status.in_d3)) return -EIO; +#endif if (!(cmd->flags & CMD_ASYNC)) lockdep_assert_wiphy(mld->wiphy); diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mld.h b/drivers/net/wireless/intel/iwlwifi/mld/mld.h index 6eda6081c8b4..1ab98ba42c76 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mld.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/mld.h @@ -296,7 +296,9 @@ iwl_cleanup_mld(struct iwl_mld *mld) CLEANUP_STRUCT(mld); CLEANUP_STRUCT(&mld->scan); +#ifdef CONFIG_PM_SLEEP mld->fw_status.in_d3 = false; +#endif iwl_mld_low_latency_restart_cleanup(mld); From patchwork Sat Mar 8 22:01:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 872138 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DC5F91AA1DA for ; Sat, 8 Mar 2025 22:01:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471302; cv=none; b=Ai5zjz2TNE7YFb4didMKnQNka1pv/tGlNkaoFF8zQXwRS/zmFchbIG7EBe0ED48hjhcZQNgsjG6LM5ghbP94bO+sJlnJ3Ni3pq1BnXSPA0FIg/Zjw6yjo9+7P5nsDG1r1rQFfFJsgQOUAObKkAwOCBabBHIEZIKp9yZUeQl+rGc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471302; c=relaxed/simple; bh=qiu6D3O5Fs5+np7jyjiuQi7ZEmGDSSmwq9OLd1BtLUI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Sug6rWiQHBZG4Cqoew9yhunWpBhasjafMMO/B5yPzo7qO4H72rqBsObylBY3ZdzFp9EG4HbHVAoC7ta9uGLe/Xke+PnkihnDGB836ai2zjQw5HZ2dMInleR9XANUV+geXbMJV2dyYkkuaLDe/23hjsW+amLEzgw2wPfo01c4JpI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=M9rsKUUj; arc=none smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="M9rsKUUj" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741471301; x=1773007301; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=qiu6D3O5Fs5+np7jyjiuQi7ZEmGDSSmwq9OLd1BtLUI=; b=M9rsKUUjOZHE3hC8gl4XkT5juNIWf3VeAyCDSa3MSaLOPHvC3KDn8Yxu y8HKtVxt7BkFkTcySrVdng7hsdfTHlpNR44m3kO1Il9nQ/XPTXOJOykI6 qYBYv3JLaQq6FQtVmsyJImGWtonoL4SnwR5vkxsPjMr49bbco8MwmP/F2 9lAIMkwns9DcsC6CXbT416j6Boya6ZXMQLqg3aOzQUb9xAlGGRJXsareg kkjO4nEx5KSqv63kJ2or1hbaoL8I9Cl+24AQw2VwNEYXNQwh2CMvLY2cJ sBwWuqFiBLA1UvyfDhZAHKL905+sxz2iS5ztz8cBCurt+vi/jW0hBjKY6 w==; X-CSE-ConnectionGUID: kqkRj5S8Sd65e2rXIGyNhg== X-CSE-MsgGUID: iuW+FuN/TqWE8WVBYPD9yA== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="42540615" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="42540615" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:40 -0800 X-CSE-ConnectionGUID: pb9SOdo6QGGWaACy6hcLig== X-CSE-MsgGUID: w6bnXRUyRu6gGbyGXmDk6w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="120352065" Received: from weis0040.iil.intel.com ([10.12.217.108]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:39 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org Subject: [PATCH wireless-next 02/15] wifi: iwlwifi: mld: fix SMPS W/A Date: Sun, 9 Mar 2025 00:01:12 +0200 Message-Id: <20250308235203.1cdeb78b19ba.I58fe02c062524029071b04b093a1b09c5e46f4ef@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> References: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Israel (74) Limited If the user disables power save of a vif that didn't have it enabled (for example before association), mac80211 will not notify the driver with BSS_CHANGED_PS. This will cause the driver to not update the device-level power save to disabled. Fix this by checking the vif's power save status upon authorization, and stop considering the vif's power save status on disassociation. Signed-off-by: Miri Korenblit --- .../net/wireless/intel/iwlwifi/mld/iface.h | 2 ++ .../net/wireless/intel/iwlwifi/mld/mac80211.c | 25 +++++++++++++++---- .../net/wireless/intel/iwlwifi/mld/power.c | 3 ++- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/iface.h b/drivers/net/wireless/intel/iwlwifi/mld/iface.h index 2c928113f680..57910660ed18 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/iface.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/iface.h @@ -134,6 +134,7 @@ struct iwl_mld_emlsr { * @beacon_inject_active: indicates an active debugfs beacon ie injection * @low_latency_causes: bit flags, indicating the causes for low-latency, * see @iwl_mld_low_latency_cause. + * @ps_disabled: indicates that PS is disabled for this interface * @mld: pointer to the mld structure. * @deflink: default link data, for use in non-MLO, * @link: reference to link data for each valid link, for use in MLO. @@ -159,6 +160,7 @@ struct iwl_mld_vif { bool beacon_inject_active; #endif u8 low_latency_causes; + bool ps_disabled; ); /* And here fields that survive a fw restart */ struct iwl_mld *mld; diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c index d73bd0179f7d..ba149581e25d 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c @@ -1262,6 +1262,23 @@ iwl_mld_mac80211_link_info_changed(struct ieee80211_hw *hw, iwl_mld_set_tx_power(mld, link_conf, link_conf->txpower); } +static void +iwl_mld_smps_wa(struct iwl_mld *mld, struct ieee80211_vif *vif, bool enable) +{ + struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(vif); + + /* Send the device-level power commands since the + * firmware checks the POWER_TABLE_CMD's POWER_SAVE_EN bit to + * determine SMPS mode. + */ + if (mld_vif->ps_disabled == !enable) + return; + + mld_vif->ps_disabled = !enable; + + iwl_mld_update_device_power(mld, false); +} + static void iwl_mld_mac80211_vif_cfg_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif, @@ -1295,11 +1312,7 @@ void iwl_mld_mac80211_vif_cfg_changed(struct ieee80211_hw *hw, } if (changes & BSS_CHANGED_PS) { - /* Send both device-level and MAC-level power commands since the - * firmware checks the POWER_TABLE_CMD's POWER_SAVE_EN bit to - * determine SMPS mode. - */ - iwl_mld_update_device_power(mld, false); + iwl_mld_smps_wa(mld, vif, vif->cfg.ps); iwl_mld_update_mac_power(mld, vif, false); } @@ -1716,6 +1729,7 @@ static int iwl_mld_move_sta_state_up(struct iwl_mld *mld, FW_CTXT_ACTION_MODIFY); if (ret) return ret; + iwl_mld_smps_wa(mld, vif, vif->cfg.ps); } /* MFP is set by default before the station is authorized. @@ -1758,6 +1772,7 @@ static int iwl_mld_move_sta_state_down(struct iwl_mld *mld, &mld_vif->emlsr.check_tpt_wk); iwl_mld_reset_cca_40mhz_workaround(mld, vif); + iwl_mld_smps_wa(mld, vif, true); } /* once we move into assoc state, need to update the FW to diff --git a/drivers/net/wireless/intel/iwlwifi/mld/power.c b/drivers/net/wireless/intel/iwlwifi/mld/power.c index ed7c0319f239..2f16c174b57e 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/power.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/power.c @@ -15,11 +15,12 @@ static void iwl_mld_vif_ps_iterator(void *data, u8 *mac, struct ieee80211_vif *vif) { bool *ps_enable = (bool *)data; + struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(vif); if (vif->type != NL80211_IFTYPE_STATION) return; - *ps_enable &= vif->cfg.ps; + *ps_enable &= !mld_vif->ps_disabled; } int iwl_mld_update_device_power(struct iwl_mld *mld, bool d3) From patchwork Sat Mar 8 22:01:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 871848 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A47B720E00D for ; Sat, 8 Mar 2025 22:01:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471304; cv=none; b=LBooPj8IjQP5E6O8Xn3AMCCjVMohZoE+uNMNHJGjwMtT2x3V6CXr6g+DtjdYX3S6Liqp2n0p5s7J4qbig2jbWFfVdcm/Apy39JmczAwAwblz/b9u3PQzE5dkjFMe8XVmc6Te4tIzKuTD2Gpimcr6LdkpCcXLyylm5BuqBBS5+UA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471304; c=relaxed/simple; bh=pFSKozayYzeopL8FBkry1CrTE6r4uQjei3FrFIixpis=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=On+4UAKx6W7iuegbj9J6+Qxvl4NwmyxPidRKrFP70+5Vi9wAVw8IG8VEcVALLfD/GpfRPQ8FwxJKv97jdDKPMhSOdPD2XJOQ9MbobFDoGBFva/zTcmpVJ3nsqyjNWod1hw3SvwIWBZEMVIByte25Y/e3QKRqGetswk50zH5K6Xk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=RJD9Ujm/; arc=none smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="RJD9Ujm/" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741471302; x=1773007302; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=pFSKozayYzeopL8FBkry1CrTE6r4uQjei3FrFIixpis=; b=RJD9Ujm/5OnErdSb0h6uymwAiZaw+dLRlEgG/IA2MmwgwIc9F9RNAtoO W75S19pLI8bQGcNQyepnsyPiPFpeHnfpNr0mg0sAtsqRyxGoGZQbW3i/i bP3UpwjQASbO4p3nX5eZMpE8smlAA0la5hUWfJJEFjjQMhoYPKcCJ5ALD alFmt3wXx6DAb5SUyhf4I4DDTj5o4EIQn6Vw8TyAKdnAfhBE0dOHLQDBH nl1dFRPdGzWNfWkEY0jCTHi93NTSzhvDirC7YhUFTzAmVDj8E74bd02cQ 1XSiDeQ3Rpa3VeUUKFnOEy9MGu1BZSuqkhT1KqG8TtiLt31BB4XuIraGT g==; X-CSE-ConnectionGUID: 0EY2X3L9SRGashjKx5MFjQ== X-CSE-MsgGUID: 65GBCyBzR0mkRaSpvlrnZQ== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="42540617" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="42540617" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:42 -0800 X-CSE-ConnectionGUID: WPlLO7SoT52iMIRr0GIcFQ== X-CSE-MsgGUID: Z8XblgaxSBiExDhHT5oVwQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="120352083" Received: from weis0040.iil.intel.com ([10.12.217.108]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:40 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Emmanuel Grumbach Subject: [PATCH wireless-next 03/15] wifi: iwlwifi: mld: track channel_load_not_by_us Date: Sun, 9 Mar 2025 00:01:13 +0200 Message-Id: <20250308235203.dd443fc5b178.I68b2fed197aae14888159b7a73bf40c2f346f41f@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> References: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Israel (74) Limited For each channel context, track the avarage channel load by others in the driver specific phy data, to be used by EMLSR. Due to FW limitations, this value is incorrect in EMLSR, so it is shouldn't be used in EMLSR. On EMLSR exit, clear it so the wrong value won't be used. Signed-off-by: Miri Korenblit Reviewed-by: Emmanuel Grumbach --- .../net/wireless/intel/iwlwifi/mld/mac80211.c | 1 + drivers/net/wireless/intel/iwlwifi/mld/mlo.c | 21 +++++++++++++++++++ drivers/net/wireless/intel/iwlwifi/mld/phy.h | 5 +++++ .../net/wireless/intel/iwlwifi/mld/stats.c | 10 ++++++++- .../wireless/intel/iwlwifi/mld/tests/utils.c | 1 + 5 files changed, 37 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c index ba149581e25d..b01a41f9b013 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c @@ -847,6 +847,7 @@ int iwl_mld_add_chanctx(struct ieee80211_hw *hw, if (fw_id < 0) return fw_id; + phy->mld = mld; phy->fw_id = fw_id; phy->chandef = *iwl_mld_get_chandef_from_chanctx(ctx); diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mlo.c b/drivers/net/wireless/intel/iwlwifi/mld/mlo.c index 99c8501129b8..b68092be9aed 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mlo.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/mlo.c @@ -3,6 +3,7 @@ * Copyright (C) 2024-2025 Intel Corporation */ #include "mlo.h" +#include "phy.h" /* Block reasons helper */ #define HANDLE_EMLSR_BLOCKED_REASONS(HOW) \ @@ -177,6 +178,19 @@ static void iwl_mld_check_emlsr_prevention(struct iwl_mld *mld, &mld_vif->emlsr.prevent_done_wk, delay); } +static void iwl_mld_clear_avg_chan_load_iter(struct ieee80211_hw *hw, + struct ieee80211_chanctx_conf *ctx, + void *dat) +{ + struct iwl_mld_phy *phy = iwl_mld_phy_from_mac80211(ctx); + + /* It is ok to do it for all chanctx (and not only for the ones that + * belong to the EMLSR vif) since EMLSR is not allowed if there is + * another vif. + */ + phy->avg_channel_load_not_by_us = 0; +} + static int _iwl_mld_exit_emlsr(struct iwl_mld *mld, struct ieee80211_vif *vif, enum iwl_mld_emlsr_exit exit, u8 link_to_keep, bool sync) @@ -215,6 +229,13 @@ static int _iwl_mld_exit_emlsr(struct iwl_mld *mld, struct ieee80211_vif *vif, /* Update latest exit reason and check EMLSR prevention */ iwl_mld_check_emlsr_prevention(mld, mld_vif, exit); + /* channel_load_not_by_us is invalid when in EMLSR. + * Clear it so wrong values won't be used. + */ + ieee80211_iter_chan_contexts_atomic(mld->hw, + iwl_mld_clear_avg_chan_load_iter, + NULL); + return ret; } diff --git a/drivers/net/wireless/intel/iwlwifi/mld/phy.h b/drivers/net/wireless/intel/iwlwifi/mld/phy.h index 3dfb8ca994e2..357bc9fe9624 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/phy.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/phy.h @@ -15,6 +15,9 @@ * with. Used to detect a no-op when the chanctx changes. * @channel_load_by_us: channel load on this channel caused by * the NIC itself, as indicated by firmware + * @avg_channel_load_not_by_us: averaged channel load on this channel caused by + * others. This value is invalid when in EMLSR (due to FW limitations) + * @mld: pointer to the MLD context */ struct iwl_mld_phy { /* Add here fields that need clean up on hw restart */ @@ -24,6 +27,8 @@ struct iwl_mld_phy { ); /* And here fields that survive a hw restart */ u32 channel_load_by_us; + u32 avg_channel_load_not_by_us; + struct iwl_mld *mld; }; static inline struct iwl_mld_phy * diff --git a/drivers/net/wireless/intel/iwlwifi/mld/stats.c b/drivers/net/wireless/intel/iwlwifi/mld/stats.c index 842b9b9fdd8c..5633885c49ff 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/stats.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/stats.c @@ -461,6 +461,7 @@ static void iwl_mld_fill_chanctx_stats(struct ieee80211_hw *hw, { struct iwl_mld_phy *phy = iwl_mld_phy_from_mac80211(ctx); const struct iwl_stats_ntfy_per_phy *per_phy = data; + u32 new_load; if (WARN_ON(phy->fw_id >= IWL_STATS_MAX_PHY_OPERATIONAL)) return; @@ -468,7 +469,14 @@ static void iwl_mld_fill_chanctx_stats(struct ieee80211_hw *hw, phy->channel_load_by_us = le32_to_cpu(per_phy[phy->fw_id].channel_load_by_us); - /* TODO: channel load not by us (task=statistics) */ + new_load = le32_to_cpu(per_phy[phy->fw_id].channel_load_not_by_us); + if (IWL_FW_CHECK(phy->mld, new_load > 100, "Invalid channel load %u\n", + new_load)) + return; + + /* give a weight of 0.5 for the old value */ + phy->avg_channel_load_not_by_us = + (new_load >> 1) + (phy->avg_channel_load_not_by_us >> 1); } static void diff --git a/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.c b/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.c index a8c1e6c72138..b6049918b5db 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.c @@ -168,6 +168,7 @@ iwlmld_kunit_add_chanctx_from_def(struct cfg80211_chan_def *def) KUNIT_ASSERT_GE(test, fw_id, 0); phy->fw_id = fw_id; + phy->mld = mld; phy->chandef = *iwl_mld_get_chandef_from_chanctx(ctx); return ctx; From patchwork Sat Mar 8 22:01:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 872137 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A234720FAA2 for ; Sat, 8 Mar 2025 22:01:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471305; cv=none; b=N9lXWjqz3O5fxF6pWxGZ36XLbhv8mQ1iDq8LWuLE/wQQzW6vptVxX0oNr3LE+rkixpU7aAbtcvbT9zizoIZIWmWRK2qtA3s7p5g5P2S8D2P23ODzseXLn6L5wkGqzWTCRMVxKVDwzHYE7K8tzJkh4wqw4TTJ007FT+7RNk035NE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471305; c=relaxed/simple; bh=ppb6Tdxwu9zik7hUyKIif6LlLEkF6pu6cGPBD1TsbjY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=tD98NWoWTcPHwsfz8aU8bTbKlmyIY8mrydpqeGC42uvb1toqoN5/aUQrV0r0H5f0o7aKDFEdQ/ceGHyArYHGufyMPvaAgcobhPa/kI1iH7xm7X5Uv14M782p5DCI3uYgFcJjBAfkmiyoKGBtCQxs2slmVWnE/X2ueBwkQcaxSCU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=U0og1UyB; arc=none smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="U0og1UyB" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741471303; x=1773007303; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ppb6Tdxwu9zik7hUyKIif6LlLEkF6pu6cGPBD1TsbjY=; b=U0og1UyBqh76+++3yl4gYH+ib2FTKsgFEZlLlqmBlbUdcwb1ycLZ4X/6 1Ry/LLQDXQFo+PzxR8aJPk6No83862JGFx9hF0o7W2Bq8xVreTdyFTfPj VYFF6WB6EVeDfQv5trzurV9QOpsn04Nl4LRupQKgwiOt7deMcNTrH7YmX dr70Z2+XDxq1tj0igAtlvR2oEIgQW80NY+ZEY/9yqBTNQZa2nhYdpjTKT Byj6NDH7/kiSDGsKA/m7mzzfklPESeUSigYAJ2q3EzTaZh2gvERAjK9q5 Qxyprhzq1PqxvHkoxuTBAg3t8UcV1oSBIdnd5ATZ9zq23Egu2Y8lKOMWE g==; X-CSE-ConnectionGUID: KO6zPjm3QBimxM8Ed+2/3Q== X-CSE-MsgGUID: C5ai6/BFSDWeZf0Mtm2TOQ== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="42540619" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="42540619" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:43 -0800 X-CSE-ConnectionGUID: TbD2W73wS76ENfWJdmG66A== X-CSE-MsgGUID: K3PcF23HRaWsWaZl0DoFIw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="120352093" Received: from weis0040.iil.intel.com ([10.12.217.108]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:42 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Emmanuel Grumbach Subject: [PATCH wireless-next 04/15] wifi: iwlwifi: mld: refactor iwl_mld_valid_emlsr_pair Date: Sun, 9 Mar 2025 00:01:14 +0200 Message-Id: <20250308235203.0a3b2f88fbbf.I0152bc39e828488451e85135feb044ce1f7a85d3@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> References: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Israel (74) Limited - Change reasons enum to a bitmask and rename it - Don't use 'else if' so all reasons will be set in the reasons bitmask Signed-off-by: Miri Korenblit Reviewed-by: Emmanuel Grumbach --- drivers/net/wireless/intel/iwlwifi/mld/mlo.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mlo.c b/drivers/net/wireless/intel/iwlwifi/mld/mlo.c index b68092be9aed..bbaf9ad0e9eb 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mlo.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/mlo.c @@ -748,23 +748,23 @@ iwl_mld_valid_emlsr_pair(struct ieee80211_vif *vif, { struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(vif); struct iwl_mld *mld = mld_vif->mld; - enum iwl_mld_emlsr_exit ret = 0; + u32 reason_mask = 0; /* Per-link considerations */ if (iwl_mld_emlsr_disallowed_with_link(mld, vif, a, true) || iwl_mld_emlsr_disallowed_with_link(mld, vif, b, false)) return false; - if (a->chandef->chan->band == b->chandef->chan->band) { - ret |= IWL_MLD_EMLSR_EXIT_EQUAL_BAND; - } else if (a->chandef->width != b->chandef->width) { + if (a->chandef->chan->band == b->chandef->chan->band) + reason_mask |= IWL_MLD_EMLSR_EXIT_EQUAL_BAND; + if (a->chandef->width != b->chandef->width) { /* TODO: task=EMLSR task=statistics * replace BANDWIDTH exit reason with channel load criteria */ - ret |= IWL_MLD_EMLSR_EXIT_BANDWIDTH; + reason_mask |= IWL_MLD_EMLSR_EXIT_BANDWIDTH; } - if (ret) { + if (reason_mask) { IWL_DEBUG_INFO(mld, "Links %d and %d are not a valid pair for EMLSR\n", a->link_id, b->link_id); @@ -772,7 +772,7 @@ iwl_mld_valid_emlsr_pair(struct ieee80211_vif *vif, "Links bandwidth are: %d and %d\n", nl80211_chan_width_to_mhz(a->chandef->width), nl80211_chan_width_to_mhz(b->chandef->width)); - iwl_mld_print_emlsr_exit(mld, ret); + iwl_mld_print_emlsr_exit(mld, reason_mask); return false; } From patchwork Sat Mar 8 22:01:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 871847 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3B165212B0D for ; Sat, 8 Mar 2025 22:01:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471306; cv=none; b=jrrTLMolWmDuLLdOuAkYFc5Jga5WUA6zU3i6nxfbt6f0OD0GDF3Rj7yzwCSLWQWGYvEqWo3qKvJT3rF/nhw2RcxcsLkjT1P1in8YiVPzfKn4e/LJNQynltBsqTXQtnnXIPxAul8IJeKaCfhSfCtltMMZGjUw7zj3eS1O/RbkoEs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471306; c=relaxed/simple; bh=REAIoendfzQyX6wyUdJhIUsemDKdtguPeCQcl/KPyos=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=I+/5QPXTa1eoB68I7ZMDkTRmcJWBksvFsd8mHb0s8pcSCtUfpJWpqahHEcC/eThDKSnaC7x5Og2J9N57IzhOram3iYVnG9IftyZN7zCHQT0nW5EQwGB4v6m1+YPPb+pw/IxfUwNGHFzC1mA0cslaRcuRHHi/1liC9HiobFVC3ME= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=fYxwF+dW; arc=none smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="fYxwF+dW" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741471305; x=1773007305; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=REAIoendfzQyX6wyUdJhIUsemDKdtguPeCQcl/KPyos=; b=fYxwF+dWDVsTQEN0cgkyWvy1CCsX2YNpb6xiIXEPneDPIH54wIGOxfLO x4czOhN+vrMBlUC5XCGxF467XXLP/crIAPbZ/IMPOuRuzZlzP2li17GkQ LFjcMMZ84fay2CDEuZgtveJoliNMKgcNo07tF21FayLnLmp1d/55bqj+m dlUTmrPTZ/C/u3BnV1tXuwo5J3pyw0brTrp0nCXSClb4Bx2710FDqeZe6 JehvG1SrPn2aqU9dTKWos7JFkNyJdX+hC5gjG44NvBTGC2OPOgLG+yHPS hr5KsSCFVmA1PrxId+mfxkZytNTF36NOpjfJuDUG1hSI1oyTbrtrgJttk Q==; X-CSE-ConnectionGUID: ACrxKj7iR2+jtBvHszR7fQ== X-CSE-MsgGUID: vzHv/kxPR42YBFnog7mjgA== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="42540623" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="42540623" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:45 -0800 X-CSE-ConnectionGUID: WaCC2hqPTvGoVtBCwncvkQ== X-CSE-MsgGUID: yyXHjJ/zRXyNRA65wbgHRQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="120352105" Received: from weis0040.iil.intel.com ([10.12.217.108]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:43 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Benjamin Berg Subject: [PATCH wireless-next 05/15] wifi: iwlwifi: mld: assume wiphy is locked when getting BSS ifaces Date: Sun, 9 Mar 2025 00:01:15 +0200 Message-Id: <20250308235203.6ce298d6a44f.Ibc862dfdd6cb2da63781c791b9dc601bd5ce4bdc@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> References: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Israel (74) Limited From: Benjamin Berg The code was calling ieee80211_iterate_interfaces, however that takes a lock of iflist_mtx, which must not be taken recursively. Fix this by using the appropriate _mtx version that asserts that the wiphy mutex is already held. Signed-off-by: Benjamin Berg Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/mld/iface.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/iface.c b/drivers/net/wireless/intel/iwlwifi/mld/iface.c index 691062b44461..e49e2260ac05 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/iface.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/iface.c @@ -465,10 +465,10 @@ u8 iwl_mld_get_fw_bss_vifs_ids(struct iwl_mld *mld) { u8 fw_id_bitmap = 0; - ieee80211_iterate_interfaces(mld->hw, - IEEE80211_IFACE_SKIP_SDATA_NOT_IN_DRIVER, - iwl_mld_get_fw_id_bss_bitmap_iter, - &fw_id_bitmap); + ieee80211_iterate_active_interfaces_mtx(mld->hw, + IEEE80211_IFACE_SKIP_SDATA_NOT_IN_DRIVER, + iwl_mld_get_fw_id_bss_bitmap_iter, + &fw_id_bitmap); return fw_id_bitmap; } From patchwork Sat Mar 8 22:01:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 872136 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 99F5D1B0411 for ; Sat, 8 Mar 2025 22:01:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471308; cv=none; b=ZwfGY0fmZmCpcnBFAw7vitk5jknTFI924Y1JKv21yugkfSq5pDpf9oxlkzwARK5jCDL837sFf85IwO+p7X304dXody68sb7JtkBYC8rdEpdFpcDuqRCgEkny6VHxnojhQJUei75YxLLAx8/PE3QHqlJmMW6xX7IzAWKqehDBCmQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471308; c=relaxed/simple; bh=EdRmZujHb9fs1v2CBTyju/7u68tzpZTsjGWYGTGjEB0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=UT8FWNQt+y8TLkkke4XGZP29ntPU5QUBF3otIaaSj1H6cpf7PdBpCcpG8KX1ZmuT4OkO3/v/BcrG/bvybHIZ3jvCqI5QxuioAg2w2JCypX4uGgfXfuWvl5bKhnxlKhzyPKqA2utaSFx7kGoIF4HuuQ5bHki0c8RU2CEkkc7HfBE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=LZSsk5Py; arc=none smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="LZSsk5Py" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741471306; x=1773007306; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=EdRmZujHb9fs1v2CBTyju/7u68tzpZTsjGWYGTGjEB0=; b=LZSsk5Py7+SWYf5HQn4X7nEkd2Q30zkwmPUQ2vGXmz+yvKk9+gGoJoW+ T7YUrQuwme+vDsHPJ3g7pubCuHK/h5/9GxF3ealhLl5kmTKnTEfM/FR7a deNk7h6cl4RLXVbjWHncEke1DTZ/oT/H9MEjhQhZHj9U4Gf7fSAoGLn4k 02RRWRNW/yUEQvbsyWT0VsWtg6eYCf1v5aBKvPE8idqVBABpwazJUBhBE 5GoiGutfnCG1GQN5h6NoZXd2axudE1hgOHlav9YJQMyPKVC6QVcJcxOxX +ObKlIGs18jGzSNEWW1G3UoIfH5vmFIn6sPyMNRtXjZ8PoPGf2FNvchiE Q==; X-CSE-ConnectionGUID: TO8TwDxITnm6rM/sH0RBHA== X-CSE-MsgGUID: c8HnnTGtR+CT56qDTCCnnA== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="42540625" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="42540625" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:46 -0800 X-CSE-ConnectionGUID: QN1T3C4pRa2KO0EFrz5WqQ== X-CSE-MsgGUID: BdKdvIEIRruRywArIqL3bg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="120352113" Received: from weis0040.iil.intel.com ([10.12.217.108]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:45 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Johannes Berg Subject: [PATCH wireless-next 06/15] wifi: iwlwifi: mld: initialize regulatory early Date: Sun, 9 Mar 2025 00:01:16 +0200 Message-Id: <20250308235203.10ab8fed94e9.I7c8dee3d14c7427a56882739f82546c6492f3b10@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> References: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Israel (74) Limited From: Johannes Berg Since iwlmld claims wiphys to be self-managed, it needs to have a regdomain registered before the wiphy is registered to avoid issues when trying to get the regdomain, e.g. via "iw phy phy0 reg get". Move the initialization early, on every FW start not just when starting to really operate it. This also requires the self-managed flag to be set early. Signed-off-by: Johannes Berg Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/mld/fw.c | 8 ++++---- .../net/wireless/intel/iwlwifi/mld/mac80211.c | 9 --------- drivers/net/wireless/intel/iwlwifi/mld/mld.c | 17 +++++++++++++++-- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/fw.c b/drivers/net/wireless/intel/iwlwifi/mld/fw.c index ec93af362cfc..9c1dce0d5979 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/fw.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/fw.c @@ -339,6 +339,10 @@ int iwl_mld_load_fw(struct iwl_mld *mld) if (ret) return ret; + ret = iwl_mld_init_mcc(mld); + if (ret) + return ret; + mld->fw_status.running = true; return 0; @@ -481,10 +485,6 @@ static int iwl_mld_config_fw(struct iwl_mld *mld) if (ret) return ret; - ret = iwl_mld_init_mcc(mld); - if (ret) - return ret; - if (mld->fw_status.in_hw_restart) { iwl_mld_send_recovery_cmd(mld, ERROR_RECOVERY_UPDATE_DB); iwl_mld_time_sync_fw_config(mld); diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c index b01a41f9b013..27ef41d69479 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c @@ -164,14 +164,6 @@ static void iwl_mld_hw_set_security(struct iwl_mld *mld) NL80211_EXT_FEATURE_BEACON_PROTECTION); } -static void iwl_mld_hw_set_regulatory(struct iwl_mld *mld) -{ - struct wiphy *wiphy = mld->wiphy; - - wiphy->regulatory_flags |= REGULATORY_WIPHY_SELF_MANAGED; - wiphy->regulatory_flags |= REGULATORY_ENABLE_RELAX_NO_IR; -} - static void iwl_mld_hw_set_antennas(struct iwl_mld *mld) { struct wiphy *wiphy = mld->wiphy; @@ -415,7 +407,6 @@ int iwl_mld_register_hw(struct iwl_mld *mld) iwl_mld_hw_set_addresses(mld); iwl_mld_hw_set_channels(mld); iwl_mld_hw_set_security(mld); - iwl_mld_hw_set_regulatory(mld); iwl_mld_hw_set_pm(mld); iwl_mld_hw_set_antennas(mld); iwl_mac_hw_set_radiotap(mld); diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mld.c b/drivers/net/wireless/intel/iwlwifi/mld/mld.c index adc3d23aa019..d4a99ae64074 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mld.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/mld.c @@ -2,7 +2,7 @@ /* * Copyright (C) 2024-2025 Intel Corporation */ - +#include #include #include "fw/api/rx.h" @@ -50,6 +50,14 @@ static void __exit iwl_mld_exit(void) } module_exit(iwl_mld_exit); +static void iwl_mld_hw_set_regulatory(struct iwl_mld *mld) +{ + struct wiphy *wiphy = mld->wiphy; + + wiphy->regulatory_flags |= REGULATORY_WIPHY_SELF_MANAGED; + wiphy->regulatory_flags |= REGULATORY_ENABLE_RELAX_NO_IR; +} + VISIBLE_IF_IWLWIFI_KUNIT void iwl_construct_mld(struct iwl_mld *mld, struct iwl_trans *trans, const struct iwl_cfg *cfg, const struct iwl_fw *fw, @@ -67,7 +75,6 @@ void iwl_construct_mld(struct iwl_mld *mld, struct iwl_trans *trans, /* Setup async RX handling */ spin_lock_init(&mld->async_handlers_lock); - INIT_LIST_HEAD(&mld->async_handlers_list); wiphy_work_init(&mld->async_handlers_wk, iwl_mld_async_handlers_wk); @@ -387,9 +394,13 @@ iwl_op_mode_mld_start(struct iwl_trans *trans, const struct iwl_cfg *cfg, iwl_bios_setup_step(trans, &mld->fwrt); mld->bios_enable_puncturing = iwl_uefi_get_puncturing(&mld->fwrt); + iwl_mld_hw_set_regulatory(mld); + /* Configure transport layer with the opmode specific params */ iwl_mld_configure_trans(op_mode); + /* needed for regulatory init */ + rtnl_lock(); /* Needed for sending commands */ wiphy_lock(mld->wiphy); @@ -401,6 +412,7 @@ iwl_op_mode_mld_start(struct iwl_trans *trans, const struct iwl_cfg *cfg, if (ret) { wiphy_unlock(mld->wiphy); + rtnl_unlock(); iwl_fw_flush_dumps(&mld->fwrt); goto free_hw; } @@ -408,6 +420,7 @@ iwl_op_mode_mld_start(struct iwl_trans *trans, const struct iwl_cfg *cfg, iwl_mld_stop_fw(mld); wiphy_unlock(mld->wiphy); + rtnl_unlock(); ret = iwl_mld_leds_init(mld); if (ret) From patchwork Sat Mar 8 22:01:17 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 871846 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 086101EB5DF for ; Sat, 8 Mar 2025 22:01:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471309; cv=none; b=L+c9pO5xrgwdxoxUkxs68cYyt5wt5UFFtG99BMyL3jW5MeAoveHlc3N+9Hg4rAMkzwywrULyxWxCZeSz++Hs16qgGO66dKxoJ5GVhUVo5dArad6caf69cWkU7C75oK+Rd41wmV7X1ZCWzfaMbdDlyX8Dj7ma6IZ+43vmcBhxsMk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471309; c=relaxed/simple; bh=WLUhtHJhudWqJPWAQV2HbGbmgk9SwTLmDIYLA1wZ0Bc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=k9/LCTpiww8kSayYP1iPqiaIndYY5xM9YCNV2AvyDv5pkBCJba9XQUSnKl2PwVo0LAd5oWOqonpfF2jTtXIwCKUnhIEhBPq4yKTs1MQ2xYABQnTYXI4f44CUGqz0Xxpgt362UpMJDiHRSrzUPGPnDD5As38Y+iOVKCBt7XAWQ4Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=Mv7IRbYi; arc=none smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="Mv7IRbYi" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741471308; x=1773007308; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=WLUhtHJhudWqJPWAQV2HbGbmgk9SwTLmDIYLA1wZ0Bc=; b=Mv7IRbYiKJTlW5YI/3Idy5hvuMl6pZZ3X1WLNm92EDxm7RCXgzPOBgIp rhMfOU4Yiw26SBwtINV1BEUxL8hGlJSDQowYOCV9p5dxePys+9iPniFvz 3oGPsQ8Hnb+MmHhlcSFwB6PUOhmAAbz88F5z9JtCzWLnXpaMxY+7ZMp+f rWSrwhvp8gMdednhROz6KQCiEgCegK1c0b+6N9uEvNsK1A8itIO93Uzup PmjNjsaFpgot4ewjuHXQLCjHjIhUhEZ8KHwEtYqYDXqP14aIJrU/aG4CB RBtRLd67+tKlR4FtWarhJPPCoL0CoVl4bsHuio85nXCH5M7O9nzeHpYO/ Q==; X-CSE-ConnectionGUID: jZpc2hEkT7+8YWEgnRvUqA== X-CSE-MsgGUID: OcPz7VP8TUGjgqReaaqtRQ== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="42540631" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="42540631" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:48 -0800 X-CSE-ConnectionGUID: LkzndhWxSYuwkfi9Dticmw== X-CSE-MsgGUID: mD0Gn6v4R76r1Xx/qxV3mA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="120352124" Received: from weis0040.iil.intel.com ([10.12.217.108]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:46 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Daniel Gabay , Benjamin Berg Subject: [PATCH wireless-next 07/15] wifi: iwlwifi: mld: use the right iface iterator in low_latency Date: Sun, 9 Mar 2025 00:01:17 +0200 Message-Id: <20250308235203.925cdca61ed0.I34f5c52d27414cb4c301bbd24df7c3530a43fa1d@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> References: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Israel (74) Limited We used ieee80211_iterate_active_interfaces instead of ieee80211_iterate_active_interfaces_mtx, which is the one to use when the wiphy lock is held. Signed-off-by: Miri Korenblit Reviewed-by: Daniel Gabay Reviewed-by: Benjamin Berg --- drivers/net/wireless/intel/iwlwifi/mld/low_latency.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/low_latency.c b/drivers/net/wireless/intel/iwlwifi/mld/low_latency.c index 439fc10a4a41..e74e66735f52 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/low_latency.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/low_latency.c @@ -120,9 +120,9 @@ static void iwl_mld_low_latency_wk(struct wiphy *wiphy, struct wiphy_work *wk) wiphy_delayed_work_queue(mld->wiphy, &mld->low_latency.work, MLD_LL_ACTIVE_WK_PERIOD); - ieee80211_iterate_active_interfaces(mld->hw, - IEEE80211_IFACE_ITER_NORMAL, - iwl_mld_low_latency_iter, mld); + ieee80211_iterate_active_interfaces_mtx(mld->hw, + IEEE80211_IFACE_ITER_NORMAL, + iwl_mld_low_latency_iter, mld); } int iwl_mld_low_latency_init(struct iwl_mld *mld) From patchwork Sat Mar 8 22:01:18 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 872135 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0DD2721324B for ; Sat, 8 Mar 2025 22:01:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471311; cv=none; b=lEEHu32YW6PMcG4CtnkvnmkNOxxZ9zaOeuU/3QGLJaRMIX50L8g+KKe8mQKDM0tm271dIQgA0Au+WciHKFH+lZ8Notwj8abYnG8jK1Y07Uzb2F2rPoOZ7QYiKEq69uWNZfj67YQHmWdkxTacE1lTj8UdUH9HBcjScQFZ/vGIuII= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471311; c=relaxed/simple; bh=dIwur6ttrR6eDMU6ax+fbSD92MTmtuIeYgs5PrhU/Co=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=eu7LuS26kq+4c4MaBPLhPB3FuytqiJxLpBR4xvRv6wCLYYajoOOQt90dyr//WA/D4UqmVbjPU3FpyfyGqp0DLb1KLdGDW2PHdeLT7HY+lqFqsA5CS+LiEbQrrxr5fiPQn8Rwst/Lc8ZAKYM/wVO0ARCce16/mLL7yLyig7FubmE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=Cwo/7kfA; arc=none smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="Cwo/7kfA" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741471310; x=1773007310; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=dIwur6ttrR6eDMU6ax+fbSD92MTmtuIeYgs5PrhU/Co=; b=Cwo/7kfAvFNkzZOjNFc0XR+K4FPUqi5nICYGYBrayCevdfEMNkVhqhLX RY/GkfjnMHIsSNxgaS917ajmAoDh9nnbV7klKVDb4X4iS2jThbKfmw7Es pgP2mTmUaijiAsyHhlkcQuk23PP818tRNmaX7AGWFokSqKGEBydotMt3I vzKE8H+eBXHod1vKVTzzI2xtN1C9e8uCBD3cwCtHbg3f05PVzohmws1t9 Hd9PkrKTfjAt8/l3/gyELYYIG4clchNBkhW1E6fwK0eLVo9Lc0wOyeXLj zLxgFRNDl/omfSKKg1+BI/1VkfDPg2Vlaf/V5AEuaRCs6xRLaoZfeo0ZZ Q==; X-CSE-ConnectionGUID: CAs+IwQQRNubQzGAQvNaKg== X-CSE-MsgGUID: zKTCvNIuQwm8B2ezE/se4Q== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="42540634" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="42540634" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:49 -0800 X-CSE-ConnectionGUID: 1IQiM08HT5e5WNHT1cZm5w== X-CSE-MsgGUID: D0Ci2pI7RsWr7NbhL7x2iQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="120352133" Received: from weis0040.iil.intel.com ([10.12.217.108]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:48 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Johannes Berg Subject: [PATCH wireless-next 08/15] wifi: iwlwifi: mld: fix OMI time protection logic Date: Sun, 9 Mar 2025 00:01:18 +0200 Message-Id: <20250308235203.58efb4c91655.Id596fcda2fb28f5945548d780be9ff90aee76b7e@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> References: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Israel (74) Limited From: Johannes Berg We're allowed to enter OMI only 5 seconds after the last exit, so the logic needs to be inverted. Fix that. Signed-off-by: Johannes Berg Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/mld/link.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/link.c b/drivers/net/wireless/intel/iwlwifi/mld/link.c index 64ebafc35c9b..f6d482817f1b 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/link.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/link.c @@ -760,8 +760,8 @@ void iwl_mld_check_omi_bw_reduction(struct iwl_mld *mld) return; } - if (time_is_before_jiffies(mld_link->rx_omi.exit_ts + - msecs_to_jiffies(IWL_MLD_OMI_EXIT_PROTECTION))) + if (time_is_after_jiffies(mld_link->rx_omi.exit_ts + + msecs_to_jiffies(IWL_MLD_OMI_EXIT_PROTECTION))) return; /* reduce bandwidth to 80 MHz to save power */ From patchwork Sat Mar 8 22:01:19 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 871845 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3189820DD5B for ; Sat, 8 Mar 2025 22:01:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471312; cv=none; b=ny7mtWNp4EYZ63LVYS2hv2XfjeaedWM4Zd9lY5NwtSD19JD2bgksa+tDEgzJw1a08kJ1HYegrQLvZ1aEKok/2Q9Xkg/mj3+cgFQN1CDMArur3APNadfbgi+yQuNUQwxL9BICVSla6VY56cVVh3D5NZT023xBu8EBgx6VVg/hrXA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471312; c=relaxed/simple; bh=3w+5rfCCF40uT97oCKOkPAsApigFMEflvsBdCnyyoU8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=T1DkKpg9KdioQOM4/kUmFi3p4cXuFe6RORVCfjcTg+IjNRmKofL5fZBsEhJ62ikxmhrroFtrbh1/OZT7qNxWZYLTOSmQWm36R28gy1b//0ciCBHcOWyF1T9WCujx7lzRhfy8t7DQMt/poxz9E40evqHjoXDIIDY80Qt27FX76rM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=WNmWinWe; arc=none smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="WNmWinWe" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741471311; x=1773007311; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=3w+5rfCCF40uT97oCKOkPAsApigFMEflvsBdCnyyoU8=; b=WNmWinWelYyKI9xf9cLebC+TVokuJCMqFfydsWrABq3R8Sifz+x6qzq4 uBjef0P3AC7IsYWllnPRH1LHYcJC25oPLDS8CEWG6NHDK1CAGAZrUfIji qwUYjxK4PeFO4llj7JA7IEwJpC/XKvxIZirmQwK+gBEhGuXeouZRiBB6h aWiT9VpOT6Axqu2BralJxRumhHyEfe47GbXZyMolnNe6rrijneaje5qKh fkccG1z0fy51YyE9CL3TDm4JW7zsUIQLWpam6OZrtMPaC0XJfVFblo+hP YuhsPtJXZRgtQ7pTIaLNsx8pR+N1gm2/Z6xZFduMCmO/rSazNkDuPdX4r g==; X-CSE-ConnectionGUID: NUDfObUuTiOZnBcaFs4xaA== X-CSE-MsgGUID: gq2ADTJxSzimlXqpX1WKuQ== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="42540641" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="42540641" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:51 -0800 X-CSE-ConnectionGUID: bdieFaznRs6CMhnshe3RKw== X-CSE-MsgGUID: bHUZaiIVSG29VX49E8zvIQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="120352138" Received: from weis0040.iil.intel.com ([10.12.217.108]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:49 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Johannes Berg Subject: [PATCH wireless-next 09/15] wifi: iwlwifi: mld: enable OMI bandwidth reduction on 6 GHz Date: Sun, 9 Mar 2025 00:01:19 +0200 Message-Id: <20250308235203.2706cbd0b100.Ic34636b1aee81a140eb690fca8139909a58f8e8b@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> References: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Israel (74) Limited From: Johannes Berg Due to the iwl_mld_get_chandef_from_chanctx() logic, even after the OMI handshake to reduce bandwidth the driver wouldn't apply that to the PHY context, since it always uses the normal, not the reduced, configuration on 6 GHz (not strictly always, but OMI will only apply if the original bandwidth is > 80 MHz.) Fix this by making that selection contingent on AP mode. Refactor the code a bit to also make it clearer why the min_def isn't used in that case (for FILS.) Signed-off-by: Johannes Berg Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/mld/link.c | 2 +- .../net/wireless/intel/iwlwifi/mld/mac80211.c | 4 +- drivers/net/wireless/intel/iwlwifi/mld/phy.c | 49 +++++++++++++++++-- drivers/net/wireless/intel/iwlwifi/mld/phy.h | 3 +- .../wireless/intel/iwlwifi/mld/tests/utils.c | 2 +- 5 files changed, 50 insertions(+), 10 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/link.c b/drivers/net/wireless/intel/iwlwifi/mld/link.c index f6d482817f1b..1db69aee4e9f 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/link.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/link.c @@ -67,7 +67,7 @@ static void iwl_mld_fill_rates(struct iwl_mld *mld, __le32 *cck_rates, __le32 *ofdm_rates) { struct cfg80211_chan_def *chandef = - iwl_mld_get_chandef_from_chanctx(chan_ctx); + iwl_mld_get_chandef_from_chanctx(mld, chan_ctx); struct ieee80211_supported_band *sband = mld->hw->wiphy->bands[chandef->chan->band]; unsigned long basic = link->basic_rates; diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c index 27ef41d69479..91e201fde72a 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c @@ -840,7 +840,7 @@ int iwl_mld_add_chanctx(struct ieee80211_hw *hw, phy->mld = mld; phy->fw_id = fw_id; - phy->chandef = *iwl_mld_get_chandef_from_chanctx(ctx); + phy->chandef = *iwl_mld_get_chandef_from_chanctx(mld, ctx); ret = iwl_mld_phy_fw_action(mld, ctx, FW_CTXT_ACTION_ADD); if (ret) { @@ -872,7 +872,7 @@ void iwl_mld_change_chanctx(struct ieee80211_hw *hw, struct iwl_mld *mld = IWL_MAC80211_GET_MLD(hw); struct iwl_mld_phy *phy = iwl_mld_phy_from_mac80211(ctx); struct cfg80211_chan_def *chandef = - iwl_mld_get_chandef_from_chanctx(ctx); + iwl_mld_get_chandef_from_chanctx(mld, ctx); /* We don't care about these */ if (!(changed & ~(IEEE80211_CHANCTX_CHANGE_RX_CHAINS | diff --git a/drivers/net/wireless/intel/iwlwifi/mld/phy.c b/drivers/net/wireless/intel/iwlwifi/mld/phy.c index c38f101628de..2fbc8090088b 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/phy.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/phy.c @@ -22,16 +22,55 @@ int iwl_mld_allocate_fw_phy_id(struct iwl_mld *mld) } EXPORT_SYMBOL_IF_IWLWIFI_KUNIT(iwl_mld_allocate_fw_phy_id); -struct cfg80211_chan_def * -iwl_mld_get_chandef_from_chanctx(struct ieee80211_chanctx_conf *ctx) +struct iwl_mld_chanctx_usage_data { + struct iwl_mld *mld; + struct ieee80211_chanctx_conf *ctx; + bool use_def; +}; + +static bool iwl_mld_chanctx_fils_enabled(struct ieee80211_vif *vif, + struct ieee80211_chanctx_conf *ctx) { - bool use_def = cfg80211_channel_is_psc(ctx->def.chan) || + if (vif->type != NL80211_IFTYPE_AP) + return false; + + return cfg80211_channel_is_psc(ctx->def.chan) || (ctx->def.chan->band == NL80211_BAND_6GHZ && ctx->def.width >= NL80211_CHAN_WIDTH_80); +} + +static void iwl_mld_chanctx_usage_iter(void *_data, u8 *mac, + struct ieee80211_vif *vif) +{ + struct iwl_mld_chanctx_usage_data *data = _data; + struct ieee80211_bss_conf *link_conf; + int link_id; + + for_each_vif_active_link(vif, link_conf, link_id) { + if (rcu_access_pointer(link_conf->chanctx_conf) != data->ctx) + continue; + + if (iwl_mld_chanctx_fils_enabled(vif, data->ctx)) + data->use_def = true; + } +} + +struct cfg80211_chan_def * +iwl_mld_get_chandef_from_chanctx(struct iwl_mld *mld, + struct ieee80211_chanctx_conf *ctx) +{ + struct iwl_mld_chanctx_usage_data data = { + .mld = mld, + .ctx = ctx, + }; + + ieee80211_iterate_active_interfaces_mtx(mld->hw, + IEEE80211_IFACE_ITER_NORMAL, + iwl_mld_chanctx_usage_iter, + &data); - return use_def ? &ctx->def : &ctx->min_def; + return data.use_def ? &ctx->def : &ctx->min_def; } -EXPORT_SYMBOL_IF_IWLWIFI_KUNIT(iwl_mld_get_chandef_from_chanctx); static u8 iwl_mld_nl80211_width_to_fw(enum nl80211_chan_width width) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/phy.h b/drivers/net/wireless/intel/iwlwifi/mld/phy.h index 357bc9fe9624..2212a89321b7 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/phy.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/phy.h @@ -48,7 +48,8 @@ int iwl_mld_allocate_fw_phy_id(struct iwl_mld *mld); int iwl_mld_phy_fw_action(struct iwl_mld *mld, struct ieee80211_chanctx_conf *ctx, u32 action); struct cfg80211_chan_def * -iwl_mld_get_chandef_from_chanctx(struct ieee80211_chanctx_conf *ctx); +iwl_mld_get_chandef_from_chanctx(struct iwl_mld *mld, + struct ieee80211_chanctx_conf *ctx); u8 iwl_mld_get_fw_ctrl_pos(const struct cfg80211_chan_def *chandef); #endif /* __iwl_mld_phy_h__ */ diff --git a/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.c b/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.c index b6049918b5db..6331cd91cdf6 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.c @@ -169,7 +169,7 @@ iwlmld_kunit_add_chanctx_from_def(struct cfg80211_chan_def *def) phy->fw_id = fw_id; phy->mld = mld; - phy->chandef = *iwl_mld_get_chandef_from_chanctx(ctx); + phy->chandef = *def; return ctx; } From patchwork Sat Mar 8 22:01:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 872134 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7943E2135AA for ; Sat, 8 Mar 2025 22:01:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471314; cv=none; b=R9vZefyG60v8hRB7lBBIWBHdAuAE5Qb1/9LVspQmsJ9WHDXrMj3NZvmYzrhVUHtCDl2Y4fguiSpAUXReiHF8a8D4GTXb6e9Kk+t0XGj5424KsBTRANU2Ak6EcnMX3B9zD5SRyhrKTFmXZvjnajS6FVq3yyDvOHmb6B3IZffrUcM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471314; c=relaxed/simple; bh=LpsqBxERu74ubq+6NqMBznrCDAtmWg+meNeweARk628=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=R2Bby0TF55HthqN5CdQLqwr7hyp31rjzAOJfbuBoq+A3hPY0rwlX+J+60i1zhwljUT8N/0qk+PnAnjGSB/BfHTJXiv3/WQFXZm4Wusl22lOKCQRZQGqJR/Q7B9ciL03RV0w4CH+WKqehtnwidp0ehwPGgMQmJ37NUTE2lpW8Aq4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=XEj9Vu9W; arc=none smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="XEj9Vu9W" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741471312; x=1773007312; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=LpsqBxERu74ubq+6NqMBznrCDAtmWg+meNeweARk628=; b=XEj9Vu9WHGT2PxVJAg/6xnDT1bk03A0S+kPOES1G1QoTvqVIQ5grj5h3 1Cj9BqjWApr4xgtp5sKnScxnf+2snr49yGMA4nBhZ8H2o6QH2cAc5+IsG wc9E94f01pWEmbY3U7Mk6rNaiecJZs0BJKyCIoqyyVmuGZLHTzZHHI8nh Xfh+jFAr1AUhOlYg1+qdKj0Q5RLdr2gVjNvW+zAkbHmK3y/BRbIdxM45E FgT2F6KZ1k0Bcr0+YUpEypLUR9Ui8Cek4rqf/wZFFH8zWkKigXQsvYGDu Z/ZoHtfhPCqBs5/52347JQC9A8w9sbQS7gS5evubF2y8QNXfyvNIbV2e4 Q==; X-CSE-ConnectionGUID: iDzdd62YQ2Gb9OAHt+e1oQ== X-CSE-MsgGUID: 82f+l3eFSou/RrqphXhwKw== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="42540652" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="42540652" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:52 -0800 X-CSE-ConnectionGUID: v4R3aUfIRa2z31c1vOIayA== X-CSE-MsgGUID: pSV0iPPWQeGYe3WxtPdVZQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="120352148" Received: from weis0040.iil.intel.com ([10.12.217.108]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:50 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Avraham Stern Subject: [PATCH wireless-next 10/15] wifi: iwlwifi: mld: move the ftm initiator data to ftm-initiator.h Date: Sun, 9 Mar 2025 00:01:20 +0200 Message-Id: <20250308235203.92830fd553ec.Icbbd0eba34c9ba318801074f7705f6d1e5af5482@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> References: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Israel (74) Limited From: Avraham Stern Move the FTM initiator data to the relevant header file and document its fields. Signed-off-by: Avraham Stern Signed-off-by: Miri Korenblit --- .../net/wireless/intel/iwlwifi/mld/ftm-initiator.h | 14 ++++++++++++++ drivers/net/wireless/intel/iwlwifi/mld/mld.h | 7 ++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/ftm-initiator.h b/drivers/net/wireless/intel/iwlwifi/mld/ftm-initiator.h index e98fac34beba..3fab25a52508 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/ftm-initiator.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/ftm-initiator.h @@ -5,6 +5,20 @@ #ifndef __iwl_mld_ftm_initiator_h__ #define __iwl_mld_ftm_initiator_h__ +/** + * struct ftm_initiator_data - FTM initiator data + * + * @req: a pointer to cfg80211 FTM request + * @req_wdev: a pointer to the wdev that requested the current FTM request + * @responses: the number of responses received for the current FTM session. + * Used for tracking the burst index in a periodic request. + */ +struct ftm_initiator_data { + struct cfg80211_pmsr_request *req; + struct wireless_dev *req_wdev; + int responses[IWL_TOF_MAX_APS]; +}; + int iwl_mld_ftm_start(struct iwl_mld *mld, struct ieee80211_vif *vif, struct cfg80211_pmsr_request *req); diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mld.h b/drivers/net/wireless/intel/iwlwifi/mld/mld.h index 1ab98ba42c76..38f1d1bc5a24 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mld.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/mld.h @@ -34,6 +34,7 @@ #include "constants.h" #include "ptp.h" #include "time_sync.h" +#include "ftm-initiator.h" /** * DOC: Introduction @@ -277,11 +278,7 @@ struct iwl_mld { struct iwl_mld_time_sync_data __rcu *time_sync; - struct { - struct cfg80211_pmsr_request *req; - struct wireless_dev *req_wdev; - int responses[IWL_TOF_MAX_APS]; - } ftm_initiator; + struct ftm_initiator_data ftm_initiator; }; /* memset the part of the struct that requires cleanup on restart */ From patchwork Sat Mar 8 22:01:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 871844 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F35302135CA for ; Sat, 8 Mar 2025 22:01:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471315; cv=none; b=nJ/qX4icQubs0xEICohberRr69GGNEWr4Sgr29eaHJNdzHAzfzhaUboXREspTqK7vkHsHqiJ76SMpCkcOD2RKM2cdjDfw8SvLlUet4KZBdYRGM5WnJecoSbbGCdud3qPRqx13dNJjXS1dRGmkStv6CwlND+vdi4yci3i2lo5hBM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471315; c=relaxed/simple; bh=SkkbjhtychOw9bFaQfslrV9cqDdKjbvYNFAOQTJ4jAs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=QzuQ7YXPPesBAddsMy7kqsJnuYSCMzPEYXwyz3gmDrUntrbHA/8RBcy9lrvfPE4RpOZ2UXNKANNMkwTixDLzhZ7Z7Mhb9BbofCdM1FoGofTQrK2+Y8fxutc9IYj9Us0JhmEFbEGtOr57oGoL4/4tvDiDlXgGj3edpyYYQ9dY9Vg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=MPuSI2gy; arc=none smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="MPuSI2gy" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741471314; x=1773007314; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=SkkbjhtychOw9bFaQfslrV9cqDdKjbvYNFAOQTJ4jAs=; b=MPuSI2gyIw+uSWTJz0sBGMJqGeFEnoRMzYR2Tjo4NdYuVYnuU5zgCqs/ rzAyKZyZ7P0hb3MYOujY1a0/0wYAm9lcwCOs+TWve4uJnbm4YtxWd5H7q OND6+mnaRNm2J5Vef2IjNyjoPW+HoDYbY/V3vKUB64pK9veHUBY9ORKRM LKmwhu6mZoVsNd/nolPZZJ2InQBHePorlH6uUm9ykBHhloG6lo2rzgcs4 Yetau2+xB8eU5Gjxu4+qMvBefRtlmU7kHKA73a8HTHCFhlC1NoEHu4cT2 DVkSQluHlfDMTL+a5BYCTy689wQWIMEcMu95dUxmDeOSeKSNIqBEgjWtK Q==; X-CSE-ConnectionGUID: d9ixJdk1TACurxdQK8jEDQ== X-CSE-MsgGUID: a9XcwJLGT2y8WhGZwjR58A== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="42540659" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="42540659" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:53 -0800 X-CSE-ConnectionGUID: xf4SawyZTMmCOo/f5r01uA== X-CSE-MsgGUID: kxAO7SzlRgqSGn7EZ97tJw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="120352158" Received: from weis0040.iil.intel.com ([10.12.217.108]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:52 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Johannes Berg , Emmanuel Grumbach Subject: [PATCH wireless-next 11/15] wifi: iwlwifi: mld: remove AP keys only for AP STA Date: Sun, 9 Mar 2025 00:01:21 +0200 Message-Id: <20250308235203.f06a4d6eed2b.Icd20af668a22bfae5328eb0ea00ce10a72ce3539@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> References: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Israel (74) Limited From: Johannes Berg On station interfaces we don't only have the AP STA, but also TDLS stations. Don't try to remove AP keys for them. Signed-off-by: Johannes Berg Reviewed-by: Emmanuel Grumbach Tested-by: Emmanuel Grumbach Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/mld/sta.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/sta.c b/drivers/net/wireless/intel/iwlwifi/mld/sta.c index f266a81dd29b..994d4561518b 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/sta.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/sta.c @@ -793,7 +793,7 @@ void iwl_mld_remove_sta(struct iwl_mld *mld, struct ieee80211_sta *sta) * removed, but FW expects all the keys to be removed before * the STA is, so remove them all here. */ - if (vif->type == NL80211_IFTYPE_STATION) + if (vif->type == NL80211_IFTYPE_STATION && !sta->tdls) iwl_mld_remove_ap_keys(mld, vif, sta, link_id); /* Remove the link_sta */ From patchwork Sat Mar 8 22:01:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 872133 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6B7B520FA9C for ; Sat, 8 Mar 2025 22:01:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471317; cv=none; b=Ilf2LYgzHmhXEJ9XU8hGnWSG5VexKPG24+j3RW0oRJG+1sARfjfPITz7BMiVXrb1rqy8nKu1txKBJcr7dU8wrVzapqcL0uL9ej9SyJPyINyfLktEqSLBpa3zn2Hp7mnhvOh4kt7U+KYRKONvJdOM0pGbAGwL/bgkAs5bL+uvRUM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471317; c=relaxed/simple; bh=MgcSWvlqTSJCFqt7sKNDMj1UL66ZK5H+l2fI2n5tHi0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=nwDbd/i1qy2VUXlwAX0Dwd1vWn6OPSQC+HtHMd72FsIiXo2eCqcPUys0BJryEbUq9Hf0dTiFeWnnUdLjkGIirekaLKkBhOe1ZT699vGsbeb0OkI/bfqQlZnXLe4JGXd9uf7Mm/gTBTYKOhV4K7c5TqJO6shwATOSDfX5NO10/WA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=LxvKa7M7; arc=none smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="LxvKa7M7" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741471315; x=1773007315; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=MgcSWvlqTSJCFqt7sKNDMj1UL66ZK5H+l2fI2n5tHi0=; b=LxvKa7M7DYkg8YzaRDr6DPtHBQvIep375emMfTrx2dezStHt/uitM0RP EoQ0wNbFY43YlZzTLWUZadmQ1PfLt/hoAOdDUrib/D26XgbPxNZC5cES5 2qbDrpUXhmlWnxveh1nnQ6PSFcH2r37Q2E3s3V3grRwJK1rqVynoEq8sk omwIazyB02i3yWPIZhljwLLUtjhcjGO/UGQ3+SDNXgp/W7oJAdjRTMPvN PRSg9o0Ccrh4ctViNoAQrEcORDON3R9yP2ya4qtOvOmRIXwkNurq1lUzT ohxgnx/tGN/ekyMsNVVSdlzpq5jStH56px2ACqCN42gSlNKSquJpSwCdn Q==; X-CSE-ConnectionGUID: LqIr5vyETSO7LMZkIIBluQ== X-CSE-MsgGUID: AgdlDj6ET86nRrhp7bFfiw== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="42540668" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="42540668" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:55 -0800 X-CSE-ConnectionGUID: DbqAGEN2TC+9he8m3xoFZg== X-CSE-MsgGUID: jCA5/5FDThG8onHiaaQ7Ww== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="120352163" Received: from weis0040.iil.intel.com ([10.12.217.108]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:53 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Ilan Peer Subject: [PATCH wireless-next 12/15] wifi: iwlwifi: mld: Correctly configure the A-MSDU max lengths Date: Sun, 9 Mar 2025 00:01:22 +0200 Message-Id: <20250308235203.afc842633002.I68153b6b0c5d976f2c7525009631f8fa28e9987c@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> References: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Israel (74) Limited From: Ilan Peer Refactor the setting of the A-MSDU maximal lengths as follows: - Move the setting of the maximal A-MSDU length in case of HT from TLC logic to the station logic as it is not related to TLC. - As long as the station is not associated, set RC A-MSDU maximal lengths to 1, to prevent iwlmld and mac80211 from building A-MSDUs. - Update the RC and the TID specific A-MSDU maximal lengths based on the FW TLC notifications. Signed-off-by: Ilan Peer Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/mld/sta.c | 24 +++++++++++ drivers/net/wireless/intel/iwlwifi/mld/tlc.c | 43 ++++++-------------- 2 files changed, 37 insertions(+), 30 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/sta.c b/drivers/net/wireless/intel/iwlwifi/mld/sta.c index 994d4561518b..332a7aecec2d 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/sta.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/sta.c @@ -606,6 +606,25 @@ iwl_mld_remove_link_sta(struct iwl_mld *mld, kfree_rcu(mld_link_sta, rcu_head); } +static void iwl_mld_set_max_amsdu_len(struct iwl_mld *mld, + struct ieee80211_link_sta *link_sta) +{ + const struct ieee80211_sta_ht_cap *ht_cap = &link_sta->ht_cap; + + /* For EHT, HE and VHT we can use the value as it was calculated by + * mac80211. For HT, mac80211 doesn't enforce to 4095, so force it + * here + */ + if (link_sta->eht_cap.has_eht || link_sta->he_cap.has_he || + link_sta->vht_cap.vht_supported || + !ht_cap->ht_supported || + !(ht_cap->cap & IEEE80211_HT_CAP_MAX_AMSDU)) + return; + + link_sta->agg.max_amsdu_len = IEEE80211_MAX_MPDU_LEN_HT_BA; + ieee80211_sta_recalc_aggregates(link_sta->sta); +} + int iwl_mld_update_all_link_stations(struct iwl_mld *mld, struct ieee80211_sta *sta) { @@ -618,6 +637,9 @@ int iwl_mld_update_all_link_stations(struct iwl_mld *mld, if (ret) return ret; + + if (mld_sta->sta_state == IEEE80211_STA_ASSOC) + iwl_mld_set_max_amsdu_len(mld, link_sta); } return 0; } @@ -1222,6 +1244,8 @@ int iwl_mld_update_link_stas(struct iwl_mld *mld, link = link_conf_dereference_protected(mld_sta->vif, link_sta->link_id); + + iwl_mld_set_max_amsdu_len(mld, link_sta); iwl_mld_config_tlc_link(mld, vif, link, link_sta); sta_mask_added |= BIT(mld_link_sta->fw_id); diff --git a/drivers/net/wireless/intel/iwlwifi/mld/tlc.c b/drivers/net/wireless/intel/iwlwifi/mld/tlc.c index 85ec358f1417..f054cc921d9d 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/tlc.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/tlc.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause /* - * Copyright (C) 2024 Intel Corporation + * Copyright (C) 2024-2025 Intel Corporation */ #include @@ -467,7 +467,7 @@ static void iwl_mld_send_tlc_cmd(struct iwl_mld *mld, own_he_cap, own_eht_cap), .chains = iwl_mld_get_fw_chains(mld), .sgi_ch_width_supp = iwl_mld_get_fw_sgi(link_sta), - .max_mpdu_len = cpu_to_le16(link_sta->agg.max_rc_amsdu_len), + .max_mpdu_len = cpu_to_le16(link_sta->agg.max_amsdu_len), }; int fw_sta_id = iwl_mld_fw_sta_id_from_link_sta(mld, link_sta); int ret; @@ -493,30 +493,6 @@ static void iwl_mld_send_tlc_cmd(struct iwl_mld *mld, IWL_ERR(mld, "Failed to send TLC cmd (%d)\n", ret); } -static void iwl_mld_recalc_amsdu_len(struct iwl_mld *mld, - struct ieee80211_link_sta *link_sta) -{ - const struct ieee80211_sta_ht_cap *ht_cap = &link_sta->ht_cap; - - /* For EHT, HE and VHT - we can use the value as it was calculated by - * mac80211. - */ - if (link_sta->eht_cap.has_eht || link_sta->he_cap.has_he || - link_sta->vht_cap.vht_supported) - goto recalc; - - /* But for HT, mac80211 doesn't enforce to 4095, so force it here */ - if (ht_cap->ht_supported && ht_cap->cap & IEEE80211_HT_CAP_MAX_AMSDU) - /* Agg is offloaded, so we need to assume that agg are enabled - * and max mpdu in ampdu is 4095 (spec 802.11-2016 9.3.2.1) - */ - link_sta->agg.max_amsdu_len = IEEE80211_MAX_MPDU_LEN_HT_BA; - -recalc: - link_sta->agg.max_rc_amsdu_len = link_sta->agg.max_amsdu_len; - ieee80211_sta_recalc_aggregates(link_sta->sta); -} - int iwl_mld_send_tlc_dhc(struct iwl_mld *mld, u8 sta_id, u32 type, u32 data) { struct { @@ -547,15 +523,22 @@ void iwl_mld_config_tlc_link(struct iwl_mld *mld, struct ieee80211_bss_conf *link_conf, struct ieee80211_link_sta *link_sta) { + struct iwl_mld_sta *mld_sta = iwl_mld_sta_from_mac80211(link_sta->sta); enum nl80211_band band; if (WARN_ON_ONCE(!link_conf->chanreq.oper.chan)) return; - band = link_conf->chanreq.oper.chan->band; - - iwl_mld_recalc_amsdu_len(mld, link_sta); + /* Before we have information about a station, configure the A-MSDU RC + * limit such that iwlmd and mac80211 would not be allowed to build + * A-MSDUs. + */ + if (mld_sta->sta_state < IEEE80211_STA_ASSOC) { + link_sta->agg.max_rc_amsdu_len = 1; + ieee80211_sta_recalc_aggregates(link_sta->sta); + } + band = link_conf->chanreq.oper.chan->band; iwl_mld_send_tlc_cmd(mld, vif, link_sta, band); } @@ -706,7 +689,7 @@ void iwl_mld_handle_tlc_notif(struct iwl_mld *mld, link_sta->agg.max_tid_amsdu_len[i] = iwl_mld_get_amsdu_size_of_tid(mld, link_sta, i); else - link_sta->agg.max_tid_amsdu_len[i] = 0; + link_sta->agg.max_tid_amsdu_len[i] = 1; } ieee80211_sta_recalc_aggregates(link_sta->sta); From patchwork Sat Mar 8 22:01:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 871843 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8FEC42135CA for ; Sat, 8 Mar 2025 22:01:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471318; cv=none; b=if9nSWLuPbGCrJ86ikwDbkwsdiM5oe36vdWRO2lkNoVsVv6mPEdjM9eIxHfe5SftHwjIgNhbz0zSD7HWRlG5m32zqmRMLPSpKN18d25m3fSt4Z/SmcDfQCzLst10mzSt+AsyTB4FX5VYq8H8idW+SzjtYATAvRUcevO/QM42918= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471318; c=relaxed/simple; bh=1Uq3jySGv9ULb9S2cyNHo9pQNUEfv4Td+lyJ/y//gUk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=o8zPJBTxmt9PIH64K+nAHogOmMjzzeuQNZEIocfx/gXxq32ZnYWGZUAUaOu2NDZ+fwAEBbAKcBr3qbq4nHNKRpAQit465jOq/KeWcmit0Lb0FVhRB0dITwO5ouVdklrQLhnO+j4N5f68vepyfipBeXpz3OeKD7pUMMBcRQ9MKms= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=FFTYrVkV; arc=none smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="FFTYrVkV" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741471316; x=1773007316; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=1Uq3jySGv9ULb9S2cyNHo9pQNUEfv4Td+lyJ/y//gUk=; b=FFTYrVkVvQpY5lwpVuAYL8T+gl3YowQmucNqNQc+AXHPWP94tETRUVqw AU/sdRuLJ+8ZJPKtPrIi3OC6IlpsyJvtGCBhusgr9i4Jz3ty2lruS/97R MetVBfuHHMo930qwkoiGK8Hnj0UstAF5NtYDj5LA0GG2ICeyrIBlFgBPn 3aeH71WrUCiva5FibMJTFvBTqvTKAleZxIAeVnwLE1kBWBiZBI5nP3cc9 jJR0ITZgHehiSKCinbNO5+hUEglMil625TBEQlJA/1n4I0+ukp+0Qx0dJ A67Pc0EyFehBBsHvkb80btZ6nmhqUOaIXW5XS6Y1afV0KOCJNsbDSU6go A==; X-CSE-ConnectionGUID: YfTxIc/LSe2EYBtFl9wPAg== X-CSE-MsgGUID: UT76qsJrQoW8trtbjg9GrQ== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="42540674" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="42540674" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:56 -0800 X-CSE-ConnectionGUID: 8UuTAu/4StCzKrOnl0mj4Q== X-CSE-MsgGUID: O8KuXCtBSX6zPhQe3DEcQQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="120352168" Received: from weis0040.iil.intel.com ([10.12.217.108]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:55 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Emmanuel Grumbach Subject: [PATCH wireless-next 13/15] wifi: iwlwifi: mld: always do MLO scan before link selection Date: Sun, 9 Mar 2025 00:01:23 +0200 Message-Id: <20250308235203.a4c96e5c49d4.Ie55697af49435c2c45dccf7c607de5857b370f7a@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> References: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Israel (74) Limited According to the requirements, if the last scan isn't older than 20 seconds, we can use its results and do the link selection without scanning before. But this applies only when trying to get back to EMLSR, not if the link has bad RSSI/missed beacons. Since an MLO scan is cheap anyway, and results from 20 seconds before are really old, always scan before links switching. Signed-off-by: Miri Korenblit Reviewed-by: Emmanuel Grumbach --- drivers/net/wireless/intel/iwlwifi/mld/link.c | 2 +- drivers/net/wireless/intel/iwlwifi/mld/mlo.c | 20 ++----------------- drivers/net/wireless/intel/iwlwifi/mld/mlo.h | 3 --- .../net/wireless/intel/iwlwifi/mld/stats.c | 2 +- 4 files changed, 4 insertions(+), 23 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/link.c b/drivers/net/wireless/intel/iwlwifi/mld/link.c index 1db69aee4e9f..6db8b5305349 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/link.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/link.c @@ -913,7 +913,7 @@ void iwl_mld_handle_missed_beacon_notif(struct iwl_mld *mld, ieee80211_cqm_beacon_loss_notify(vif, GFP_ATOMIC); /* try to switch links, no-op if we don't have MLO */ - iwl_mld_trigger_link_selection(mld, vif); + iwl_mld_int_mlo_scan(mld, vif); } /* no more logic if we're not in EMLSR */ diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mlo.c b/drivers/net/wireless/intel/iwlwifi/mld/mlo.c index bbaf9ad0e9eb..99ba4018fb24 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mlo.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/mlo.c @@ -289,22 +289,6 @@ int iwl_mld_block_emlsr_sync(struct iwl_mld *mld, struct ieee80211_vif *vif, static void _iwl_mld_select_links(struct iwl_mld *mld, struct ieee80211_vif *vif); -void iwl_mld_trigger_link_selection(struct iwl_mld *mld, - struct ieee80211_vif *vif) -{ - bool last_scan_was_recent = - time_before(jiffies, mld->scan.last_mlo_scan_jiffies + - IWL_MLD_SCAN_EXPIRE_TIME); - - if (last_scan_was_recent) { - IWL_DEBUG_EHT(mld, "MLO scan was recent, skip.\n"); - _iwl_mld_select_links(mld, vif); - } else { - IWL_DEBUG_EHT(mld, "Doing link selection after MLO scan\n"); - iwl_mld_int_mlo_scan(mld, vif); - } -} - void iwl_mld_unblock_emlsr(struct iwl_mld *mld, struct ieee80211_vif *vif, enum iwl_mld_emlsr_blocked reason) { @@ -334,7 +318,7 @@ void iwl_mld_unblock_emlsr(struct iwl_mld *mld, struct ieee80211_vif *vif, return; IWL_DEBUG_INFO(mld, "EMLSR is unblocked\n"); - iwl_mld_trigger_link_selection(mld, vif); + iwl_mld_int_mlo_scan(mld, vif); } static void @@ -1011,5 +995,5 @@ void iwl_mld_retry_emlsr(struct iwl_mld *mld, struct ieee80211_vif *vif) mld_vif->emlsr.blocked_reasons) return; - iwl_mld_trigger_link_selection(mld, vif); + iwl_mld_int_mlo_scan(mld, vif); } diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mlo.h b/drivers/net/wireless/intel/iwlwifi/mld/mlo.h index fd1abe8e6084..0f1b18f61c75 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mlo.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/mlo.h @@ -141,9 +141,6 @@ void iwl_mld_emlsr_check_bt(struct iwl_mld *mld); void iwl_mld_emlsr_check_chan_load(struct iwl_mld *mld); -void iwl_mld_trigger_link_selection(struct iwl_mld *mld, - struct ieee80211_vif *vif); - /** * iwl_mld_retry_emlsr - Retry entering EMLSR * @mld: MLD context diff --git a/drivers/net/wireless/intel/iwlwifi/mld/stats.c b/drivers/net/wireless/intel/iwlwifi/mld/stats.c index 5633885c49ff..a9d3860d8f9c 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/stats.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/stats.c @@ -384,7 +384,7 @@ static void iwl_mld_update_link_sig(struct ieee80211_vif *vif, int sig, /* Handle inactive EMLSR, check whether to switch links */ if (!iwl_mld_emlsr_active(vif)) { if (sig < IWL_MLD_LOW_RSSI_MLO_SCAN_THRESH) - iwl_mld_trigger_link_selection(mld, vif); + iwl_mld_int_mlo_scan(mld, vif); return; } From patchwork Sat Mar 8 22:01:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 872132 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0A093213E73 for ; Sat, 8 Mar 2025 22:01:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471319; cv=none; b=bAqMlmuSykNOoQpCEM0aYRPUeeoHBGVKRuBayGwnJGsXRj5FUrEY5Dx5W7xg1m0zzi+DCGtv24/Fb2WhTAKtqREAOt4CiwDsC88X6z7J01rgvZE70mB+6Vv3MwWFz3pm1SlLcCdHO00G3x8/CdxqHLEPKh/L5u4pMC/5ztjZkXY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471319; c=relaxed/simple; bh=fMFUirmSSi+PZ9aORxxtumMiw1oYzuSI+08YtsP8rNE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=vCTiGWpiux4waFrXq1H+aF/777RFqiMBbdOt8NGTVUz8JUrzJEosQv8AINDv8PpIuE1GfZYuvcgn5mROCd7qVWfkXatHt6yzK+K67ZZIwiYxIRKcY75GkB2pZJL2sjScsOi7KGsL9yyMHiJH/nHGAm68pw0q3SsSG2LV61STJ4g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=L+g23mMp; arc=none smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="L+g23mMp" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741471318; x=1773007318; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=fMFUirmSSi+PZ9aORxxtumMiw1oYzuSI+08YtsP8rNE=; b=L+g23mMpB5zsC38SCPY0aklc/etAd5g4FYXg7CNxqqKADwizbQlzXI5+ xJgnOXXkrdpeqPCYagyXK+vhBcqehu3XhE3hyz7K61iQM9D3qqi3WPE+3 e56Ep1AvcJM+Lm7Cx42dikbUyNfyl0lZ60wb4bzKJZJaQMmBO1Ykrat3f qIFJWEfwJ3Wfkv6UXtHBYh/oseB+We6T0qAlN9dl27e++6qsyDgTu9wOT T5HUQxkuja1W3/CTNe7c5JtN75RAom6YiQl2tPPZn/6ty9pT7EsK1v4Gs E01f4Ook2+g+JcYp/6VezZKL9EUmnqobg9jEIg0OLaVjgkd7B8RG+OO1G A==; X-CSE-ConnectionGUID: 5NJLUwLiQ9aj5JRjYZMxXA== X-CSE-MsgGUID: v4ngOFh5TBmxaJWDHT0HEQ== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="42540680" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="42540680" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:58 -0800 X-CSE-ConnectionGUID: 2kBfQ0eBQDOuI/uGGnDF/g== X-CSE-MsgGUID: xKsf4Z+gTb+euQ3o5oImZg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="120352180" Received: from weis0040.iil.intel.com ([10.12.217.108]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:56 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Emmanuel Grumbach Subject: [PATCH wireless-next 14/15] wifi: iwlwifi: mld: fix bad RSSI handling Date: Sun, 9 Mar 2025 00:01:24 +0200 Message-Id: <20250308235203.a31b95888244.If6dca30d657658fa902b19e07b6fbc86c48d69cb@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> References: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Israel (74) Limited If the RSSI is dropping to below the threshold, we need to do a MLO scan to try select a better link. This is true also if the connection doesn't have EMLSR capability, and also if we are in EMLSR. Fix the logic to always check the RSSI (and do a MLO scan if needed). Signed-off-by: Miri Korenblit Reviewed-by: Emmanuel Grumbach --- drivers/net/wireless/intel/iwlwifi/mld/stats.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/stats.c b/drivers/net/wireless/intel/iwlwifi/mld/stats.c index a9d3860d8f9c..75cb204c2419 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/stats.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/stats.c @@ -378,15 +378,11 @@ static void iwl_mld_update_link_sig(struct ieee80211_vif *vif, int sig, /* TODO: task=statistics handle CQM notifications */ - if (!iwl_mld_vif_has_emlsr_cap(vif)) - return; + if (sig < IWL_MLD_LOW_RSSI_MLO_SCAN_THRESH) + iwl_mld_int_mlo_scan(mld, vif); - /* Handle inactive EMLSR, check whether to switch links */ - if (!iwl_mld_emlsr_active(vif)) { - if (sig < IWL_MLD_LOW_RSSI_MLO_SCAN_THRESH) - iwl_mld_int_mlo_scan(mld, vif); + if (!iwl_mld_emlsr_active(vif)) return; - } /* We are in EMLSR, check if we need to exit */ exit_emlsr_thresh = From patchwork Sat Mar 8 22:01:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 871842 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6C0002135CA for ; Sat, 8 Mar 2025 22:01:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471321; cv=none; b=u9ltHiLQK44cqj1sn3+oz5KYBvjwHOLuNHuNHxBvvxCELsfsMg5Vf7LEt5DwVNurxjr0vRqfd4zeuwinPleooYNggMRHxUFYnvwB6Ck0GrHdtnrtbxtUc34kffBO0q+H38gI6bwtrompSNagLvdMiL8NSrU9/zJbT6RAY25C2UU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741471321; c=relaxed/simple; bh=mRZzWT9+bZT6a/9YzQAMVvuT8oxnnIH0ZTC0OzcbbiA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=KJdfA9omyI0NN3zMyyziliCx2+ETwEQ7Ds24V7Ro2mG4w+CKD9ZZe9yN9kUgM4xKugKL4/EsPqokTvE325bqUIy7+kg3xw8XnODKgXKZwnQNqXwFfULhNu34rhCuGdYBEmQ23gA4GukWtHGHC0ZI+v120JPWXIXDYAHm78Au6CA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=HrUsgNvf; arc=none smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="HrUsgNvf" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741471319; x=1773007319; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=mRZzWT9+bZT6a/9YzQAMVvuT8oxnnIH0ZTC0OzcbbiA=; b=HrUsgNvf2BTIkk+BhD+WxOGkt63aIi8REQ5d1iKekG7s0iTG7G4OuAJ4 5zFuyNJwvaHohushldgkyqk4EkSGdzlp/N7Tt6/mSACofr9mgxQht+S4r B9quQ6cy42WUB31sfH4VahttKugTzq1ke0OYaomWDq8D+Byb4lDD/i6Fk KVlWsdDYdnM+wZnY5P+l95mAyjYry/Zb4wB5Oqhr50jdbsqfJ5C0GwyH9 RncHwLPJwi2INkm0X9Pl/+DuU2113mknIvOTPVSLSy4SooQxx+hgzkScT rfTQQJrHFXUpoDtRPCY/HIb07YlEudyCeTPEhmqLURDheSu2FG2KgIoWa A==; X-CSE-ConnectionGUID: d0DZZdpnTHCWijqJG3rtRg== X-CSE-MsgGUID: VXvC6eYNSkmw1hMBKVBQSg== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="42540686" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="42540686" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:59 -0800 X-CSE-ConnectionGUID: r0FFI4SsTvCIzpyQnRzC5Q== X-CSE-MsgGUID: dTlacGi6Rs6k/iRqQapwfg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="120352188" Received: from weis0040.iil.intel.com ([10.12.217.108]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 14:01:58 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Emmanuel Grumbach Subject: [PATCH wireless-next 15/15] wifi: iwlwifi: mld: avoid selecting bad links Date: Sun, 9 Mar 2025 00:01:25 +0200 Message-Id: <20250308235203.6d98e287f10e.I51306021fe9231a8184e89c23707be47d3c05241@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> References: <20250308220125.2388933-1-miriam.rachel.korenblit@intel.com> Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Israel (74) Limited Currently, we don't select a link that wasn't heared in the last 5 seconds. But if the link started to suffer from missed beacons more recent than that, we might select this link even we really shouldn't, leading to a disconnection instead of a link switch. Fix this by checking if a link was heared in the last MLO scan, if not - don't include it in the link selection. Since we do an MLO scan on missed beacons, we will not hear that link in that scan, and won't select it. Signed-off-by: Miri Korenblit Reviewed-by: Emmanuel Grumbach --- drivers/net/wireless/intel/iwlwifi/mld/mlo.c | 10 +++++----- drivers/net/wireless/intel/iwlwifi/mld/scan.c | 4 +++- drivers/net/wireless/intel/iwlwifi/mld/scan.h | 5 +++-- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mlo.c b/drivers/net/wireless/intel/iwlwifi/mld/mlo.c index 99ba4018fb24..879fa7b77780 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mlo.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/mlo.c @@ -704,10 +704,9 @@ iwl_mld_set_link_sel_data(struct iwl_mld *mld, if (WARN_ON_ONCE(!link_conf)) continue; - /* Ignore any BSS that was not seen in the last 5 seconds */ + /* Ignore any BSS that was not seen in the last MLO scan */ if (ktime_before(link_conf->bss->ts_boottime, - ktime_sub_ns(ktime_get_boottime_ns(), - (u64)5 * NSEC_PER_SEC))) + mld->scan.last_mlo_scan_time)) continue; data[n_data].link_id = link_id; @@ -819,8 +818,9 @@ static void _iwl_mld_select_links(struct iwl_mld *mld, if (!mld_vif->authorized || hweight16(usable_links) <= 1) return; - if (WARN(time_before(mld->scan.last_mlo_scan_jiffies, - jiffies - IWL_MLD_SCAN_EXPIRE_TIME), + if (WARN(ktime_before(mld->scan.last_mlo_scan_time, + ktime_sub_ns(ktime_get_boottime_ns(), + 5 * NSEC_PER_SEC)), "Last MLO scan was too long ago, can't select links\n")) return; diff --git a/drivers/net/wireless/intel/iwlwifi/mld/scan.c b/drivers/net/wireless/intel/iwlwifi/mld/scan.c index 5f4ede92028b..7ec04318ec2f 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/scan.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/scan.c @@ -1794,6 +1794,9 @@ static void iwl_mld_int_mlo_scan_start(struct iwl_mld *mld, ret = _iwl_mld_single_scan_start(mld, vif, req, &ies, IWL_MLD_SCAN_INT_MLO); + if (!ret) + mld->scan.last_mlo_scan_time = ktime_get_boottime_ns(); + IWL_DEBUG_SCAN(mld, "Internal MLO scan: ret=%d\n", ret); } @@ -1922,7 +1925,6 @@ void iwl_mld_handle_scan_complete_notif(struct iwl_mld *mld, mld->scan.pass_all_sched_res = SCHED_SCAN_PASS_ALL_STATE_DISABLED; } else if (mld->scan.uid_status[uid] == IWL_MLD_SCAN_INT_MLO) { IWL_DEBUG_SCAN(mld, "Internal MLO scan completed\n"); - mld->scan.last_mlo_scan_jiffies = jiffies; /* * We limit link selection to internal MLO scans as otherwise diff --git a/drivers/net/wireless/intel/iwlwifi/mld/scan.h b/drivers/net/wireless/intel/iwlwifi/mld/scan.h index cb589e002319..3ae940d55065 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/scan.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/scan.h @@ -108,7 +108,8 @@ enum iwl_mld_traffic_load { * in jiffies. * @last_start_time_jiffies: stores the last start time in jiffies * (interface up/reset/resume). - * @last_mlo_scan_jiffies: end time of the last MLO scan in jiffies. + * @last_mlo_scan_time: start time of the last MLO scan in nanoseconds since + * boot. */ struct iwl_mld_scan { /* Add here fields that need clean up on restart */ @@ -129,7 +130,7 @@ struct iwl_mld_scan { void *cmd; unsigned long last_6ghz_passive_jiffies; unsigned long last_start_time_jiffies; - unsigned long last_mlo_scan_jiffies; + unsigned long last_mlo_scan_time; }; #endif /* __iwl_mld_scan_h__ */