From patchwork Sun Mar 9 05:36:39 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14008043 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.19]) (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 58EA7219FC for ; Sun, 9 Mar 2025 05:37:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498630; cv=none; b=O4L17mpRtUWFJUExTYRbbJvWsKKOIZ86Miy6KqUw60ygoSexbpIjV8P/ZxZj0LvYv/aWNu9O+ELuadqGq0nO7k2kg/oOFOoxLs+Bms/Rw8Tl1/mYUJvMeT4OqHIRLI+rrAuFvaHZwVt1bLnFO2oSqNu7RuXeBfjEmMAVJcwwCzQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498630; c=relaxed/simple; bh=E5Z4OPGNz8H9581BuBj0UoVBdzsVdMpx+AwxQ29Ihwk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=tIn0st4sf6fEwnzw7PEHx8eif8kp3w21weJjqH0HiXa246rkrtzBNZLdfhTCWPX4+wMbSuJ2NW2jVTE7wR73TG8bhrdL/4512p1Km17UYDvv8BTVis4H4dHMN+109eoOiIY6Kw5jx+tMKxtKrMKcp/D9iAVFfD9VbeS9ZNaIdfc= 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=JA07+oKp; arc=none smtp.client-ip=192.198.163.19 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="JA07+oKp" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741498628; x=1773034628; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=E5Z4OPGNz8H9581BuBj0UoVBdzsVdMpx+AwxQ29Ihwk=; b=JA07+oKpiyGENcmA4bUdBJw6ywPXZT8mi4ablz1Odf9+92F0mOA4DXg/ teiV5q+X/7bDolUS7lohV4IKObpMSv9bjkHQ8Eo4GELzo0hJ2VCvkL75Q m8s/B/SoBGW4vXVClv/P/+4G5ANWeq97ncr8issEudhErw+NmXIQiWMnw ZYKPnf1dJPJpzWzBU6ofBCFzeGEbl0Q5gP9TSjALzNBfT2NsdMu+fvD2B au812pz6+L4NX5DgXZ5TSn5NIovksiHzLwwVRmCW/Tn+eplXtJa2eYUqV 8al5CVBKQccjF76tYccW9W+uTsjAj3EQsd8cksyWw+htL3i/3c/r6NLCI Q==; X-CSE-ConnectionGUID: 5FbyuLI2QVOuMh8DkSCREA== X-CSE-MsgGUID: J8ei+qfJQ96ifzHOgfIvHA== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="41671681" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="41671681" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa113.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:07 -0800 X-CSE-ConnectionGUID: TRwE5pyHQSyLLH0f5a9kUw== X-CSE-MsgGUID: ledH8+eYTmauxrkhaeDXnQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="150470593" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:06 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Emmanuel Grumbach Subject: [PATCH v2 wireless-next 01/15] wifi: iwlwifi: mld: fix build with CONFIG_PM_SLEEP undefined Date: Sun, 9 Mar 2025 07:36:39 +0200 Message-Id: <20250309073442.6f7e44a27b87.I78b9311019b59477a1961cddc4640b255ceda651@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250309053653.2697525-1-miriam.rachel.korenblit@intel.com> References: <20250309053653.2697525-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 Sun Mar 9 05:36:40 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14008044 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.19]) (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 2300354F8C for ; Sun, 9 Mar 2025 05:37:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498630; cv=none; b=nWemOm2wZkHtON/RWx95LuW9UD0eKESDunQk6fmNkDWieb43mVfyysJliEocCJO2HBQe8wLYLRiYt1EQoUh5INqnZXvVoifOuxDOUyL2dQn5Nd4PhJCM1+0jtp/d3Gzw8uuxZLKc9404r1GMMijXBZgpYZZZ/RXN2DZ+3JGAYxg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498630; c=relaxed/simple; bh=qiu6D3O5Fs5+np7jyjiuQi7ZEmGDSSmwq9OLd1BtLUI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=jUn0LV/+1ce169R5Hf2Z5K+65U6rB9JS1as+1ajXbCC8TlKBrPZfzEb2nFseif4HPd97pI7PwCMAaQeXk3FOPOfweSUdMxeaPGXfkU9toIy9sribuGPLN0ZNxkOziGup4HPCp1BNvRPYSgHMz0L+zG4s+J4rQpqp+vW638MQCx8= 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=XPgowFt9; arc=none smtp.client-ip=192.198.163.19 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="XPgowFt9" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741498629; x=1773034629; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=qiu6D3O5Fs5+np7jyjiuQi7ZEmGDSSmwq9OLd1BtLUI=; b=XPgowFt9SU9qBztNHlUZh0s5KJU6uIfGTKYYwi3c5iRYJA4xrTNIr1Cq Txr5HCtgRd9mLhizrE1pc5WWktiwKQ0aUiW1jy9eZ6BC1SjZPBtCGDBU7 tzWF7hGKfA2hFYnJo43QLViRDbqbNvtUR3+g7+Sd2Nah2uuLa/bIJQ5rL R8SqfU7YLQzq4SDg9S2R0g+O1OWBI9EAxKNKQOIpEL7NnTTo2z/Wd7z8N SpsHGE+i4JR0RHrSVtDT+t/doxZ0zLomZ0/M8isbNoqRJGuKCMqH5vZH1 MrMJZqFqxcWpCvytR/Rxhuq/+e0KX9AnWrGHd9GkYUJZLqNRNvAtmO0gL Q==; X-CSE-ConnectionGUID: TqURk9kvSeG46Kd0HkIgeQ== X-CSE-MsgGUID: GJQVbZ2jRW+aSxc8ht6BlQ== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="41671684" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="41671684" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa113.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:09 -0800 X-CSE-ConnectionGUID: eBCY9O6SS1isUpwm6tzIcg== X-CSE-MsgGUID: oZujZwd0SG20FTMYLCny+Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="150470594" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:08 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org Subject: [PATCH v2 wireless-next 02/15] wifi: iwlwifi: mld: fix SMPS W/A Date: Sun, 9 Mar 2025 07:36:40 +0200 Message-Id: <20250309073442.1cdeb78b19ba.I58fe02c062524029071b04b093a1b09c5e46f4ef@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250309053653.2697525-1-miriam.rachel.korenblit@intel.com> References: <20250309053653.2697525-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 Sun Mar 9 05:36:41 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14008045 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.19]) (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 D162414B086 for ; Sun, 9 Mar 2025 05:37:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498632; cv=none; b=sFkUvF91ZXU2zZy18rjKWIaKwxAFiGeMpTOhRtCAG4fUIERsSPEkFqtIXIlUNHpp3/ThyGQe25mbCLjfXlSQOUnr4JnR++JHsACHG+pBGee32gqGmcLW4V2Is3nJHMpJrKYxl3DCL2a2PEqbyzRLZ3LpbL6eorUjh4ZXPOf3G2c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498632; c=relaxed/simple; bh=pFSKozayYzeopL8FBkry1CrTE6r4uQjei3FrFIixpis=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=thQICUFEPbVcX4N3lHfLFWtnih94t59tlshHIsyITmeKqBHJnX/o86mLEbEcBO4V434/93bwiEA2tVA/8nGFDLJ5/yKzat+C6x/g+8CEUKbm/eHf86qIOF3SwE6vD+YWzeBFPvTx3Mk/WCcMhVXv+KD67HYL2cPF166ppJb9hBA= 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=Sb8sAOLP; arc=none smtp.client-ip=192.198.163.19 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="Sb8sAOLP" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741498631; x=1773034631; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=pFSKozayYzeopL8FBkry1CrTE6r4uQjei3FrFIixpis=; b=Sb8sAOLPuigsBCqCede+qKiQx3O4pBKwnyyV/TI8s/Wax6QgLh09dIN2 AfWe+lwWYBdtp9rD4zWriRn7u/VxAmA2LWFPxc3f/9KI9RATpIlfOBYX0 /zgQTD7HQ9HGDLXGKiKjkuGOYtZC3M3INELomlh+lXiDT489kHOOpoFNS sPr9CrNDgDtk4mAR83t400s8cbrKTY4eUcKlwuyOmbmjP0yxQMtXRLSF5 U1CGAx9eOHGA1FaDwT54QrVRIMheQh7dqF0gIa2IC+9cgrqhdCcvLDbcb Ym4QkvWUemtEsgwr1tnvtYnOPqprXewB8wu71N0PoiweqyUSxs+SCAz2F g==; X-CSE-ConnectionGUID: bdfjnoDKRvuo6i37QppwCA== X-CSE-MsgGUID: YAS2iAguR0SGfqrkt0YwPg== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="41671686" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="41671686" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa113.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:10 -0800 X-CSE-ConnectionGUID: KfrX6PaqQP2wveRpZY51Pw== X-CSE-MsgGUID: UwWohM6fTm63IlUTXLNo9w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="150470604" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:09 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Emmanuel Grumbach Subject: [PATCH v2 wireless-next 03/15] wifi: iwlwifi: mld: track channel_load_not_by_us Date: Sun, 9 Mar 2025 07:36:41 +0200 Message-Id: <20250309073442.dd443fc5b178.I68b2fed197aae14888159b7a73bf40c2f346f41f@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250309053653.2697525-1-miriam.rachel.korenblit@intel.com> References: <20250309053653.2697525-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 Sun Mar 9 05:36:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14008046 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.19]) (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 59AD554F8C for ; Sun, 9 Mar 2025 05:37:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498633; cv=none; b=ISUdn2ObYzo8981DhjxfboYGNFkl9QaUZVYyhDgGDJteZJYfDk4oHKi/KYTWA4BR9YeLZ9xdF86mUV1lEnuq6ftTPxFvyfv/CtoqY+kin3aMbRQqCV03krG3zoEv4ugk1Pm9UmcE0vGQbhUNgJrzbubKLf6izk2hBwSE6LdRUNk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498633; c=relaxed/simple; bh=ppb6Tdxwu9zik7hUyKIif6LlLEkF6pu6cGPBD1TsbjY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=oyhhStQnsAQrnVXYoCDq66FqVzZnVQdS1mLlTqcpnFv4iO4Lb3UEStI7Kpuzu0AmgJVcJdYpQZWhlVsYnuWRApWmYCFscaEpqush38SJhGsVgovg95Fj6krH0gFaP7d5n/SfwI9KmzYECrRZjQTGrIuHtMm9W4FiaFVNFfsVK/c= 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=MWcnN5fH; arc=none smtp.client-ip=192.198.163.19 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="MWcnN5fH" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741498632; x=1773034632; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ppb6Tdxwu9zik7hUyKIif6LlLEkF6pu6cGPBD1TsbjY=; b=MWcnN5fH4kQ/N38yFpkqIGmeNCiuv03HtHKIA8aSDT8grjqunJ2/Ucw1 ejl9lQDwHbJvn75u5uNapmwQntfxUEufmSS+nsJG7uzHaYM85XVL7iplY UzyqPXgXYXuYYfS5CLLhti/VOev8hTAlQvoFAF+7bhDc6DmQTogdIoFI1 8sY8YEK3NuPKVHJaxLL5cB9HgcqVpIvM2gWjD91uOWTfouSt44e07Or6f MAiuEsGDw5z1zlu3RdQouOaEmquwEqSQjUI/prLj8oIqjW1MM3SgVzh8n AsOdwajpiR0Et5eXCqtVNu1iQtz862LlnHI/EiWYmcyk19fIZmVfYll9m w==; X-CSE-ConnectionGUID: k5hxyNETS4yuiX98fYRL3A== X-CSE-MsgGUID: L6oBeMvBQNGG5cq7h/ybmw== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="41671689" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="41671689" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa113.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:12 -0800 X-CSE-ConnectionGUID: 4JSPXTIcQvu4pU+qFfKfqA== X-CSE-MsgGUID: SAWtu8vFRAKclxX5+vBBQg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="150470613" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:10 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Emmanuel Grumbach Subject: [PATCH v2 wireless-next 04/15] wifi: iwlwifi: mld: refactor iwl_mld_valid_emlsr_pair Date: Sun, 9 Mar 2025 07:36:42 +0200 Message-Id: <20250309073442.0a3b2f88fbbf.I0152bc39e828488451e85135feb044ce1f7a85d3@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250309053653.2697525-1-miriam.rachel.korenblit@intel.com> References: <20250309053653.2697525-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 Sun Mar 9 05:36:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14008047 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.19]) (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 C56F614B086 for ; Sun, 9 Mar 2025 05:37:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498635; cv=none; b=kb7jVFq3ANChR9YGYY3EsPF4Z/hd66T8EM/QYXTCcfndmb1t+vHvc0a7GPxZapwjZ/6N/RmWbzrQE4VcQh7MW2UszKsRg7X7nMfu6JoCJCVaw9MjWnrVvzCth9YCEcQMK0toKs7SjfkYgdAtBjQ9d2Kl/WedK517qYWikMqEwvw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498635; c=relaxed/simple; bh=REAIoendfzQyX6wyUdJhIUsemDKdtguPeCQcl/KPyos=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=uSnCapPZHo7EzlVmenvpF1kHWXA9sIQo1U/7DB5Ek74cf52DkVGCFEV2KYLerII3rHWQUC7KUmCgdumlxh9gNgdN7OMwKZf/YbMjNK6P2MKwBVhJ8JoWiUydNwP33LkWOYqzQsBRfKIinyVOUz9reh61SZMxn0Ly6E8aGUEga1s= 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=MAVoDldu; arc=none smtp.client-ip=192.198.163.19 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="MAVoDldu" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741498634; x=1773034634; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=REAIoendfzQyX6wyUdJhIUsemDKdtguPeCQcl/KPyos=; b=MAVoDlduZrccRaNkEnx/XYSqHa8H2csaBQeOEnNatAivl158F+R2rHST i/nLwKz8phlkdy9VVfcCbtR16EKQI6tf9STpb0YBpY/iCtmJTerRpYeu8 PjujeG+Gq4aXcP+gf83g+t5cfBtUVeGa1tVpEWQsuKRIduqYBvDZFmi6y 3h5J5Begniq76gt57nTFrTBoFSDqChEuurvmuqs9SFwlMePehOol9gWFi RIzCzOgcVmF3Za3x+zGeohtCRPskHUK+ejuMky5iCaA0ndFUCU8impV0T KaKh/XjoVdretzqGQdxfMueKi9po5k4w5cb/Gv1ykDto0UAnsHpogY2Bl Q==; X-CSE-ConnectionGUID: kCi+aVAAR9KDnIEGmFVn7A== X-CSE-MsgGUID: 2wMo5zaMSbiee6PdehyGRA== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="41671691" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="41671691" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa113.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:14 -0800 X-CSE-ConnectionGUID: GblgaQWKS1GEZlKbfotauQ== X-CSE-MsgGUID: Dq/jZIplSLuXfSv5zcBGww== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="150470618" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:12 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Benjamin Berg Subject: [PATCH v2 wireless-next 05/15] wifi: iwlwifi: mld: assume wiphy is locked when getting BSS ifaces Date: Sun, 9 Mar 2025 07:36:43 +0200 Message-Id: <20250309073442.6ce298d6a44f.Ibc862dfdd6cb2da63781c791b9dc601bd5ce4bdc@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250309053653.2697525-1-miriam.rachel.korenblit@intel.com> References: <20250309053653.2697525-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 Sun Mar 9 05:36:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14008048 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.19]) (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 56CD154F8C for ; Sun, 9 Mar 2025 05:37:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498637; cv=none; b=L33mtL3tQnU1Y1YpmdKe9mEraJofntLd28I9hmuUaZaLUZYUnDZa5eXuNrQejqaSzJQyd6Pbzi7AnG9iFoP6qP+6kBP1ype4Fp+5uizAsXUI7wWU96w0wrGb80LMsDBRYhxx4gdkGG1b+omx+IpYwjNG4REG6npZUgU2NP8W5Ik= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498637; c=relaxed/simple; bh=EdRmZujHb9fs1v2CBTyju/7u68tzpZTsjGWYGTGjEB0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=KUm5xMSLy2/MyUMXGItNrnA2Q7HBdsWHZ13blzFjud2GbtmMs+yfH65drvt3TJoDDX8MhBuboUgXRgDlyTUnySgP4PxwixpMKOgXOOBJEYrc9GSEaCLGiZ9bIq7GmDyzK1ZQP1ywBih7F4ygWrlgXblBngxi8Bu6IV2l3DZ2I24= 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=EUg3i9WG; arc=none smtp.client-ip=192.198.163.19 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="EUg3i9WG" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741498635; x=1773034635; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=EdRmZujHb9fs1v2CBTyju/7u68tzpZTsjGWYGTGjEB0=; b=EUg3i9WGatXbgsy7V9/CdeLEZf3GT4TPVExD9DEbDFmSCY6eVPIorQ7R WkZukhiM1M2SHBA+SkN96KvDxR0PwmimXHpd8qYZm4E0hRmhqqUF4F/NT 1xFdagJQ1zEgc8xJ1H3KBgxnaoI7M2Bt428ERkOC7pnjlzgLqyS1a/3Yk kLhqUErF/j48K9OafTh0PpdVcHdKMGX7ePcTWdI6LeGTXUnS/wpSUy52q ntvqlSUaft/2TsdgJufvDqrpEGaUFE251WnLxXX4VzTZ1ei2sdEug01pe 5GYaEUaUfp2ZhB1wM8QR9oQ4QJOjCJGV1WKAmHGCMGIxyhMdCwT4lvnaW g==; X-CSE-ConnectionGUID: eT9+FL9BRIirPRqTG2Rzlw== X-CSE-MsgGUID: 3OWMAFPMTnmTWezPNt80rg== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="41671693" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="41671693" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa113.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:15 -0800 X-CSE-ConnectionGUID: HfjgIqWTQ46PD+IDvBTYvQ== X-CSE-MsgGUID: Z3h+a2FbSNqHxqGXDhN7SQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="150470623" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:14 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Johannes Berg Subject: [PATCH v2 wireless-next 06/15] wifi: iwlwifi: mld: initialize regulatory early Date: Sun, 9 Mar 2025 07:36:44 +0200 Message-Id: <20250309073442.10ab8fed94e9.I7c8dee3d14c7427a56882739f82546c6492f3b10@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250309053653.2697525-1-miriam.rachel.korenblit@intel.com> References: <20250309053653.2697525-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 Sun Mar 9 05:36:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14008049 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.19]) (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 EBCA6136351 for ; Sun, 9 Mar 2025 05:37:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498638; cv=none; b=bO29X/HWLcrdgq0mRD86crzPQ1mxEC2Nowxi9BTXpyrDKUH8zJIOux1yNlIbVYYmZdGQWQ3/6D47qSlaanVrf1gd0GygbwFn40u6ZGw/4S/Mbr6viIkOOXSuhT+Tkf3sazhZXyQe0RpgU9yyVOXLsrIikVYoNCyLrF924IrLojs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498638; c=relaxed/simple; bh=WLUhtHJhudWqJPWAQV2HbGbmgk9SwTLmDIYLA1wZ0Bc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ZpWDSaDZ9YVsps2NQRVJezH0h/7mFxlu9SzJF/9dxLaFSSDurr/UlQIy/0PeDwjNObfrxkt17BQZ1ix4RxxamkXFulJC16mBDfNv++OGY5XgeKqMW7/ZF0A+ydXRwYIzJMUj8LQI6qVE5qI93dDvI2ZsXsiCBfvRHHsuMF/qAeE= 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=J1Uc/0Fz; arc=none smtp.client-ip=192.198.163.19 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="J1Uc/0Fz" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741498637; x=1773034637; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=WLUhtHJhudWqJPWAQV2HbGbmgk9SwTLmDIYLA1wZ0Bc=; b=J1Uc/0FzqB52pMdUZOmzNrS2r9/Xu5cBIzKK3rB7imsI3wB7NrI5f9BY LDq5Y1zSutNWsKH47n5AW5iFt0Vo9D0FJACLcI6mHBbrgOwjcBMFlW0yP GkB2pXKrFqE0q2UKQTnKOPvmbnSjvU2SRdDmR+ReRI3zmHxS2siL1SAcO diztzL5mfMpuClILJdQcimK9n758t9lEMQhNp+LwRwhr7ClCemtamfKMB T1rbZeLpY5baKzw0wfOpIee+G38RtXT2cPCPfe3ifMpDpatcINkhr7tVM fHJ2Qw5MgI66Hc3ocz2k8NM12OMRZXsvHRKJrtdGObQkri1zZDU2d0fSZ Q==; X-CSE-ConnectionGUID: 9Vuv5NTxRB2Fi1KHijtkBA== X-CSE-MsgGUID: 5agJ7pD+SueQ4TjIbxZEmQ== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="41671696" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="41671696" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa113.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:17 -0800 X-CSE-ConnectionGUID: GUqhKw7sQhGi5KXp7VkgHg== X-CSE-MsgGUID: 0aQW+IQqSxehQJSKSyJklQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="150470628" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:15 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Daniel Gabay , Benjamin Berg Subject: [PATCH v2 wireless-next 07/15] wifi: iwlwifi: mld: use the right iface iterator in low_latency Date: Sun, 9 Mar 2025 07:36:45 +0200 Message-Id: <20250309073442.925cdca61ed0.I34f5c52d27414cb4c301bbd24df7c3530a43fa1d@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250309053653.2697525-1-miriam.rachel.korenblit@intel.com> References: <20250309053653.2697525-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 Sun Mar 9 05:36:46 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14008050 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.19]) (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 309E615E5DC for ; Sun, 9 Mar 2025 05:37:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498640; cv=none; b=GxNey++CUNikOMqVbqujzOMTPYZVBYm4klwJGFwN/PQs9Uj9wdjYG1xneAW9Ha5LW+n3Kfl04X/ZEHaTkO6zz/yL7GlJlNtsVOwRZ+3w5RoSOhZkz8QQFN+PohyBAXkebl5AREbSSs7NfM/COxFdLs6mSaSgKkTTx4x3PkLrC+U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498640; c=relaxed/simple; bh=dIwur6ttrR6eDMU6ax+fbSD92MTmtuIeYgs5PrhU/Co=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=cM6mXp7HVKE/QzCQdzcsaeYvWKfoXfcVtifZyoeS5WuwaIYMJCcndkBgplzh5+JHydNPiGMwPyyK4J2TaYoqkr4AKYTwfFXhYqK3UiVd/AgrvDhvAcOwuM0Zre/WaVCtPCV2LSqwbzLlAlHr9AvEs38cn1uOtVNxofkftDxxprU= 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=B4Dr8jqi; arc=none smtp.client-ip=192.198.163.19 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="B4Dr8jqi" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741498639; x=1773034639; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=dIwur6ttrR6eDMU6ax+fbSD92MTmtuIeYgs5PrhU/Co=; b=B4Dr8jqiZiq7boGFVVhTtQnCthBC2NzuHrsNswIv2MHogNfwPVxRaqvT hWjhwskE90uUrvnqurAhThH20eHJ6TPNwHs/nJrhMsfUC2T7jYjSB1/Ve 4xz5CYdLJ2op+uieJ3izYHwrAAI2UYt9mf8CRuTYsfplaDDIy53xpDAZZ 1BDkQgHfFx3uIqudqu4zj3obxPJhyikEAJ/bBUxQim5k2cGTZ2UtzN7Z3 q7Sn3YsRuEu3cSkeL79DmAthQ2DXmJYNbIU6xQRrimSRBK/YJ/2hn0Oqz x87lKbKU1OX2CIC67t48DzXly8kePHJ5ErsQC22wtpYA9J1kvMoPiGIh5 w==; X-CSE-ConnectionGUID: Oppo40J8Q4aGRZI6j2on7w== X-CSE-MsgGUID: QtBz8ap7S0qyWJVeICtg+w== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="41671698" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="41671698" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa113.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:18 -0800 X-CSE-ConnectionGUID: srdevqiPTU2mU8h1gIrmxA== X-CSE-MsgGUID: ZpZibghNR3yNTShZlP4SAA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="150470638" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:17 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Johannes Berg Subject: [PATCH v2 wireless-next 08/15] wifi: iwlwifi: mld: fix OMI time protection logic Date: Sun, 9 Mar 2025 07:36:46 +0200 Message-Id: <20250309073442.58efb4c91655.Id596fcda2fb28f5945548d780be9ff90aee76b7e@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250309053653.2697525-1-miriam.rachel.korenblit@intel.com> References: <20250309053653.2697525-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 Sun Mar 9 05:36:47 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14008051 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.19]) (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 70DC7146A72 for ; Sun, 9 Mar 2025 05:37:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498642; cv=none; b=rqX4glWN/Q1Q30/nmp3rFGj38IOQEvm+nhOp6nxP6IuiU8JZu/tv4rf4ODcaJ9qk4q+LygwfJrVyOGHksPt7pQfoRWMC9wLSvZFB8C42ZOjgkLkxfm7b+93kKGQFplluFxiPR92gC5C1kJ4YLGTDzq1jt3BiUv+EkDegcWHhYko= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498642; c=relaxed/simple; bh=3w+5rfCCF40uT97oCKOkPAsApigFMEflvsBdCnyyoU8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=IHSbwTewTB4UfsUpVhVKNb3PhFAcCa8d5s5fEiI+oshR/F9uq1ThxTCalcgkEnSVTo+B2ah3cGvEM7DVCVAWZEh/mhBU4gQud8n/cyMFf3KUmIU9b0SbeVPPZhTld+qO914BkHTA6GBxKeeYUrxcmGaHe3ZSDeOKXrU+6ppocVU= 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=euYBeDjH; arc=none smtp.client-ip=192.198.163.19 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="euYBeDjH" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741498640; x=1773034640; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=3w+5rfCCF40uT97oCKOkPAsApigFMEflvsBdCnyyoU8=; b=euYBeDjHvBBBD3cKXxUkuIWbfbg/w4uGPwCvx4z4UPCfNGz83HzxO5nN sI5CowyRL67PkYabJc49NjMOPPKiItArci9Bgb/KTirSDnJaynLQIcIFd xgj2Vl5vkIZoBwbluA63Ebo7SsVVrprexuRMwIZ3HjeYLy7XrPfByWmP0 JTaESJ4CGG+mMOdZgkgrCfrjnYO816wB9ijSM1oQ6TE5uXlh/5dxT1dSy 4ZAZCHQdm5F9zdeuFa2/XAujR7nRz2qbGU5DJkclXWl/bbNRtI7oxEGwp 2k/CH5O34yBfA8oTHwbixxD0nGZx9gF4Kd3hJ7iyEJe9N4EHxcC0MpLp5 g==; X-CSE-ConnectionGUID: Y/tALd2UTWOpcpUmyeAUbw== X-CSE-MsgGUID: Rg2HSLGGT4y9pPxxWGirbw== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="41671701" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="41671701" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa113.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:20 -0800 X-CSE-ConnectionGUID: Uvsnv8O8RFOTvHtP9L8vOA== X-CSE-MsgGUID: VlzvARpZQZaGcwXUOpdqDw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="150470643" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:18 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Johannes Berg Subject: [PATCH v2 wireless-next 09/15] wifi: iwlwifi: mld: enable OMI bandwidth reduction on 6 GHz Date: Sun, 9 Mar 2025 07:36:47 +0200 Message-Id: <20250309073442.2706cbd0b100.Ic34636b1aee81a140eb690fca8139909a58f8e8b@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250309053653.2697525-1-miriam.rachel.korenblit@intel.com> References: <20250309053653.2697525-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 Sun Mar 9 05:36:48 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14008052 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.19]) (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 C597C14AD0D for ; Sun, 9 Mar 2025 05:37:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498643; cv=none; b=LcMR01AIoyFKEN9YrRzLPzjRGGHbuntVS2M14965yUpO3IFNCZbqv1OFf5kaSGQQOoNgJZqmwzXwc6YqnHqjOc8BxZE6SATj2sUhwasT6Dm29C6bzsnpLHs2uk713S1ilZE4VQ5GhwU0PP+oc996ZMd6OIj4f7CFIzFypboUhWg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498643; c=relaxed/simple; bh=LpsqBxERu74ubq+6NqMBznrCDAtmWg+meNeweARk628=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Yuv9/KgQapanWD+BPqAxahQmKgGJoAWZ/EcN8871wYa+wqYoA1Y04VasCrP3KR+5tRBR/9mjJb7eVqhzEh9GlylXAQDWhWLPudsu/JtbAbibmk0v57gw1HRz6ESdB2AdFiq1TWziIxj8FZ4nv6AMTwsqxpb48s1cyy91Xifh0Dw= 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=ETzIDsW0; arc=none smtp.client-ip=192.198.163.19 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="ETzIDsW0" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741498642; x=1773034642; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=LpsqBxERu74ubq+6NqMBznrCDAtmWg+meNeweARk628=; b=ETzIDsW0Xr1DLvypMGSpGGxbRxBbDN647pB8FOKCav1X6i4f5Cp0pPbr fkfXTqXicTDPqcQhixOCW3TWK2WRf3Ke+yLlz1deKAYGdlNRp/RV4n4v2 YU/WuxMZVNIchZYRpLP2i3Gmi0aZiz7L8nPPVHDV/MLp+0h3JBGdBaeAC xEMGQTbjCaARGK41GR7snxKKC1FFuz+CQPi3foo7LT/sQugdatAVGxeDk oKZJd4anD2DkSWIrZPogCw6WmQ3i3tlu5Prj7UFuQbq9+fPF8aLQc0u5w 1hbJUTvLalKbv8jLt1K9VNHhicsm1KJ47nTX0WaED3pDcyDyJruJwZCYW w==; X-CSE-ConnectionGUID: gEgESp+vTBmJIIBdls/u4Q== X-CSE-MsgGUID: ukxhY6SISn6yRhF8+zwafw== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="41671703" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="41671703" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa113.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:22 -0800 X-CSE-ConnectionGUID: PjREsnvaTYuZyReihO5ygQ== X-CSE-MsgGUID: n5T+3VOrTfKkbheCuDUN8Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="150470647" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:20 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Avraham Stern Subject: [PATCH v2 wireless-next 10/15] wifi: iwlwifi: mld: move the ftm initiator data to ftm-initiator.h Date: Sun, 9 Mar 2025 07:36:48 +0200 Message-Id: <20250309073442.92830fd553ec.Icbbd0eba34c9ba318801074f7705f6d1e5af5482@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250309053653.2697525-1-miriam.rachel.korenblit@intel.com> References: <20250309053653.2697525-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 Sun Mar 9 05:36:49 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14008053 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.19]) (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 05AA1178395 for ; Sun, 9 Mar 2025 05:37:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498645; cv=none; b=rGnFb2z4YScQ9EoJHXSEpUuZxG0Vn6iChiBp19vJGPajKhCGfHC2RVh0wGzTN3S+DSiut8udCObtEtXmJK7vKPAZhlhs2oseZTXGgOz+giGicjvh+kpYemKpyEGwNJ4y/EZ4JIYwsvZOkVsqk0o/lq2iBOsD32RzeS1zk49ss2M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498645; c=relaxed/simple; bh=SkkbjhtychOw9bFaQfslrV9cqDdKjbvYNFAOQTJ4jAs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=VsoYn96Ui3Tr6FZIa6XNlogo90ao/wl+aP4fMcNsgg+EFVO7dVTlILE+E6gjf8qH5pS/Sq3ZGJPYL8lKzmSfzMCN3x8wKCWKhwxQCAto7Y6Ioxd3pEE3pUAgnwz+3lnX61E/Ky4jczHMBzHd7V9MKqIq961LX3z7rFJFYwrca48= 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=mWGUPHXz; arc=none smtp.client-ip=192.198.163.19 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="mWGUPHXz" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741498644; x=1773034644; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=SkkbjhtychOw9bFaQfslrV9cqDdKjbvYNFAOQTJ4jAs=; b=mWGUPHXz4ckMhVfluvJWapPh5jUo5Fd80GL9M73y01a9eDw0c0IzoMIW HfdEOndzpvPMcloXbTuyS2uFUZ+IinxbQw6/VnKVBFPFXbtutsinF2ZgA 1cVOPG41+A21Y9/13sb0fCTk+6o4Qn4MUr3jqAHPzY2mVfnlWgaMyjAXK ub2CI+HIrK5BXKDxfecju4FmWs3DeRcacKygX4AYtZdtXYb26wOTh5m0D ElX4P+j/B1KV8l0KfB1isGFBCBX6K0MtSBOz3YuqNBKAFEelLOF9qgfVD 2CQdWGEsiRkKno+c1p0LSQJIgPMqUfYXFQCL7Im/o/A5T8NvMv7NYvZZE w==; X-CSE-ConnectionGUID: XJ/wosFUTR2L/T8IXZek7g== X-CSE-MsgGUID: v4tSsUb8TCOb6Fj4mnAhvg== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="41671706" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="41671706" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa113.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:23 -0800 X-CSE-ConnectionGUID: 9TOdZBqOS0eS8fn6bmhQbg== X-CSE-MsgGUID: UQhfFg/5QTChCXPWSdFKcw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="150470651" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:22 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Johannes Berg , Emmanuel Grumbach Subject: [PATCH v2 wireless-next 11/15] wifi: iwlwifi: mld: remove AP keys only for AP STA Date: Sun, 9 Mar 2025 07:36:49 +0200 Message-Id: <20250309073442.f06a4d6eed2b.Icd20af668a22bfae5328eb0ea00ce10a72ce3539@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250309053653.2697525-1-miriam.rachel.korenblit@intel.com> References: <20250309053653.2697525-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 Sun Mar 9 05:36:50 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14008054 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.19]) (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 4A4D914AD0D for ; Sun, 9 Mar 2025 05:37:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498646; cv=none; b=ak3wqS6BctD2fY+XFG0UKXI+XwbOnikSaFbvHHNrpNuysvk6+iw8b0fMo9+QYlGxmLF+i79LlY1XEpl0G8lTVLHQJWh/rgzmN9IRBbhddkD5UU25sGvJ0P4GCPjwiEAOHnaxfJe1YIvP6JtvHAAVtAFpU0OTH6TpsvO5cgjxJjM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498646; c=relaxed/simple; bh=MgcSWvlqTSJCFqt7sKNDMj1UL66ZK5H+l2fI2n5tHi0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=SKOzuRZ+kktTCSx1DKFSdZ/SoATl/CdvalZ9t1EJgzFACKsZFyV892QsCS84nyvK7ggZQ3vHHcuE9JuhKkROrijB/JtoYdKxlsiBdnExB4z01bn/w3pik6BEE+qnBGqeT+XXKu5wFpEa/sOxHRzC7mS1iPMYoYnI7cLtulkpwF8= 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=XzbLNuoj; arc=none smtp.client-ip=192.198.163.19 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="XzbLNuoj" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741498645; x=1773034645; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=MgcSWvlqTSJCFqt7sKNDMj1UL66ZK5H+l2fI2n5tHi0=; b=XzbLNuoje1+seG9VqULZiTTf74p/6/G+OSKIvCRar6IHyJXjaeBnTXZE lewO0CMvyo5GGoMoXcnTvb2N6HLgtvClRiRVz3/+y16LA4S3DdUvlhy8/ 8+3A7h+LOVX3f95SkhKjMLOD534bD302wXK33SYF8t2uNePUiQTjSXhpR AT4rhey8yFWk4ba7vEgfXo4A9s7IpGMf35l+4I5XZalnSO45wgA5OHzXO DPw2am3ixM1GgnGPi0maYfJ593lwEqGHEN5qxnxDdyo7s2OPD4joivdiQ Fwhc6L1qz8rdDuae6kJbl8trbh/wLZ4JgEL5eHu6DDGjJHh20ivkj+fSC g==; X-CSE-ConnectionGUID: eDwEfhikS0CMHd31+JwMZQ== X-CSE-MsgGUID: 1+c255ZYTMusnKyIxjmYFA== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="41671709" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="41671709" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa113.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:25 -0800 X-CSE-ConnectionGUID: CkjbpTopQS2tsna5uTR10Q== X-CSE-MsgGUID: 3p/LK3RlRiSWDcTclfvJ7Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="150470657" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:23 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Ilan Peer Subject: [PATCH v2 wireless-next 12/15] wifi: iwlwifi: mld: Correctly configure the A-MSDU max lengths Date: Sun, 9 Mar 2025 07:36:50 +0200 Message-Id: <20250309073442.afc842633002.I68153b6b0c5d976f2c7525009631f8fa28e9987c@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250309053653.2697525-1-miriam.rachel.korenblit@intel.com> References: <20250309053653.2697525-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 Sun Mar 9 05:36:51 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14008055 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.19]) (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 741DD17A2E7 for ; Sun, 9 Mar 2025 05:37:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498648; cv=none; b=PG3m/yKNifRnBeDs0SIZMzq1U+PrTL6nfjAmcxEcxTtgUL+UlAvqhUjln0lyFd8Hcf8Ers+9d49/cSWIwf/e/DDrFcje0kT7kqLNHTExHmrPmxIVb0uX8XaQClaZSK+Na811d4wSzq0vULTZ2C6uj1tA6jIx7tdRhqiKcKoJwjk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498648; c=relaxed/simple; bh=1Uq3jySGv9ULb9S2cyNHo9pQNUEfv4Td+lyJ/y//gUk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=SOJlWmy3SaSfzguPiI312k90cCN6A2THFBL6ixlH9iKoGAdsY+IXzRfc2q1pKJmzgrlB3QIkS0sNs+aI0J40Cif9BhwSjR5Pq1cZ3gWG7vGoWrGiWQdOUtqN8j1BFHZ8r+CdbpaR76fkdjaqOoUYR/wcdBFT9jDmJ/u902rjx2g= 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=bcNW9Ppo; arc=none smtp.client-ip=192.198.163.19 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="bcNW9Ppo" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741498646; x=1773034646; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=1Uq3jySGv9ULb9S2cyNHo9pQNUEfv4Td+lyJ/y//gUk=; b=bcNW9PpoXZbf/6bmI1bNj4lwSu0zd4Oy/WCtdLZ7tIft+Hf/e0mD8//U M6IG1UD3dU6Ul5KmGLTYf5/Bz1q91JPkGskdXCveM62KcMSEao6l9v0qo 9ASmxdSabMTr78qHZiXQLLuf+wf6dtwNA08oY/8QOLcbZlP6vwMrmj2a3 PGjQKDTustA68LcxoSaGoP+8ZQ8NLb+oFZE4NeW+p6Nzt7TdpJkR9FkNd 3aJM6qd0X53Qc4WZR0mPp6KILlnSGbwlDWhIZp14MEZw0cAGHtZlj6RaL r32R1dIXJqwBJUZ9nn9XpsZLHwfFkv+JzcnkpQoksyi6C+p1k6QGMaV2O w==; X-CSE-ConnectionGUID: t5XbYC1FSoKNw9AHwFm3XA== X-CSE-MsgGUID: Rez/X56eTOG+9mXDLv9UGQ== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="41671711" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="41671711" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa113.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:26 -0800 X-CSE-ConnectionGUID: HYGShvhMRV6asGjBF5cdkw== X-CSE-MsgGUID: bjwiEqGAR6mZ1o+9BWuWvA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="150470660" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:25 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Emmanuel Grumbach Subject: [PATCH v2 wireless-next 13/15] wifi: iwlwifi: mld: always do MLO scan before link selection Date: Sun, 9 Mar 2025 07:36:51 +0200 Message-Id: <20250309073442.a4c96e5c49d4.Ie55697af49435c2c45dccf7c607de5857b370f7a@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250309053653.2697525-1-miriam.rachel.korenblit@intel.com> References: <20250309053653.2697525-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 Sun Mar 9 05:36:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14008056 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.19]) (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 04F0614AD0D for ; Sun, 9 Mar 2025 05:37:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498649; cv=none; b=s9CXzE+HRHDqpOm11xdRhVZb2QnxMUvRJI89M7y3tIj2ukByrkVfPR6BkVcEYixuRSyOGITEjCp1kmrbNU5On5WlxE3MwrlAVpILpYMVXRvIbD6YwHIiRSLU6QfbMsIxHyrkNspLzZ+mQhu3XPjYgm1QA+RaURPN3sQ6SOi+dVU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498649; c=relaxed/simple; bh=fMFUirmSSi+PZ9aORxxtumMiw1oYzuSI+08YtsP8rNE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=p/iftxb41DisYRMx87QDQpFVzLjFmi4AEBLU3/+DGJRJo2lUTwlRXCJVARI7GnS53smVFMwQKtUvXbQB9uKb/PhBj538obRQvUOcqMT8JKpqLimpeeXee8SaEz9xMP4T/5DKE5MpEM8Atw9Q06cywhi7AfbyVOnX/knxaSxA+DI= 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=XCRlZOSC; arc=none smtp.client-ip=192.198.163.19 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="XCRlZOSC" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741498648; x=1773034648; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=fMFUirmSSi+PZ9aORxxtumMiw1oYzuSI+08YtsP8rNE=; b=XCRlZOSCPsLd+6yhUrpAS6m5Cz9mMCdlWvoTPT5nTMO7yGGSfTlGG2hY iyTSHffn+C7K5cKMfO7yZgRmrXAGV8PlLevumI+7uUxaEidap4RJQ60sT EZJz3Rs3uoNESNB+/eseTppN4yAmWb2KfIXwNqnNkxgg4KXx2C6ZKKWpe GTebYnRnA0FunAUNEGJyrRI0nuMHRPFhRgsJyfz103upWUCLLIwO5iK6i lYrtIKzRv/hdJMka8aXZtLhgGHItcHrOqva/yF2gNctI610w1HVtF3FeR LuvWu48F+3BQ5hF4XFaQeDs9M/grmXpX1dV68zOuLNdpG274RBjDB8rG2 w==; X-CSE-ConnectionGUID: KKvFzd4TQW2G9xBj0uJc2Q== X-CSE-MsgGUID: qeMg4jEWR/KihC8AWiAJhw== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="41671713" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="41671713" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa113.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:28 -0800 X-CSE-ConnectionGUID: 8UnVgZJOTQWRqf2K64TkGQ== X-CSE-MsgGUID: kb07M3eCQvWhjSmoLKeGMA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="150470663" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:26 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Emmanuel Grumbach Subject: [PATCH v2 wireless-next 14/15] wifi: iwlwifi: mld: fix bad RSSI handling Date: Sun, 9 Mar 2025 07:36:52 +0200 Message-Id: <20250309073442.a31b95888244.If6dca30d657658fa902b19e07b6fbc86c48d69cb@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250309053653.2697525-1-miriam.rachel.korenblit@intel.com> References: <20250309053653.2697525-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 Sun Mar 9 05:36:53 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14008057 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.19]) (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 8B25F17ADE8 for ; Sun, 9 Mar 2025 05:37:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498651; cv=none; b=sh5wJeKPdg4e8hcK5sCDC4AKWiG0I3FcCsqsbPfc8431xTC6rHBKdNEQ63tKWXdb0fwZxj53FM8oVSYWsjHU0V1URDtRR9cZckfYUAbhMqcV5JGiuATXFqnOQiKFgPkZykpqrkZM6iNiHRvefx9xeDOVFIJUNXjsRMYMCM5254c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741498651; c=relaxed/simple; bh=nGmYcPmZix/b0QbXvdbxaIwGIhD/d/H9+XV2XM+7tA8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=SsHJwy8mPxEgLFZQRJ3l5WgbF46MCObS+ffs0wwWNNqHYPaOMA+9CPc08fVEebA/d1DfZROBN93ctVFws/AJf87Nr+eleH46HzYBlZOZKQ5DoSVn2sf5qwyfIlOETT0hinSSmGL7kl0X/MMbR5Ly11p75swk0anY/bXX5qs1yrA= 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=OrPUWKbz; arc=none smtp.client-ip=192.198.163.19 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="OrPUWKbz" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741498650; x=1773034650; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=nGmYcPmZix/b0QbXvdbxaIwGIhD/d/H9+XV2XM+7tA8=; b=OrPUWKbziYwkIbSrUcuR86U0LisGFrNZZ0iib6d9dvkMxOoaOhkqL22v WDURTBZJGchV6vUb75x9x5H3E9p90X9Hfwrqb5nKQLKzSgrzaMSBnk/nx hCiKfXf2IDfh+RMLVvhoAgxNGB8Kwih7vGZy6W3mVBXzdpcz1tq+2GgbM EQFBIfjnRnJCbvQr0oW2d/f0njPff3lTiGq5n7S8khPGjUQSbBm3L0z4H q0p5LJJvpPD+ZHtDpV/tB6XL+5rq8cOT+Ok3bsfLCoHqp7Zlxa5Thbbdr ZYI8bKB3eECKNDM7gtcPhNRWEGnN5kC3yTZvI30/7XnSWvhyj5towcoFR Q==; X-CSE-ConnectionGUID: oAT7z2KmQHywoK0yGe5EBQ== X-CSE-MsgGUID: 87KnyTs7SXiHZ+krZJhCnQ== X-IronPort-AV: E=McAfee;i="6700,10204,11367"; a="41671715" X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="41671715" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa113.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:29 -0800 X-CSE-ConnectionGUID: yV4uKmPHQI2lz5ABfCtmTw== X-CSE-MsgGUID: 54f3K45UTM6A75k98AEgpg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,233,1736841600"; d="scan'208";a="150470666" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Mar 2025 21:37:28 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Emmanuel Grumbach Subject: [PATCH v2 wireless-next 15/15] wifi: iwlwifi: mld: avoid selecting bad links Date: Sun, 9 Mar 2025 07:36:53 +0200 Message-Id: <20250309073442.8f950497219e.I51306021fe9231a8184e89c23707be47d3c05241@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250309053653.2697525-1-miriam.rachel.korenblit@intel.com> References: <20250309053653.2697525-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(-) --- v2: fix build diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mlo.c b/drivers/net/wireless/intel/iwlwifi/mld/mlo.c index 99ba4018fb24..54f29002cba1 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(), + (u64) 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__ */