From patchwork Wed Mar 12 22:22:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14013987 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (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 E25621EF0AD for ; Wed, 12 Mar 2025 22:22:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818174; cv=none; b=iLV0jim+kNoyB9SSXrxTYlwpypW34vl/rn5kBqLsfw6aApHimCEIO8N0Oe6I2TxvP5iEUxDiTDQMdWNiphU4A5lzLLHJkAn4zbtPS1EZ6a4vg1TDU8w7q8/Dwa32sqqtbqUZ0eiH4W4EDtRKQGMB7ZLli/w4e+8VBQTQqiiPUtk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818174; c=relaxed/simple; bh=omaYo5lEnyaphu6ew7N6ZAtLtlltC/FJPVbBBRY8wl0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=DsGw9+sTD6MufLJnuOrtJI5SGmKyI2WBvUJC8MZd7enOQsKYqbFt70aSFfePzQpqm19FJJWUeKBECf3AIHJX2x6OR466yNkL0bQfTVnOqvKVYdP96fXJoXT4G58ovtLYQW82orgYa+3sysNs4CqIHjX2fgmF129NQTpa02OV490= 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=QR2+R9I0; arc=none smtp.client-ip=198.175.65.21 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="QR2+R9I0" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741818173; x=1773354173; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=omaYo5lEnyaphu6ew7N6ZAtLtlltC/FJPVbBBRY8wl0=; b=QR2+R9I0WT7D61dP3/30ENN47nCW4KsV5FTH8EQ9C3lJw9DpP3MzACln MRux4ZGtkrQGoWeVYXGOTj9O2S6C5mCD0zM3a1gqWe8jE0jLxqlmkONPH iyPEdVhN2DhYrkrVYS9NN9TrGFtDk8FWX2VHL+9zvhVMzVrg8r4HxmTw7 IMHKldOnCPw7vTmz0B29UnspUeh5nxlOTqt/hu1hBET4++eQepZ0/Z+PQ U2227qqaM616a51jQbPJGAYiy9y70NlMpT/t6GjIqanTp6MfkAyxvjez6 +7W5wuP3DqOvVuWjYb8oMEOr3pRxmogBkU8zkE4mQZJ0SL0j15SAPzlTQ g==; X-CSE-ConnectionGUID: LFBhcuglTnK1NZWFAd4VUw== X-CSE-MsgGUID: 3TIlM3AARuyaYCbnaAs8nw== X-IronPort-AV: E=McAfee;i="6700,10204,11371"; a="42826729" X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="42826729" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:22:53 -0700 X-CSE-ConnectionGUID: nqbgWnuaQvOeZ8KabUeb4g== X-CSE-MsgGUID: 1cR/GTSoRbW1QJuFY1rq3A== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="121267342" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:22:51 -0700 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Pagadala Yesu Anjaneyulu , Emmanuel Grumbach Subject: [PATCH wireless-next 01/15] wifi: iwlwifi: mld: Rename WIPHY_DEBUGFS_HANDLER_WRAPPER to WIPHY_DEBUGFS_WRITE_HANDLER_WRAPPER Date: Thu, 13 Mar 2025 00:22:24 +0200 Message-Id: <20250313002008.bb8a1d7907c8.I53325f2f37ccaad2b212d35d10616e06c1555e48@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250312222238.2585340-1-miriam.rachel.korenblit@intel.com> References: <20250312222238.2585340-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: Pagadala Yesu Anjaneyulu Renamed the macro WIPHY_DEBUGFS_HANDLER_WRAPPER to WIPHY_DEBUGFS_WRITE_HANDLER_WRAPPER to better reflect its purpose as a write handler. Additionally, updated the corresponding macro WIPHY_DEBUGFS_HANDLER_WRAPPER_MLD to WIPHY_DEBUGFS_WRITE_HANDLER_WRAPPER_MLD for consistency. This change does not alter the functionality but enhances the maintainability of the code. Signed-off-by: Pagadala Yesu Anjaneyulu Reviewed-by: Emmanuel Grumbach Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/mld/debugfs.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/debugfs.h b/drivers/net/wireless/intel/iwlwifi/mld/debugfs.h index 04c536db8b16..13d97184a31f 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/debugfs.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/debugfs.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 */ #include "iface.h" #include "sta.h" @@ -67,7 +67,7 @@ static const struct file_operations iwl_dbgfs_##name##_ops = { \ .release = _iwl_dbgfs_release, \ } -#define WIPHY_DEBUGFS_HANDLER_WRAPPER(name) \ +#define WIPHY_DEBUGFS_WRITE_HANDLER_WRAPPER(name) \ static ssize_t iwl_dbgfs_##name##_write_handler(struct wiphy *wiphy, \ struct file *file, char *buf, \ size_t count, void *data) \ @@ -97,7 +97,7 @@ static inline struct iwl_mld *iwl_mld_from_vif(struct ieee80211_vif *vif) } #define WIPHY_DEBUGFS_WRITE_WRAPPER(name, bufsz, objtype) \ -WIPHY_DEBUGFS_HANDLER_WRAPPER(name) \ +WIPHY_DEBUGFS_WRITE_HANDLER_WRAPPER(name) \ static ssize_t __iwl_dbgfs_##name##_write(struct file *file, \ const char __user *user_buf, \ size_t count, loff_t *ppos) \ @@ -121,7 +121,7 @@ static ssize_t __iwl_dbgfs_##name##_write(struct file *file, \ .llseek = generic_file_llseek, \ } -#define WIPHY_DEBUGFS_HANDLER_WRAPPER_MLD(name) \ +#define WIPHY_DEBUGFS_WRITE_HANDLER_WRAPPER_MLD(name) \ static ssize_t iwl_dbgfs_##name##_write_handler(struct wiphy *wiphy, \ struct file *file, char *buf, \ size_t count, void *data) \ @@ -132,7 +132,7 @@ static ssize_t iwl_dbgfs_##name##_write_handler(struct wiphy *wiphy, \ } #define WIPHY_DEBUGFS_WRITE_WRAPPER_MLD(name) \ -WIPHY_DEBUGFS_HANDLER_WRAPPER_MLD(name) \ +WIPHY_DEBUGFS_WRITE_HANDLER_WRAPPER_MLD(name) \ static ssize_t __iwl_dbgfs_##name##_write(struct file *file, \ const char __user *user_buf, \ size_t count, loff_t *ppos) \ @@ -170,7 +170,7 @@ static ssize_t __iwl_dbgfs_##name##_write(struct file *file, \ } #define WIPHY_DEBUGFS_WRITE_WRAPPER_IEEE80211(name, bufsz, objtype) \ -WIPHY_DEBUGFS_HANDLER_WRAPPER(name) \ +WIPHY_DEBUGFS_WRITE_HANDLER_WRAPPER(name) \ static ssize_t _iwl_dbgfs_##name##_write(struct file *file, \ const char __user *user_buf, \ size_t count, loff_t *ppos) \ From patchwork Wed Mar 12 22:22:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14013988 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (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 17E861E2823 for ; Wed, 12 Mar 2025 22:22:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818175; cv=none; b=RHuWtwaoqQen7wZeZ6E3aZ+bJpyFcheVCW1BM85QQpUa8HyuxEjMi3df3yl09jaYJVkmLsEOvlJC7RxN6HJ0W6tel1G8YvHgrgKSxk0ZD9eMIyO8vhWi95KLYuNYwN1QtVbb7BggGSsvho8p7Vcg72jtTK7XVQenBnZxnxQ5xes= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818175; c=relaxed/simple; bh=KvLOg2bYXDl2Hld/Vb7l0+A0g3pa5ZtZ3ZH2HeZuwNQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=B+IQ8DyNd+8Hz4bLh+p5EgYpC/aoqRJHLmFxH6Ytrj1e7ffCVKDo0ox7Fe7nm2+tjEBiZYA+QiFqls3QTgMzSlN3CdrxxW1jtC6b5zG52u1eswquY9YvQckhwT8ULl7Ka3Ej68+ab5lHMFE0/WZikClUVkQhhg0KIzX/UDsyd8Y= 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=IpIFnBvr; arc=none smtp.client-ip=198.175.65.21 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="IpIFnBvr" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741818174; x=1773354174; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=KvLOg2bYXDl2Hld/Vb7l0+A0g3pa5ZtZ3ZH2HeZuwNQ=; b=IpIFnBvrGhbxIWNd17rUCnVdNZ3OmpuC/eJAEHhs6In9O6z2g7HIRsrD KbKsM1vYCvgPOg68ZCarGsXeL5Q6rZlbShSXOOkg5dnNvKJw4kxnpQpn7 xwqwDDcWIN6F1l4c3xeWdWhA1MmFbP5we2PPR0M8NspAwJm+iP6g5fF7A sJ2E9CafZ+Vu+MfSggdISXcQCtvEgZIg6bDHVlXQXfa0Oqc/rWvUzvcBb tGZAMuDQkieootIXVHXuwRMHPEpd8U2HGn2Opq1xr5Gx6/rzQhufKBxzc c0lZKHGI0no2zwIVxdL/7DOOXpwgJfH8nOSEkMOG3Vhsp9wcjgLRE19Fx Q==; X-CSE-ConnectionGUID: E7PyB06VQQ2UwaYBOhR3qg== X-CSE-MsgGUID: ouBsENO6RfyhPpFG65L0yg== X-IronPort-AV: E=McAfee;i="6700,10204,11371"; a="42826732" X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="42826732" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:22:54 -0700 X-CSE-ConnectionGUID: m97gaGs7SEOqEoDJ+pfNFw== X-CSE-MsgGUID: vAamgqsrSOeZJc53Jw0OfA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="121267346" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:22:52 -0700 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Pagadala Yesu Anjaneyulu Subject: [PATCH wireless-next 02/15] wifi: iwlwifi: mld: Add support for WIPHY_DEBUGFS_READ_FILE_OPS_MLD macro Date: Thu, 13 Mar 2025 00:22:25 +0200 Message-Id: <20250313002008.b0ddb6b0a144.I1fab63f2c6f52fea61cc5d7b27775aed58adfd8d@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250312222238.2585340-1-miriam.rachel.korenblit@intel.com> References: <20250312222238.2585340-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: Pagadala Yesu Anjaneyulu Introduced the WIPHY_DEBUGFS_READ_FILE_OPS_MLD macro to enable reading data from the driver while holding the wiphy lock. This will enable read operations with wiphy locked. Signed-off-by: Pagadala Yesu Anjaneyulu Signed-off-by: Miri Korenblit --- .../net/wireless/intel/iwlwifi/mld/debugfs.h | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/debugfs.h b/drivers/net/wireless/intel/iwlwifi/mld/debugfs.h index 13d97184a31f..900aaed90775 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/debugfs.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/debugfs.h @@ -121,6 +121,16 @@ static ssize_t __iwl_dbgfs_##name##_write(struct file *file, \ .llseek = generic_file_llseek, \ } +#define WIPHY_DEBUGFS_READ_HANDLER_WRAPPER_MLD(name) \ +static ssize_t iwl_dbgfs_##name##_read_handler(struct wiphy *wiphy, \ + struct file *file, char *buf, \ + size_t count, void *data) \ +{ \ + struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy); \ + struct iwl_mld *mld = IWL_MAC80211_GET_MLD(hw); \ + return iwl_dbgfs_##name##_read(mld, buf, count); \ +} + #define WIPHY_DEBUGFS_WRITE_HANDLER_WRAPPER_MLD(name) \ static ssize_t iwl_dbgfs_##name##_write_handler(struct wiphy *wiphy, \ struct file *file, char *buf, \ @@ -147,6 +157,40 @@ static ssize_t __iwl_dbgfs_##name##_write(struct file *file, \ NULL); \ } +#define WIPHY_DEBUGFS_READ_WRAPPER_MLD(name) \ +WIPHY_DEBUGFS_READ_HANDLER_WRAPPER_MLD(name) \ +static ssize_t __iwl_dbgfs_##name##_read(struct file *file, \ + char __user *user_buf, \ + size_t count, loff_t *ppos) \ +{ \ + struct dbgfs_##name##_data *data = file->private_data; \ + struct iwl_mld *mld = data->arg; \ + \ + if (!data->read_done) { \ + data->read_done = true; \ + data->rlen = wiphy_locked_debugfs_read(mld->wiphy, \ + file, data->buf, sizeof(data->buf), \ + user_buf, count, ppos, \ + iwl_dbgfs_##name##_read_handler, NULL); \ + return data->rlen; \ + } \ + \ + if (data->rlen < 0) \ + return data->rlen; \ + return simple_read_from_buffer(user_buf, count, ppos, \ + data->buf, data->rlen); \ +} + +#define WIPHY_DEBUGFS_READ_FILE_OPS_MLD(name, bufsz) \ + MLD_DEBUGFS_OPEN_WRAPPER(name, bufsz, struct iwl_mld) \ + WIPHY_DEBUGFS_READ_WRAPPER_MLD(name) \ + static const struct file_operations iwl_dbgfs_##name##_ops = { \ + .read = __iwl_dbgfs_##name##_read, \ + .open = _iwl_dbgfs_##name##_open, \ + .llseek = generic_file_llseek, \ + .release = _iwl_dbgfs_release, \ + } + #define WIPHY_DEBUGFS_WRITE_FILE_OPS_MLD(name, bufsz) \ MLD_DEBUGFS_OPEN_WRAPPER(name, bufsz, struct iwl_mld) \ WIPHY_DEBUGFS_WRITE_WRAPPER_MLD(name) \ From patchwork Wed Mar 12 22:22:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14013989 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (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 79F991F03DA for ; Wed, 12 Mar 2025 22:22:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818177; cv=none; b=DawTNE/x0+xuGU4L3CsdcMtpqaDRsm2gm0lZPMI9quCFv/n8Ul0+xJvuBtnSRrFcWwdgJ6TKsV/PetZV7PyJwduzc5H4VBhkyD343PbuhAsA/RmbtHdin5gSHk5GUxhGbY0laXCKxf01pfWSDeCpQ2GrPwcEQ5SdUaQywoRDFp8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818177; c=relaxed/simple; bh=rMDRMC4hvfjJZcGrQFZH/FEnzdtO8LHq3OcTpCu81R8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=sLhCeWvxu25/2eyAGWHaZbZaBqoBRahzs/XhZjxLPtD/emdHJkxdPu1qYR3IMZpsF2tlWlzgKCKsoexzR+TrSjxyj8YQI11JRvyzkgSNx6U9h/G344W8S2HIBHQcztVnzG0PXKIPl7iVIuJZBzMN/KAQiwLGryRrPQBuOCqTiL8= 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=XhwwjQ5+; arc=none smtp.client-ip=198.175.65.21 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="XhwwjQ5+" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741818176; x=1773354176; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=rMDRMC4hvfjJZcGrQFZH/FEnzdtO8LHq3OcTpCu81R8=; b=XhwwjQ5+nO/bEt0WkcLNw0eTc2h0DfiqmuTKRz4CTuBPcRZI88BNjZDn 8IDZejEY3yGPxyVEHZVBg1AiioU+x+WgqMwp85K76KsEA0dbApuodcNUy aObpAAvmEUd/AyoDkYqgNViihoX+ru9DcjOMhWchy+j4HJDUMRgqV8YeN NeqsnU+ZsubDX6nAP8PkuaCW0D08YRG+tKiw9iJup8GNl++vHHfidg0l4 JgEH1skcKJQDg1HtX03bE3JyVt9JylDXCfSYtA8xzIe6sNkStEHLDNB2W iRyM/I21EEr0WTUjhLSL7NdrDcva3L6pMVBbO29u0UoziRPCvhgAXr820 g==; X-CSE-ConnectionGUID: KQcKCsXrQRWuXjHxjeC4fw== X-CSE-MsgGUID: YUTAGK0lRA+AUxBZh+jZVA== X-IronPort-AV: E=McAfee;i="6700,10204,11371"; a="42826738" X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="42826738" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:22:56 -0700 X-CSE-ConnectionGUID: 9MEopoHGRqeHU/uMbumTrQ== X-CSE-MsgGUID: /nBxuxclRVafBNUY1EbG5A== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="121267355" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:22:54 -0700 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Pagadala Yesu Anjaneyulu Subject: [PATCH wireless-next 03/15] wifi: iwlwifi: mld: Ensure wiphy lock is held during debugfs read operations Date: Thu, 13 Mar 2025 00:22:26 +0200 Message-Id: <20250313002008.2001d2335e9d.I607a8bd12efc6d1190cef1fca44279dbdd2756ea@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250312222238.2585340-1-miriam.rachel.korenblit@intel.com> References: <20250312222238.2585340-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: Pagadala Yesu Anjaneyulu The WIPHY_DEBUGFS_READ_WRITE_FILE_OPS_MLD macro is intended to call read/write handlers with the wiphy lock held. However, the current implementation uses the MLD_DEBUGFS_READ_WRAPPER macro, which does not hold the wiphy lock during read operations. This fix updates the WIPHY_DEBUGFS_READ_WRITE_FILE_OPS_MLD macro to use the WIPHY_DEBUGFS_READ_WRAPPER_MLD macro instead, ensuring that the wiphy lock is held during both read and write operations. Signed-off-by: Pagadala Yesu Anjaneyulu Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/mld/debugfs.c | 3 +-- drivers/net/wireless/intel/iwlwifi/mld/debugfs.h | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/debugfs.c b/drivers/net/wireless/intel/iwlwifi/mld/debugfs.c index 1d4b2ad5d388..c67dbbf575d7 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/debugfs.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/debugfs.c @@ -178,8 +178,7 @@ iwl_dbgfs_he_sniffer_params_write(struct iwl_mld *mld, char *buf, } static ssize_t -iwl_dbgfs_he_sniffer_params_read(struct iwl_mld *mld, size_t count, - char *buf) +iwl_dbgfs_he_sniffer_params_read(struct iwl_mld *mld, char *buf, size_t count) { return scnprintf(buf, count, "%d %02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx\n", diff --git a/drivers/net/wireless/intel/iwlwifi/mld/debugfs.h b/drivers/net/wireless/intel/iwlwifi/mld/debugfs.h index 900aaed90775..eeba35342ba1 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/debugfs.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/debugfs.h @@ -204,10 +204,10 @@ static ssize_t __iwl_dbgfs_##name##_read(struct file *file, \ #define WIPHY_DEBUGFS_READ_WRITE_FILE_OPS_MLD(name, bufsz) \ MLD_DEBUGFS_OPEN_WRAPPER(name, bufsz, struct iwl_mld) \ WIPHY_DEBUGFS_WRITE_WRAPPER_MLD(name) \ - MLD_DEBUGFS_READ_WRAPPER(name) \ + WIPHY_DEBUGFS_READ_WRAPPER_MLD(name) \ static const struct file_operations iwl_dbgfs_##name##_ops = { \ .write = __iwl_dbgfs_##name##_write, \ - .read = _iwl_dbgfs_##name##_read, \ + .read = __iwl_dbgfs_##name##_read, \ .open = _iwl_dbgfs_##name##_open, \ .llseek = generic_file_llseek, \ .release = _iwl_dbgfs_release, \ From patchwork Wed Mar 12 22:22:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14013990 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (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 C1D3D1F099D for ; Wed, 12 Mar 2025 22:22:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818179; cv=none; b=SOUua1HXV6CXYI7+fVB91VqQ0t1ieLVZgVxQZV866YupamT8SMkbhV2KctY8hctBT7gCERN5EdWXxpxIiwzqs4yfLhyEmdwWPia1b1pLqlnV+BCJh3xrgPY2xdXSu/y9nLFFwvNCyjPxiS0mzYSGck/vooVp6/0qFIF5TbDXFfM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818179; c=relaxed/simple; bh=Dn/ax1irzS5AuPc6I9bQel9sdgfhuHRAnvv5rAqgpgk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=SQIwaGiobdzEswYx4Frsx/IuJmk6CsreerC3mSm+ygutHQR3mCfWaGLdF1lrwVmtaYjlM7EnZTO6JQp9lCTcAuhzQ6rbHKN9pe7VTqmYk8uIEVlMogQx+1hrt0uOSgaUUS74NqVETYBA6yshR3oLz6Qi+kvpdv4cNdCyhkGr5vo= 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=Ryxq2Xie; arc=none smtp.client-ip=198.175.65.21 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="Ryxq2Xie" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741818178; x=1773354178; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Dn/ax1irzS5AuPc6I9bQel9sdgfhuHRAnvv5rAqgpgk=; b=Ryxq2XieWfdmsYc22OAhcGPdHbbDnTGL5O2fEXAY06EkpFRnL3HzrHgj LUNAnoS3MRxROKq16hGJQsqMRDBlO4CH0mYgEx2dTIG5Co3dbiOi119aP MdWWmyIKoBAiGDIsC1k05ujLGl7h9GBPk6th0pTG7KVv7PA1BgSEhrN2g 6fITIbYHa+prb8DOO2IVPegJ2zTeyavE3gvYzvQRX6wV0CelXqJqTWAis l3GVFlWI2C2G05041XDe2mHNc2VfwVYqitwn4qgjJh1vw6fnM6Ocpndil 6MpI774Vzu7y5IR0nSg0w+ublMJnh0D9jsnCsJ0gDKAaUrLBeuhUYFPgi A==; X-CSE-ConnectionGUID: 3S4r63crTbK/Xw6QuxkA1A== X-CSE-MsgGUID: bMAu3NWGROKx6mJL9SANsA== X-IronPort-AV: E=McAfee;i="6700,10204,11371"; a="42826741" X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="42826741" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:22:58 -0700 X-CSE-ConnectionGUID: NSC6li0BSXa9+pvRzT5Jlw== X-CSE-MsgGUID: zMvHS5DFR+K2oEp+O4Fknw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="121267360" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:22:55 -0700 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Pagadala Yesu Anjaneyulu Subject: [PATCH wireless-next 04/15] wifi: iwlwifi: mld: add support for DHC_TOOLS_UMAC_GET_TAS_STATUS command Date: Thu, 13 Mar 2025 00:22:27 +0200 Message-Id: <20250313002008.66524c6ea198.I1625135284fc075148a55dd9ac629e94ca881fe4@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250312222238.2585340-1-miriam.rachel.korenblit@intel.com> References: <20250312222238.2585340-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: Pagadala Yesu Anjaneyulu Add debugfs file in mld to retrieve TAS status per radio, TAS block list, current mcc, OEM name and OEM allowed list. This will add ability to get TAS status to user application via debugfs and required for debugging. Add the required API definitions and some debug host command utils. Signed-off-by: Pagadala Yesu Anjaneyulu Signed-off-by: Miri Korenblit --- .../net/wireless/intel/iwlwifi/fw/api/dhc.h | 97 ++++++++ .../net/wireless/intel/iwlwifi/fw/dhc-utils.h | 75 ++++++ .../net/wireless/intel/iwlwifi/mld/debugfs.c | 232 ++++++++++++++++++ 3 files changed, 404 insertions(+) create mode 100644 drivers/net/wireless/intel/iwlwifi/fw/dhc-utils.h diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/dhc.h b/drivers/net/wireless/intel/iwlwifi/fw/api/dhc.h index dbe06f3fc662..b6d79c678cd8 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/api/dhc.h +++ b/drivers/net/wireless/intel/iwlwifi/fw/api/dhc.h @@ -15,6 +15,19 @@ enum iwl_dhc_table_id { * @DHC_TABLE_INTEGRATION: select the integration table */ DHC_TABLE_INTEGRATION = 2 << DHC_TABLE_MASK_POS, + /** + * @DHC_TABLE_TOOLS: select the tools table + */ + DHC_TABLE_TOOLS = 0, +}; + +/** + * enum iwl_dhc_umac_tools_table - tools operations + * @DHC_TOOLS_UMAC_GET_TAS_STATUS: Get TAS status. + * See @struct iwl_dhc_tas_status_resp + */ +enum iwl_dhc_umac_tools_table { + DHC_TOOLS_UMAC_GET_TAS_STATUS = 0, }; /** @@ -58,6 +71,90 @@ struct iwl_dhc_cmd { __le32 data[]; } __packed; /* DHC_CMD_API_S */ +/** + * struct iwl_dhc_payload_hdr - DHC payload header + * @version: a version of a payload + * @reserved: reserved for alignment + */ +struct iwl_dhc_payload_hdr { + u8 version; + u8 reserved[3]; +} __packed; /* DHC_PAYLOAD_HDR_API_S_VER_1 */ + +/** + * struct iwl_dhc_tas_status_per_radio - TAS status per radio + * @band: &PHY_BAND_5 for high band, PHY_BAND_24 for low band and + * &PHY_BAND_6 for ultra high band. + * @static_status: TAS statically enabled or disabled + * @static_disable_reason: TAS static disable reason, uses + * &enum iwl_tas_statically_disabled_reason + * @near_disconnection: is TAS currently near disconnection per radio + * @dynamic_status_ant_a: Antenna A current TAS status. + * uses &enum iwl_tas_dyna_status + * @dynamic_status_ant_b: Antenna B current TAS status. + * uses &enum iwl_tas_dyna_status + * @max_reg_pwr_limit_ant_a: Antenna A regulatory power limits in dBm + * @max_reg_pwr_limit_ant_b: Antenna B regulatory power limits in dBm + * @sar_limit_ant_a: Antenna A SAR limit per radio in dBm + * @sar_limit_ant_b: Antenna B SAR limit per radio in dBm + * @reserved: reserved for alignment + */ +struct iwl_dhc_tas_status_per_radio { + u8 band; + u8 static_status; + u8 static_disable_reason; + u8 near_disconnection; + u8 dynamic_status_ant_a; + u8 dynamic_status_ant_b; + __le16 max_reg_pwr_limit_ant_a; + __le16 max_reg_pwr_limit_ant_b; + __le16 sar_limit_ant_a; + __le16 sar_limit_ant_b; + u8 reserved[2]; +} __packed; /* DHC_TAS_STATUS_PER_RADIO_S_VER_1 */ + +/** + * struct iwl_dhc_tas_status_resp - Response to DHC_TOOLS_UMAC_GET_TAS_STATUS + * @header: DHC payload header, uses &struct iwl_dhc_payload_hdr + * @tas_config_info: see @struct bios_value_u32 + * @mcc_block_list: block listed country codes + * @tas_status_radio: TAS status, uses &struct iwl_dhc_tas_status_per_radio + * @curr_mcc: current mcc + * @valid_radio_mask: represent entry in tas_status_per_radio is valid. + * @reserved: reserved for alignment + */ +struct iwl_dhc_tas_status_resp { + struct iwl_dhc_payload_hdr header; + struct bios_value_u32 tas_config_info; + __le16 mcc_block_list[IWL_WTAS_BLACK_LIST_MAX]; + struct iwl_dhc_tas_status_per_radio tas_status_radio[2]; + __le16 curr_mcc; + u8 valid_radio_mask; + u8 reserved; +} __packed; /* DHC_TAS_STATUS_RSP_API_S_VER_1 */ + +/** + * struct iwl_dhc_cmd_resp_v1 - debug host command response + * @status: status of the command + * @data: the response data + */ +struct iwl_dhc_cmd_resp_v1 { + __le32 status; + __le32 data[]; +} __packed; /* DHC_RESP_API_S_VER_1 */ + +/** + * struct iwl_dhc_cmd_resp - debug host command response + * @status: status of the command + * @descriptor: command descriptor (index_and_mask) returned + * @data: the response data + */ +struct iwl_dhc_cmd_resp { + __le32 status; + __le32 descriptor; + __le32 data[]; +} __packed; /* DHC_RESP_API_S_VER_2 and DHC_RESP_API_S_VER_3 */ + /** * enum iwl_dhc_twt_operation_type - describes the TWT operation type * diff --git a/drivers/net/wireless/intel/iwlwifi/fw/dhc-utils.h b/drivers/net/wireless/intel/iwlwifi/fw/dhc-utils.h new file mode 100644 index 000000000000..983acee5cd7d --- /dev/null +++ b/drivers/net/wireless/intel/iwlwifi/fw/dhc-utils.h @@ -0,0 +1,75 @@ +/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ +/* + * Copyright (C) 2021, 2025 Intel Corporation + */ +#ifndef __iwl_fw_dhc_utils_h__ +#define __iwl_fw_dhc_utils_h__ + +#include +#include "fw/img.h" +#include "api/commands.h" +#include "api/dhc.h" + +/** + * iwl_dhc_resp_status - return status of DHC response + * @fw: firwmware image information + * @pkt: response packet, must not be %NULL + * + * Returns: the status value of the DHC command or (u32)-1 if the + * response was too short. + */ +static inline u32 iwl_dhc_resp_status(const struct iwl_fw *fw, + struct iwl_rx_packet *pkt) +{ + if (iwl_fw_lookup_notif_ver(fw, IWL_ALWAYS_LONG_GROUP, + DEBUG_HOST_COMMAND, 1) >= 2) { + struct iwl_dhc_cmd_resp *resp = (void *)pkt->data; + + if (iwl_rx_packet_payload_len(pkt) < sizeof(*resp)) + return (u32)-1; + + return le32_to_cpu(resp->status); + } else { + struct iwl_dhc_cmd_resp_v1 *resp = (void *)pkt->data; + + if (iwl_rx_packet_payload_len(pkt) < sizeof(*resp)) + return (u32)-1; + + return le32_to_cpu(resp->status); + } +} + +/** + * iwl_dhc_resp_data - return data pointer of DHC response + * @fw: firwmware image information + * @pkt: response packet, must not be %NULL + * @len: where to store the length + * + * Returns: The data pointer, or an ERR_PTR() if the data was + * not valid (too short). + */ +static inline void *iwl_dhc_resp_data(const struct iwl_fw *fw, + struct iwl_rx_packet *pkt, + unsigned int *len) +{ + if (iwl_fw_lookup_notif_ver(fw, IWL_ALWAYS_LONG_GROUP, + DEBUG_HOST_COMMAND, 1) >= 2) { + struct iwl_dhc_cmd_resp *resp = (void *)pkt->data; + + if (iwl_rx_packet_payload_len(pkt) < sizeof(*resp)) + return ERR_PTR(-EINVAL); + + *len = iwl_rx_packet_payload_len(pkt) - sizeof(*resp); + return (void *)&resp->data; + } else { + struct iwl_dhc_cmd_resp_v1 *resp = (void *)pkt->data; + + if (iwl_rx_packet_payload_len(pkt) < sizeof(*resp)) + return ERR_PTR(-EINVAL); + + *len = iwl_rx_packet_payload_len(pkt) - sizeof(*resp); + return (void *)&resp->data; + } +} + +#endif /* __iwl_fw_dhc_utils_h__ */ diff --git a/drivers/net/wireless/intel/iwlwifi/mld/debugfs.c b/drivers/net/wireless/intel/iwlwifi/mld/debugfs.c index c67dbbf575d7..14330daa6d13 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/debugfs.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/debugfs.c @@ -21,6 +21,8 @@ #include "fw/api/rs.h" #include "fw/api/dhc.h" #include "fw/api/rfi.h" +#include "fw/dhc-utils.h" +#include #define MLD_DEBUGFS_READ_FILE_OPS(name, bufsz) \ _MLD_DEBUGFS_READ_FILE_OPS(name, bufsz, struct iwl_mld) @@ -206,11 +208,240 @@ iwl_dbgfs_he_sniffer_params_read(struct iwl_mld *mld, char *buf, size_t count) #define IWL_RFI_BUF_SIZE (IWL_RFI_DDR_BUF_SIZE + IWL_RFI_DLVR_BUF_SIZE +\ IWL_RFI_DESENSE_BUF_SIZE + 32) +static size_t iwl_mld_dump_tas_resp(struct iwl_dhc_tas_status_resp *resp, + size_t count, u8 *buf) +{ + const char * const tas_dis_reason[TAS_DISABLED_REASON_MAX] = { + [TAS_DISABLED_DUE_TO_BIOS] = + "Due To BIOS", + [TAS_DISABLED_DUE_TO_SAR_6DBM] = + "Due To SAR Limit Less Than 6 dBm", + [TAS_DISABLED_REASON_INVALID] = + "N/A", + [TAS_DISABLED_DUE_TO_TABLE_SOURCE_INVALID] = + "Due to table source invalid" + }; + const char * const tas_current_status[TAS_DYNA_STATUS_MAX] = { + [TAS_DYNA_INACTIVE] = "INACTIVE", + [TAS_DYNA_INACTIVE_MVM_MODE] = + "inactive due to mvm mode", + [TAS_DYNA_INACTIVE_TRIGGER_MODE] = + "inactive due to trigger mode", + [TAS_DYNA_INACTIVE_BLOCK_LISTED] = + "inactive due to block listed", + [TAS_DYNA_INACTIVE_UHB_NON_US] = + "inactive due to uhb non US", + [TAS_DYNA_ACTIVE] = "ACTIVE", + }; + ssize_t pos = 0; + + if (resp->header.version != 1) { + pos += scnprintf(buf + pos, count - pos, + "Unsupported TAS response version:%d", + resp->header.version); + return pos; + } + + pos += scnprintf(buf + pos, count - pos, "TAS Report\n"); + switch (resp->tas_config_info.table_source) { + case BIOS_SOURCE_NONE: + pos += scnprintf(buf + pos, count - pos, + "BIOS SOURCE NONE "); + break; + case BIOS_SOURCE_ACPI: + pos += scnprintf(buf + pos, count - pos, + "BIOS SOURCE ACPI "); + break; + case BIOS_SOURCE_UEFI: + pos += scnprintf(buf + pos, count - pos, + "BIOS SOURCE UEFI "); + break; + default: + pos += scnprintf(buf + pos, count - pos, + "BIOS SOURCE UNKNOWN (%d) ", + resp->tas_config_info.table_source); + break; + } + + pos += scnprintf(buf + pos, count - pos, + "revision is: %d data is: 0x%08x\n", + resp->tas_config_info.table_revision, + resp->tas_config_info.value); + pos += scnprintf(buf + pos, count - pos, "Current MCC: 0x%x\n", + le16_to_cpu(resp->curr_mcc)); + + pos += scnprintf(buf + pos, count - pos, "Block list entries:"); + for (int i = 0; i < ARRAY_SIZE(resp->mcc_block_list); i++) + pos += scnprintf(buf + pos, count - pos, " 0x%x", + le16_to_cpu(resp->mcc_block_list[i])); + + pos += scnprintf(buf + pos, count - pos, + "\nDo TAS Support Dual Radio?: %s\n", + hweight8(resp->valid_radio_mask) > 1 ? + "TRUE" : "FALSE"); + + for (int i = 0; i < ARRAY_SIZE(resp->tas_status_radio); i++) { + int tmp; + unsigned long dynamic_status; + + if (!(resp->valid_radio_mask & BIT(i))) + continue; + + pos += scnprintf(buf + pos, count - pos, + "TAS report for radio:%d\n", i + 1); + pos += scnprintf(buf + pos, count - pos, + "Static status: %sabled\n", + resp->tas_status_radio[i].static_status ? + "En" : "Dis"); + if (!resp->tas_status_radio[i].static_status) { + u8 static_disable_reason = + resp->tas_status_radio[i].static_disable_reason; + + pos += scnprintf(buf + pos, count - pos, + "\tStatic Disabled Reason: "); + if (static_disable_reason >= TAS_DISABLED_REASON_MAX) { + pos += scnprintf(buf + pos, count - pos, + "unsupported value (%d)\n", + static_disable_reason); + continue; + } + + pos += scnprintf(buf + pos, count - pos, + "%s (%d)\n", + tas_dis_reason[static_disable_reason], + static_disable_reason); + continue; + } + + pos += scnprintf(buf + pos, count - pos, "\tANT A %s and ", + (resp->tas_status_radio[i].dynamic_status_ant_a + & BIT(TAS_DYNA_ACTIVE)) ? "ON" : "OFF"); + + pos += scnprintf(buf + pos, count - pos, "ANT B %s for ", + (resp->tas_status_radio[i].dynamic_status_ant_b + & BIT(TAS_DYNA_ACTIVE)) ? "ON" : "OFF"); + + switch (resp->tas_status_radio[i].band) { + case PHY_BAND_5: + pos += scnprintf(buf + pos, count - pos, "HB\n"); + break; + case PHY_BAND_24: + pos += scnprintf(buf + pos, count - pos, "LB\n"); + break; + case PHY_BAND_6: + pos += scnprintf(buf + pos, count - pos, "UHB\n"); + break; + default: + pos += scnprintf(buf + pos, count - pos, + "Unsupported band (%d)\n", + resp->tas_status_radio[i].band); + break; + } + + pos += scnprintf(buf + pos, count - pos, + "Is near disconnection?: %s\n", + resp->tas_status_radio[i].near_disconnection ? + "True" : "False"); + + pos += scnprintf(buf + pos, count - pos, + "Dynamic status antenna A:\n"); + dynamic_status = resp->tas_status_radio[i].dynamic_status_ant_a; + for_each_set_bit(tmp, &dynamic_status, TAS_DYNA_STATUS_MAX) { + pos += scnprintf(buf + pos, count - pos, "\t%s (%d)\n", + tas_current_status[tmp], tmp); + } + pos += scnprintf(buf + pos, count - pos, + "\nDynamic status antenna B:\n"); + dynamic_status = resp->tas_status_radio[i].dynamic_status_ant_b; + for_each_set_bit(tmp, &dynamic_status, TAS_DYNA_STATUS_MAX) { + pos += scnprintf(buf + pos, count - pos, "\t%s (%d)\n", + tas_current_status[tmp], tmp); + } + + tmp = le16_to_cpu(resp->tas_status_radio[i].max_reg_pwr_limit_ant_a); + pos += scnprintf(buf + pos, count - pos, + "Max antenna A regulatory pwr limit (dBm): %d.%03d\n", + tmp / 8, 125 * (tmp % 8)); + tmp = le16_to_cpu(resp->tas_status_radio[i].max_reg_pwr_limit_ant_b); + pos += scnprintf(buf + pos, count - pos, + "Max antenna B regulatory pwr limit (dBm): %d.%03d\n", + tmp / 8, 125 * (tmp % 8)); + + tmp = le16_to_cpu(resp->tas_status_radio[i].sar_limit_ant_a); + pos += scnprintf(buf + pos, count - pos, + "Antenna A SAR limit (dBm): %d.%03d\n", + tmp / 8, 125 * (tmp % 8)); + tmp = le16_to_cpu(resp->tas_status_radio[i].sar_limit_ant_b); + pos += scnprintf(buf + pos, count - pos, + "Antenna B SAR limit (dBm): %d.%03d\n", + tmp / 8, 125 * (tmp % 8)); + } + + return pos; +} + +static ssize_t iwl_dbgfs_tas_get_status_read(struct iwl_mld *mld, char *buf, + size_t count) +{ + struct iwl_dhc_cmd cmd = { + .index_and_mask = cpu_to_le32(DHC_TABLE_TOOLS | + DHC_TARGET_UMAC | + DHC_TOOLS_UMAC_GET_TAS_STATUS), + }; + struct iwl_host_cmd hcmd = { + .id = WIDE_ID(LEGACY_GROUP, DEBUG_HOST_COMMAND), + .flags = CMD_WANT_SKB, + .len[0] = sizeof(cmd), + .data[0] = &cmd, + }; + struct iwl_dhc_tas_status_resp *resp = NULL; + ssize_t pos = 0; + u32 resp_len; + u32 status; + int ret; + + if (iwl_mld_dbgfs_fw_cmd_disabled(mld)) + return -EIO; + + ret = iwl_mld_send_cmd(mld, &hcmd); + if (ret) + return ret; + + pos += scnprintf(buf + pos, count - pos, "\nOEM name: %s\n", + dmi_get_system_info(DMI_SYS_VENDOR) ?: ""); + pos += scnprintf(buf + pos, count - pos, + "\tVendor In Approved List: %s\n", + iwl_is_tas_approved() ? "YES" : "NO"); + + status = iwl_dhc_resp_status(mld->fwrt.fw, hcmd.resp_pkt); + if (status != 1) { + pos += scnprintf(buf + pos, count - pos, + "response status is not success: %d\n", + status); + goto out; + } + + resp = iwl_dhc_resp_data(mld->fwrt.fw, hcmd.resp_pkt, &resp_len); + if (IS_ERR(resp) || resp_len != sizeof(*resp)) { + pos += scnprintf(buf + pos, count - pos, + "Invalid size for TAS response (%u instead of %zd)\n", + resp_len, sizeof(*resp)); + goto out; + } + + pos += iwl_mld_dump_tas_resp(resp, count - pos, buf + pos); + +out: + iwl_free_resp(&hcmd); + return pos; +} + WIPHY_DEBUGFS_WRITE_FILE_OPS_MLD(fw_nmi, 10); WIPHY_DEBUGFS_WRITE_FILE_OPS_MLD(fw_restart, 10); WIPHY_DEBUGFS_READ_WRITE_FILE_OPS_MLD(he_sniffer_params, 32); WIPHY_DEBUGFS_WRITE_FILE_OPS_MLD(fw_dbg_clear, 10); WIPHY_DEBUGFS_WRITE_FILE_OPS_MLD(send_echo_cmd, 8); +WIPHY_DEBUGFS_READ_FILE_OPS_MLD(tas_get_status, 2048); static ssize_t iwl_dbgfs_wifi_6e_enable_read(struct iwl_mld *mld, size_t count, u8 *buf) @@ -307,6 +538,7 @@ iwl_mld_add_debugfs_files(struct iwl_mld *mld, struct dentry *debugfs_dir) MLD_DEBUGFS_ADD_FILE(he_sniffer_params, debugfs_dir, 0600); MLD_DEBUGFS_ADD_FILE(fw_dbg_clear, debugfs_dir, 0200); MLD_DEBUGFS_ADD_FILE(send_echo_cmd, debugfs_dir, 0200); + MLD_DEBUGFS_ADD_FILE(tas_get_status, debugfs_dir, 0400); #ifdef CONFIG_THERMAL MLD_DEBUGFS_ADD_FILE(start_ctdp, debugfs_dir, 0200); MLD_DEBUGFS_ADD_FILE(stop_ctdp, debugfs_dir, 0200); From patchwork Wed Mar 12 22:22:28 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14013991 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (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 3A92E1EF370 for ; Wed, 12 Mar 2025 22:22:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818181; cv=none; b=nDS1HQl4AFCT8S8X8Y1Dq/Tk86AVnYNGGrhrORtplqIuU80AwQk/C1y9Dzlvy2A9ooJBWjxttyh+lhLPZkbpa3vwvUzcJBxxCic7k2izEfnGo2Mid74WdXQYOTZsCekxqj/xoDTOXJXTFGCMPm2f4YV45t0CeFw4DWH82CfzrJM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818181; c=relaxed/simple; bh=UeBeSqjG+De/rPOxZIpNTUoHKcLUJfbGaLKBZKOXQVw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=nG+PcIcPQok0msfGnPZ1M6vEbXsILUg3tSdVXOoK8rbhVKB9LbqAWXgDN9tTJ2IqJ+ZvR5LywiFYS2LK6hAWChpYy7T6qGSVlrfaVWYQp3yew+guuMuZSWhZLEb/ux+7VEb9NW6UUyRvqvylJrCzlfcliISkMLqdxey/nG1v0YI= 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=mIKt18ZM; arc=none smtp.client-ip=198.175.65.21 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="mIKt18ZM" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741818180; x=1773354180; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=UeBeSqjG+De/rPOxZIpNTUoHKcLUJfbGaLKBZKOXQVw=; b=mIKt18ZMdGTUWx5siw7rp4KhdbOED+lNh3s0lmLUWGA6HdIl776g2fbw TlCoIbsi2Q9d/ceUkhgc3JBnO0GkOwRQfB+E6Sstd40zO3DtOKLG6ua2p eaySFjRRhjID58sShJcbAfaO9r9Po1Y+3llUtA48chwF8s0nLdWHkd47K AxsIsXRHy95GYwD0ysKP8qp0p3yveBvOH5L5N9BeMyQrq1JTJ9cO/REsH h/Q+4EOdAQUNZZXOCq983YB2yxqGeFWX2XXLqnoIiJ+y9y2JP5ZNGOOEu RqK7sz+46HWCFBD9e8cJRe0qUOWZHWY0+mdKA7Q8VaVERY8XBG4qYEwj9 A==; X-CSE-ConnectionGUID: 0HzNwVfzTqOY3RZDLZGO9A== X-CSE-MsgGUID: T7jhdBHxTTmobaev6VnVyQ== X-IronPort-AV: E=McAfee;i="6700,10204,11371"; a="42826744" X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="42826744" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:22:59 -0700 X-CSE-ConnectionGUID: OwqbE6Q+QPKHAhgGcN7IIg== X-CSE-MsgGUID: pI9zvXmNSTiJx+SHwwon6g== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="121267366" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:22:57 -0700 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Emmanuel Grumbach Subject: [PATCH wireless-next 05/15] wifi: iwlwifi: mld: remove IWL_MLD_EMLSR_BLOCKED_FW Date: Thu, 13 Mar 2025 00:22:28 +0200 Message-Id: <20250313002008.6729a8d67815.Iab39bf0982d8cdbb0db701d31854101c2fcf3b64@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250312222238.2585340-1-miriam.rachel.korenblit@intel.com> References: <20250312222238.2585340-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 The channel load logic moves from the FW to the driver. - Implement the logic: allow EMLSR only if the candidate primary link is active and if its average channel load exceeds the threshold. - Remove IWL_MLD_EMLSR_BLOCKED_FW. Instead, treat ESR_RECOMMEND_LEAVE in the EMLSR_RECOMMENDATION notif as an EXIT reason. Signed-off-by: Miri Korenblit Reviewed-by: Emmanuel Grumbach --- .../wireless/intel/iwlwifi/mld/constants.h | 2 +- .../net/wireless/intel/iwlwifi/mld/iface.h | 12 +- .../net/wireless/intel/iwlwifi/mld/mac80211.c | 13 +- drivers/net/wireless/intel/iwlwifi/mld/mlo.c | 130 ++++++++++++++---- drivers/net/wireless/intel/iwlwifi/mld/mlo.h | 5 +- .../net/wireless/intel/iwlwifi/mld/stats.c | 10 +- 6 files changed, 124 insertions(+), 48 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/constants.h b/drivers/net/wireless/intel/iwlwifi/mld/constants.h index 9a24996014b8..2a59b29b75cb 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/constants.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/constants.h @@ -68,7 +68,7 @@ #define IWL_MLD_LOW_RSSI_THRESH_160MHZ -72 #define IWL_MLD_ENTER_EMLSR_TPT_THRESH 400 -#define IWL_MLD_CHAN_LOAD_THRESH 2 /* in percentage */ +#define IWL_MLD_EXIT_EMLSR_CHAN_LOAD 2 /* in percentage */ #define IWL_MLD_FTM_INITIATOR_ALGO IWL_TOF_ALGO_TYPE_MAX_LIKE #define IWL_MLD_FTM_INITIATOR_DYNACK true diff --git a/drivers/net/wireless/intel/iwlwifi/mld/iface.h b/drivers/net/wireless/intel/iwlwifi/mld/iface.h index 57910660ed18..550ae3c9d766 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/iface.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/iface.h @@ -24,7 +24,6 @@ enum iwl_mld_cca_40mhz_wa_status { * * @IWL_MLD_EMLSR_BLOCKED_PREVENTION: Prevent repeated EMLSR enter/exit * @IWL_MLD_EMLSR_BLOCKED_WOWLAN: WOWLAN is preventing EMLSR - * @IWL_MLD_EMLSR_BLOCKED_FW: FW did not recommend MLO * @IWL_MLD_EMLSR_BLOCKED_ROC: remain-on-channel is preventing EMLSR * @IWL_MLD_EMLSR_BLOCKED_NON_BSS: An active non-BSS interface's link is * preventing EMLSR @@ -36,11 +35,10 @@ enum iwl_mld_cca_40mhz_wa_status { enum iwl_mld_emlsr_blocked { IWL_MLD_EMLSR_BLOCKED_PREVENTION = 0x1, IWL_MLD_EMLSR_BLOCKED_WOWLAN = 0x2, - IWL_MLD_EMLSR_BLOCKED_FW = 0x4, - IWL_MLD_EMLSR_BLOCKED_ROC = 0x8, - IWL_MLD_EMLSR_BLOCKED_NON_BSS = 0x10, - IWL_MLD_EMLSR_BLOCKED_TMP_NON_BSS = 0x20, - IWL_MLD_EMLSR_BLOCKED_TPT = 0x40, + IWL_MLD_EMLSR_BLOCKED_ROC = 0x4, + IWL_MLD_EMLSR_BLOCKED_NON_BSS = 0x8, + IWL_MLD_EMLSR_BLOCKED_TMP_NON_BSS = 0x10, + IWL_MLD_EMLSR_BLOCKED_TPT = 0x20, }; /** @@ -62,6 +60,7 @@ enum iwl_mld_emlsr_blocked { * @IWL_MLD_EMLSR_EXIT_CHAN_LOAD: Exit EMLSR because the primary channel is not * loaded enough to justify EMLSR. * @IWL_MLD_EMLSR_EXIT_RFI: Exit EMLSR due to RFI + * @IWL_MLD_EMLSR_EXIT_FW_REQUEST: Exit EMLSR because the FW requested it */ enum iwl_mld_emlsr_exit { IWL_MLD_EMLSR_EXIT_BLOCK = 0x1, @@ -75,6 +74,7 @@ enum iwl_mld_emlsr_exit { IWL_MLD_EMLSR_EXIT_BT_COEX = 0x100, IWL_MLD_EMLSR_EXIT_CHAN_LOAD = 0x200, IWL_MLD_EMLSR_EXIT_RFI = 0x400, + IWL_MLD_EMLSR_EXIT_FW_REQUEST = 0x800, }; /** diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c index 91e201fde72a..f6623988fff6 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c @@ -1189,8 +1189,13 @@ iwl_mld_mac80211_link_info_changed_sta(struct iwl_mld *mld, iwl_mld_omi_ap_changed_bw(mld, link_conf, bw); } - if (changes & BSS_CHANGED_BANDWIDTH) - iwl_mld_emlsr_check_equal_bw(mld, vif, link_conf); + if (changes & BSS_CHANGED_BANDWIDTH) { + if (iwl_mld_emlsr_active(vif)) + iwl_mld_emlsr_check_equal_bw(mld, vif, link_conf); + else + /* Channel load threshold may have changed */ + iwl_mld_retry_emlsr(mld, vif); + } } static int iwl_mld_update_mu_groups(struct iwl_mld *mld, @@ -1712,10 +1717,6 @@ static int iwl_mld_move_sta_state_up(struct iwl_mld *mld, IWL_MLD_EMLSR_BLOCKED_TPT, 0); - /* Wait for the FW to send a recommendation */ - iwl_mld_block_emlsr(mld, vif, - IWL_MLD_EMLSR_BLOCKED_FW, 0); - /* clear COEX_HIGH_PRIORITY_ENABLE */ ret = iwl_mld_mac_fw_action(mld, vif, FW_CTXT_ACTION_MODIFY); diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mlo.c b/drivers/net/wireless/intel/iwlwifi/mld/mlo.c index a5b1d373922a..9556ff3a75a1 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mlo.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/mlo.c @@ -9,7 +9,6 @@ #define HANDLE_EMLSR_BLOCKED_REASONS(HOW) \ HOW(PREVENTION) \ HOW(WOWLAN) \ - HOW(FW) \ HOW(ROC) \ HOW(NON_BSS) \ HOW(TMP_NON_BSS) \ @@ -53,7 +52,8 @@ static void iwl_mld_print_emlsr_blocked(struct iwl_mld *mld, u32 mask) HOW(LINK_USAGE) \ HOW(BT_COEX) \ HOW(CHAN_LOAD) \ - HOW(RFI) + HOW(RFI) \ + HOW(FW_REQUEST) static const char * iwl_mld_get_emlsr_exit_string(enum iwl_mld_emlsr_exit exit) @@ -332,18 +332,14 @@ iwl_mld_vif_iter_emlsr_mode_notif(void *data, u8 *mac, return; switch (le32_to_cpu(notif->action)) { - case ESR_RECOMMEND_ENTER: - iwl_mld_unblock_emlsr(mld_vif->mld, vif, - IWL_MLD_EMLSR_BLOCKED_FW); - break; case ESR_RECOMMEND_LEAVE: - iwl_mld_block_emlsr(mld_vif->mld, vif, - IWL_MLD_EMLSR_BLOCKED_FW, - iwl_mld_get_primary_link(vif)); + iwl_mld_exit_emlsr(mld_vif->mld, vif, + IWL_MLD_EMLSR_EXIT_FW_REQUEST, + iwl_mld_get_primary_link(vif)); break; + case ESR_RECOMMEND_ENTER: case ESR_FORCE_LEAVE: default: - /* ESR_FORCE_LEAVE should not happen at this point */ IWL_WARN(mld_vif->mld, "Unexpected EMLSR notification: %d\n", le32_to_cpu(notif->action)); } @@ -724,6 +720,53 @@ iwl_mld_set_link_sel_data(struct iwl_mld *mld, return n_data; } +static u32 +iwl_mld_get_min_chan_load_thresh(struct ieee80211_chanctx_conf *chanctx) +{ + const struct iwl_mld_phy *phy = iwl_mld_phy_from_mac80211(chanctx); + + switch (phy->chandef.width) { + case NL80211_CHAN_WIDTH_320: + case NL80211_CHAN_WIDTH_160: + return 5; + case NL80211_CHAN_WIDTH_80: + return 7; + default: + break; + } + return 10; +} + +static bool +iwl_mld_channel_load_allows_emlsr(struct iwl_mld *mld, + struct ieee80211_vif *vif, + const struct iwl_mld_link_sel_data *a, + const struct iwl_mld_link_sel_data *b) +{ + struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(vif); + struct iwl_mld_link *link_a = + iwl_mld_link_dereference_check(mld_vif, a->link_id); + struct ieee80211_chanctx_conf *chanctx_a = NULL; + u32 primary_load_perc; + + if (!link_a || !link_a->active) { + IWL_DEBUG_EHT(mld, "Primary link is not active. Can't enter EMLSR\n"); + return false; + } + + chanctx_a = wiphy_dereference(mld->wiphy, link_a->chan_ctx); + + if (WARN_ON(!chanctx_a)) + return false; + + primary_load_perc = + iwl_mld_phy_from_mac80211(chanctx_a)->avg_channel_load_not_by_us; + + IWL_DEBUG_EHT(mld, "Average channel load not by us: %u\n", primary_load_perc); + + return primary_load_perc > iwl_mld_get_min_chan_load_thresh(chanctx_a); +} + static bool iwl_mld_valid_emlsr_pair(struct ieee80211_vif *vif, struct iwl_mld_link_sel_data *a, @@ -746,6 +789,8 @@ iwl_mld_valid_emlsr_pair(struct ieee80211_vif *vif, */ reason_mask |= IWL_MLD_EMLSR_EXIT_BANDWIDTH; } + if (!iwl_mld_channel_load_allows_emlsr(mld, vif, a, b)) + reason_mask |= IWL_MLD_EMLSR_EXIT_CHAN_LOAD; if (reason_mask) { IWL_DEBUG_INFO(mld, @@ -904,7 +949,6 @@ void iwl_mld_emlsr_check_equal_bw(struct iwl_mld *mld, link_conf_dereference_check(vif, other_link_id); if (!ieee80211_vif_link_active(vif, link->link_id) || - !iwl_mld_emlsr_active(vif) || WARN_ON(link->link_id == other_link_id || !other_link)) return; @@ -952,39 +996,67 @@ void iwl_mld_emlsr_check_bt(struct iwl_mld *mld) NULL); } -static void iwl_mld_emlsr_check_chan_load_iter(void *_data, u8 *mac, - struct ieee80211_vif *vif) +struct iwl_mld_chan_load_data { + struct iwl_mld_phy *phy; + u32 prev_chan_load_not_by_us; +}; + +static void iwl_mld_chan_load_update_iter(void *_data, u8 *mac, + struct ieee80211_vif *vif) { - struct iwl_mld *mld = (struct iwl_mld *)_data; + struct iwl_mld_chan_load_data *data = _data; + const struct iwl_mld_phy *phy = data->phy; + struct ieee80211_chanctx_conf *chanctx = + container_of((const void *)phy, struct ieee80211_chanctx_conf, + drv_priv); + struct iwl_mld *mld = iwl_mld_vif_from_mac80211(vif)->mld; struct ieee80211_bss_conf *prim_link; unsigned int prim_link_id; - int chan_load; - - if (!iwl_mld_emlsr_active(vif)) - return; prim_link_id = iwl_mld_get_primary_link(vif); prim_link = link_conf_dereference_protected(vif, prim_link_id); + if (WARN_ON(!prim_link)) return; - chan_load = iwl_mld_get_chan_load_by_others(mld, prim_link, true); - - if (chan_load < 0) + if (chanctx != rcu_access_pointer(prim_link->chanctx_conf)) return; - /* chan_load is in range [0,255] */ - if (chan_load < NORMALIZE_PERCENT_TO_255(IWL_MLD_CHAN_LOAD_THRESH)) - iwl_mld_exit_emlsr(mld, vif, IWL_MLD_EMLSR_EXIT_CHAN_LOAD, - prim_link_id); + if (iwl_mld_emlsr_active(vif)) { + int chan_load = iwl_mld_get_chan_load_by_others(mld, prim_link, + true); + + if (chan_load < 0) + return; + + /* chan_load is in range [0,255] */ + if (chan_load < NORMALIZE_PERCENT_TO_255(IWL_MLD_EXIT_EMLSR_CHAN_LOAD)) + iwl_mld_exit_emlsr(mld, vif, + IWL_MLD_EMLSR_EXIT_CHAN_LOAD, + prim_link_id); + } else { + u32 old_chan_load = data->prev_chan_load_not_by_us; + u32 new_chan_load = phy->avg_channel_load_not_by_us; + u32 thresh = iwl_mld_get_min_chan_load_thresh(chanctx); + + if (old_chan_load <= thresh && new_chan_load > thresh) + iwl_mld_retry_emlsr(mld, vif); + } } -void iwl_mld_emlsr_check_chan_load(struct iwl_mld *mld) +void iwl_mld_emlsr_check_chan_load(struct ieee80211_hw *hw, + struct iwl_mld_phy *phy, + u32 prev_chan_load_not_by_us) { - ieee80211_iterate_active_interfaces_mtx(mld->hw, + struct iwl_mld_chan_load_data data = { + .phy = phy, + .prev_chan_load_not_by_us = prev_chan_load_not_by_us, + }; + + ieee80211_iterate_active_interfaces_mtx(hw, IEEE80211_IFACE_ITER_NORMAL, - iwl_mld_emlsr_check_chan_load_iter, - (void *)(uintptr_t)mld); + iwl_mld_chan_load_update_iter, + &data); } void iwl_mld_retry_emlsr(struct iwl_mld *mld, struct ieee80211_vif *vif) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mlo.h b/drivers/net/wireless/intel/iwlwifi/mld/mlo.h index 0f1b18f61c75..a5fbe1919c6d 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mlo.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/mlo.h @@ -11,6 +11,7 @@ #include "iwl-config.h" #include "iwl-trans.h" #include "iface.h" +#include "phy.h" struct iwl_mld; @@ -139,7 +140,9 @@ void iwl_mld_emlsr_check_equal_bw(struct iwl_mld *mld, void iwl_mld_emlsr_check_bt(struct iwl_mld *mld); -void iwl_mld_emlsr_check_chan_load(struct iwl_mld *mld); +void iwl_mld_emlsr_check_chan_load(struct ieee80211_hw *hw, + struct iwl_mld_phy *phy, + u32 prev_chan_load_not_by_us); /** * iwl_mld_retry_emlsr - Retry entering EMLSR diff --git a/drivers/net/wireless/intel/iwlwifi/mld/stats.c b/drivers/net/wireless/intel/iwlwifi/mld/stats.c index 75cb204c2419..0715bbc31031 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/stats.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/stats.c @@ -457,7 +457,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; + u32 new_load, old_load; if (WARN_ON(phy->fw_id >= IWL_STATS_MAX_PHY_OPERATIONAL)) return; @@ -465,14 +465,16 @@ 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); + old_load = phy->avg_channel_load_not_by_us; 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); + phy->avg_channel_load_not_by_us = (new_load >> 1) + (old_load >> 1); + + iwl_mld_emlsr_check_chan_load(hw, phy, old_load); } static void @@ -483,8 +485,6 @@ iwl_mld_process_per_phy_stats(struct iwl_mld *mld, iwl_mld_fill_chanctx_stats, (void *)(uintptr_t)per_phy); - /* channel_load_by_us may have been updated, so recheck */ - iwl_mld_emlsr_check_chan_load(mld); } void iwl_mld_handle_stats_oper_notif(struct iwl_mld *mld, From patchwork Wed Mar 12 22:22:29 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14013992 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (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 5EDCF1EFFAC for ; Wed, 12 Mar 2025 22:23:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818182; cv=none; b=QoLvaFlbbFOUtEOh88wlsc0MthYPQf5zj3cUNgzM1nGWVrwJsPw/4NEKNVxAULmQ1svQiGfw+QID9/P4gCrycJWcgrzEnMvYXqUxW/fA3GDvQqm1VM4N5V67LgpUDSYX0qUq2oJm+zpxjypXjbXQQDUWXB1zheUt4ORCSOIZfPs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818182; c=relaxed/simple; bh=7mlyVuLa722+2+u7CxUf2bFsPAs/d/a5jo36IU0uDYg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=exeRlEbDYuhlRKmmoIUelnJD4ppkqZtsglFRzBAypFd7fzXqfFdab8kuZFSX+eJpxLGnzVauUW36NAMCziR50Bw888a86l5Jz7KiFl68Us/8N+ml0VVad7dKaELV78aeBRw4UJkpdsPxCVRfUTbGFZm4zBBSIQNWHHFL4I+mqMU= 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=ILMbZs3/; arc=none smtp.client-ip=198.175.65.21 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="ILMbZs3/" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741818181; x=1773354181; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=7mlyVuLa722+2+u7CxUf2bFsPAs/d/a5jo36IU0uDYg=; b=ILMbZs3/l/QrsaHKQGTvyRAPzOU01oZo3TonIrMm0r5mRxZ2P1ADGnDJ wn0c0GGulfncmz2al7Lq/LJ8YmiSr1EJl/6Jut8X4E+cScYH7xNGR6osc lhkeJ0mrLxhVw1HR0trOxOy8Unkh59fV8JixVVEV/rCPLmaE7xQNtParE W1OZZ4qHpIrWJPrp1TDJIkd5aY2hgTA2q/10e+MvV1nvYPbGxrSxXEzZr C7yrGMA5yWkLvcAqUaUMLivTLAbTrFHEBTgL4EP3TUPD7TzabF5patW9r ZFA2+lmw8972MDGgojL/mMOqvpvlJBqnpadMar76+bSX7Om+9YnFKBoAN w==; X-CSE-ConnectionGUID: +yhF97+iRSezC2xlJ5bIoA== X-CSE-MsgGUID: jKJbPeiZQp2UYVgjrh67Lw== X-IronPort-AV: E=McAfee;i="6700,10204,11371"; a="42826747" X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="42826747" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:23:01 -0700 X-CSE-ConnectionGUID: OPhSkv/4S8uCJNloaqK5zg== X-CSE-MsgGUID: Omer2yQ4TmOg3SwedqB2yA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="121267373" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:22:59 -0700 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Emmanuel Grumbach Subject: [PATCH wireless-next 06/15] wifi: iwlwifi: mld: prevent toggling EMLSR due to FW requests Date: Thu, 13 Mar 2025 00:22:29 +0200 Message-Id: <20250313002008.f0e74a7f99af.I447c8788afba85a2a5040ae2c1213b6e05ec14f3@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250312222238.2585340-1-miriam.rachel.korenblit@intel.com> References: <20250312222238.2585340-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 exit EMLSR mode if the FW requested to do so. To prevent repeated toggling of the EMLSR mode (frequent entry and exit), add this exit reason to the EMLSR prevention mechanism. This mechanism avoids re-entering EMLSR for a certain period of time after multiple exits caused by the same reason. Signed-off-by: Miri Korenblit Reviewed-by: Emmanuel Grumbach --- drivers/net/wireless/intel/iwlwifi/mld/mlo.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mlo.c b/drivers/net/wireless/intel/iwlwifi/mld/mlo.c index 9556ff3a75a1..8f6da90bf82c 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mlo.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/mlo.c @@ -116,8 +116,9 @@ void iwl_mld_emlsr_tmp_non_bss_done_wk(struct wiphy *wiphy, #define IWL_MLD_SCAN_EXPIRE_TIME (HZ * IWL_MLD_SCAN_EXPIRE_TIME_SEC) /* Exit reasons that can cause longer EMLSR prevention */ -#define IWL_MLD_PREVENT_EMLSR_REASONS (IWL_MLD_EMLSR_EXIT_MISSED_BEACON | \ - IWL_MLD_EMLSR_EXIT_LINK_USAGE) +#define IWL_MLD_PREVENT_EMLSR_REASONS (IWL_MLD_EMLSR_EXIT_MISSED_BEACON | \ + IWL_MLD_EMLSR_EXIT_LINK_USAGE | \ + IWL_MLD_EMLSR_EXIT_FW_REQUEST) #define IWL_MLD_PREVENT_EMLSR_TIMEOUT (HZ * 400) #define IWL_MLD_EMLSR_PREVENT_SHORT (HZ * 300) From patchwork Wed Mar 12 22:22:30 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14013993 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (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 E2B481F0E28 for ; Wed, 12 Mar 2025 22:23:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818183; cv=none; b=I79xjGciNlwcSXPq9cJf/ltWGoXLJhDrcKpFQA2YWu8ZyG3bOkgx4wHhnATqR/qXZ82jB4uk5KN7vL4cwNI5rVsmCTGCfnHYyP4PTru/NzC4Sm2ShJs6kJW9nLVwb7Xg1OU1AxjDTxAD6gVaTy0wLVobNBEuv7yZnCVTbT2hdx0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818183; c=relaxed/simple; bh=mF/PG3eB9sAQWQfYg/PW5VXCNofRojIJ1PSnbbG7ai8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=pDsvbC79JFF+ZnAqjqr9AgUG8//CjVtTnGku2sBQiE2++E3U7xqqUW3yYo1+enl0EiUaJEnSAcwR4peMuq8W/34ZLcCmhnjwmHb8jKqfXI7gU3DNC4P+DiDKUQ8ovo3q5/M64M+hFrr05kwxTfvtruXKqjomehQCSptBerXQ2BI= 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=Z7gtgGwg; arc=none smtp.client-ip=198.175.65.21 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="Z7gtgGwg" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741818182; x=1773354182; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=mF/PG3eB9sAQWQfYg/PW5VXCNofRojIJ1PSnbbG7ai8=; b=Z7gtgGwgM+RNvdJKqhpQnil0H4IP+9RkuY3CC6XftnQDIiAQxlCZ5K1x cbI4mHRI1n5DFkz3hTFnlN1LvmAkQwHZiL2C1vT4Jbfli+huuBi7pW2+S T7UTk0e6AZyvgfmhE5/uM04mLcN+1DmCTbIDXYaYc+ecQowSLQRz7q5rH f+4/nROZRbnY0Yu8OKuCdt/O24KUJWWQy1Bds68AAim0MerKHzX+svcpM vsrPwULLsZxXrd2u8GgWUvkTIgdq795Qt15t019AOeeXUiYame42pSSIM gOyPTIJNwJiEjnnnURDELrDKWvRyit5sSf3NNQH9zR7ARsBMe3Limraal Q==; X-CSE-ConnectionGUID: wIQnYcTcTNSs1Uh/MghrxQ== X-CSE-MsgGUID: 6Ak2CV3BTmGGhG/VUvMVig== X-IronPort-AV: E=McAfee;i="6700,10204,11371"; a="42826750" X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="42826750" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:23:02 -0700 X-CSE-ConnectionGUID: ZAe0+xsjTguuWsICuvxZ5w== X-CSE-MsgGUID: r2n6ENd4QxGBz9XVHiMFeA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="121267380" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:23:00 -0700 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Emmanuel Grumbach Subject: [PATCH wireless-next 07/15] wifi: iwlwifi: mld: allow EMLSR for unequal bandwidth Date: Thu, 13 Mar 2025 00:22:30 +0200 Message-Id: <20250313002008.150c330711c4.Ifd72d2e076783991852a7f1756948b4f0efb9fea@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250312222238.2585340-1-miriam.rachel.korenblit@intel.com> References: <20250312222238.2585340-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 Allow EMLSR if the bandwidths of the links are unequal if one of the following conditions is true: 1. in low latency mode 2. bandwidth of the secondary link is greater than the bandwidth of the primary 3. the primary link is active and is loaded enough to justify EMLSR Signed-off-by: Miri Korenblit Reviewed-by: Emmanuel Grumbach --- .../net/wireless/intel/iwlwifi/mld/iface.h | 15 ++--- .../wireless/intel/iwlwifi/mld/low_latency.c | 4 ++ .../net/wireless/intel/iwlwifi/mld/mac80211.c | 10 +-- drivers/net/wireless/intel/iwlwifi/mld/mlo.c | 63 +++++++++++-------- drivers/net/wireless/intel/iwlwifi/mld/mlo.h | 4 -- 5 files changed, 49 insertions(+), 47 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/iface.h b/drivers/net/wireless/intel/iwlwifi/mld/iface.h index 550ae3c9d766..d1d56b081bf6 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/iface.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/iface.h @@ -52,8 +52,6 @@ enum iwl_mld_emlsr_blocked { * @IWL_MLD_EMLSR_EXIT_FAIL_ENTRY: FW failed to enter EMLSR * @IWL_MLD_EMLSR_EXIT_CSA: EMLSR prevented due to channel switch on link * @IWL_MLD_EMLSR_EXIT_EQUAL_BAND: EMLSR prevented as both links share the band - * @IWL_MLD_EMLSR_EXIT_BANDWIDTH: Bandwidths of primary and secondary links are - * not equal * @IWL_MLD_EMLSR_EXIT_LOW_RSSI: Link RSSI is unsuitable for EMLSR * @IWL_MLD_EMLSR_EXIT_LINK_USAGE: Exit EMLSR due to low TPT on secondary link * @IWL_MLD_EMLSR_EXIT_BT_COEX: Exit EMLSR due to BT coexistence @@ -68,13 +66,12 @@ enum iwl_mld_emlsr_exit { IWL_MLD_EMLSR_EXIT_FAIL_ENTRY = 0x4, IWL_MLD_EMLSR_EXIT_CSA = 0x8, IWL_MLD_EMLSR_EXIT_EQUAL_BAND = 0x10, - IWL_MLD_EMLSR_EXIT_BANDWIDTH = 0x20, - IWL_MLD_EMLSR_EXIT_LOW_RSSI = 0x40, - IWL_MLD_EMLSR_EXIT_LINK_USAGE = 0x80, - IWL_MLD_EMLSR_EXIT_BT_COEX = 0x100, - IWL_MLD_EMLSR_EXIT_CHAN_LOAD = 0x200, - IWL_MLD_EMLSR_EXIT_RFI = 0x400, - IWL_MLD_EMLSR_EXIT_FW_REQUEST = 0x800, + IWL_MLD_EMLSR_EXIT_LOW_RSSI = 0x20, + IWL_MLD_EMLSR_EXIT_LINK_USAGE = 0x40, + IWL_MLD_EMLSR_EXIT_BT_COEX = 0x80, + IWL_MLD_EMLSR_EXIT_CHAN_LOAD = 0x100, + IWL_MLD_EMLSR_EXIT_RFI = 0x200, + IWL_MLD_EMLSR_EXIT_FW_REQUEST = 0x400, }; /** diff --git a/drivers/net/wireless/intel/iwlwifi/mld/low_latency.c b/drivers/net/wireless/intel/iwlwifi/mld/low_latency.c index e74e66735f52..a4a612afb3b3 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/low_latency.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/low_latency.c @@ -7,6 +7,7 @@ #include "low_latency.h" #include "hcmd.h" #include "power.h" +#include "mlo.h" #define MLD_LL_WK_INTERVAL_MSEC 500 #define MLD_LL_PERIOD (HZ * MLD_LL_WK_INTERVAL_MSEC / 1000) @@ -230,6 +231,9 @@ void iwl_mld_vif_update_low_latency(struct iwl_mld *mld, return; iwl_mld_update_mac_power(mld, vif, false); + + if (low_latency) + iwl_mld_retry_emlsr(mld, vif); } static bool iwl_mld_is_vo_vi_pkt(struct ieee80211_hdr *hdr) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c index f6623988fff6..938cf5900a29 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c @@ -1187,15 +1187,11 @@ iwl_mld_mac80211_link_info_changed_sta(struct iwl_mld *mld, bw = ieee80211_chan_width_to_rx_bw(link_conf->chanreq.oper.width); iwl_mld_omi_ap_changed_bw(mld, link_conf, bw); - } - if (changes & BSS_CHANGED_BANDWIDTH) { - if (iwl_mld_emlsr_active(vif)) - iwl_mld_emlsr_check_equal_bw(mld, vif, link_conf); - else - /* Channel load threshold may have changed */ - iwl_mld_retry_emlsr(mld, vif); } + + if (changes & BSS_CHANGED_BANDWIDTH) + iwl_mld_retry_emlsr(mld, vif); } static int iwl_mld_update_mu_groups(struct iwl_mld *mld, diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mlo.c b/drivers/net/wireless/intel/iwlwifi/mld/mlo.c index 8f6da90bf82c..9342f03c0908 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mlo.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/mlo.c @@ -47,7 +47,6 @@ static void iwl_mld_print_emlsr_blocked(struct iwl_mld *mld, u32 mask) HOW(FAIL_ENTRY) \ HOW(CSA) \ HOW(EQUAL_BAND) \ - HOW(BANDWIDTH) \ HOW(LOW_RSSI) \ HOW(LINK_USAGE) \ HOW(BT_COEX) \ @@ -748,6 +747,7 @@ iwl_mld_channel_load_allows_emlsr(struct iwl_mld *mld, struct iwl_mld_link *link_a = iwl_mld_link_dereference_check(mld_vif, a->link_id); struct ieee80211_chanctx_conf *chanctx_a = NULL; + u32 bw_a, bw_b, ratio; u32 primary_load_perc; if (!link_a || !link_a->active) { @@ -765,7 +765,34 @@ iwl_mld_channel_load_allows_emlsr(struct iwl_mld *mld, IWL_DEBUG_EHT(mld, "Average channel load not by us: %u\n", primary_load_perc); - return primary_load_perc > iwl_mld_get_min_chan_load_thresh(chanctx_a); + if (primary_load_perc < iwl_mld_get_min_chan_load_thresh(chanctx_a)) { + IWL_DEBUG_EHT(mld, "Channel load is below the minimum threshold\n"); + return false; + } + + if (iwl_mld_vif_low_latency(mld_vif)) { + IWL_DEBUG_EHT(mld, "Low latency vif, EMLSR is allowed\n"); + return true; + } + + if (a->chandef->width <= b->chandef->width) + return true; + + bw_a = nl80211_chan_width_to_mhz(a->chandef->width); + bw_b = nl80211_chan_width_to_mhz(b->chandef->width); + ratio = bw_a / bw_b; + + switch (ratio) { + case 2: + return primary_load_perc > 25; + case 4: + return primary_load_perc > 40; + case 8: + case 16: + return primary_load_perc > 50; + } + + return false; } static bool @@ -784,12 +811,6 @@ iwl_mld_valid_emlsr_pair(struct ieee80211_vif *vif, 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 - */ - reason_mask |= IWL_MLD_EMLSR_EXIT_BANDWIDTH; - } if (!iwl_mld_channel_load_allows_emlsr(mld, vif, a, b)) reason_mask |= IWL_MLD_EMLSR_EXIT_CHAN_LOAD; @@ -941,23 +962,6 @@ void iwl_mld_select_links(struct iwl_mld *mld) NULL); } -void iwl_mld_emlsr_check_equal_bw(struct iwl_mld *mld, - struct ieee80211_vif *vif, - struct ieee80211_bss_conf *link) -{ - u8 other_link_id = iwl_mld_get_other_link(vif, link->link_id); - struct ieee80211_bss_conf *other_link = - link_conf_dereference_check(vif, other_link_id); - - if (!ieee80211_vif_link_active(vif, link->link_id) || - WARN_ON(link->link_id == other_link_id || !other_link)) - return; - - if (link->chanreq.oper.width != other_link->chanreq.oper.width) - iwl_mld_exit_emlsr(mld, vif, IWL_MLD_EMLSR_EXIT_BANDWIDTH, - iwl_mld_get_primary_link(vif)); -} - static void iwl_mld_emlsr_check_bt_iter(void *_data, u8 *mac, struct ieee80211_vif *vif) { @@ -1038,10 +1042,15 @@ static void iwl_mld_chan_load_update_iter(void *_data, u8 *mac, } else { u32 old_chan_load = data->prev_chan_load_not_by_us; u32 new_chan_load = phy->avg_channel_load_not_by_us; - u32 thresh = iwl_mld_get_min_chan_load_thresh(chanctx); + u32 min_thresh = iwl_mld_get_min_chan_load_thresh(chanctx); + +#define THRESHOLD_CROSSED(threshold) \ + (old_chan_load <= (threshold) && new_chan_load > (threshold)) - if (old_chan_load <= thresh && new_chan_load > thresh) + if (THRESHOLD_CROSSED(min_thresh) || THRESHOLD_CROSSED(25) || + THRESHOLD_CROSSED(40) || THRESHOLD_CROSSED(50)) iwl_mld_retry_emlsr(mld, vif); +#undef THRESHOLD_CROSSED } } diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mlo.h b/drivers/net/wireless/intel/iwlwifi/mld/mlo.h index a5fbe1919c6d..6c652c17069f 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mlo.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/mlo.h @@ -134,10 +134,6 @@ void iwl_mld_emlsr_unblock_tpt_wk(struct wiphy *wiphy, struct wiphy_work *wk); void iwl_mld_select_links(struct iwl_mld *mld); -void iwl_mld_emlsr_check_equal_bw(struct iwl_mld *mld, - struct ieee80211_vif *vif, - struct ieee80211_bss_conf *link); - void iwl_mld_emlsr_check_bt(struct iwl_mld *mld); void iwl_mld_emlsr_check_chan_load(struct ieee80211_hw *hw, From patchwork Wed Mar 12 22:22:31 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14013994 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (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 5E4721F03C5 for ; Wed, 12 Mar 2025 22:23:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818185; cv=none; b=jxP+eScwMnvBqC1WpDHmYqA6bsBQmHrRETzEM++sWa8htGmJ1T9KiAgL5eTQjHqeYNfIkcBhjYZEOfHQ+mLs7w6A8jIp599Eu6Gj0Uq6Nl35UZhA54u2SIzKHkb/cFCERJN7t6+2sT18+3cEZkdZjwH4i/R6jt72mcS1cf6DgGY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818185; c=relaxed/simple; bh=Eo6oXvzLp6yT0GfnZ1iez1aCbAqXk/XG8yCxla3IIIo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=bD0uGpQrsE/BnV4JtcMeszwoeoSCJlC4YgR5QPUL9HT7vKaFfIBdW0dYrhVvEm/nA9SiS40M78jftheI0TwkzPLk9jFunqQ/mqR+Do21I1fn5efdjFfUeIR8o2+Y95dZF5t8SjBsl2JcNRth4zzRBAge572mNsOZGlfBP12kByM= 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=nkB7DJUv; arc=none smtp.client-ip=198.175.65.21 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="nkB7DJUv" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741818184; x=1773354184; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Eo6oXvzLp6yT0GfnZ1iez1aCbAqXk/XG8yCxla3IIIo=; b=nkB7DJUv07a5h2Ed1vcHyRu4txhgsefBcPS+qH6pV+3x+o9qRotebAFi +QEKrx8wOnuWdBHL9Yh/nW6myJHF5RjOqFdkzV4PqwFXy4IpxxT9X7vqk vzOAYVm905qnIXUgewKs0v+S6jv36hiliLQFgHzY/DfaHxcWQek23bUbx dy0zi62W84HX5CBWBGGuKlj7lMh9s3Jo4DJONuLi9b4mVK3rKKaFdlVdV WI5ZkNozrNVz/VgyuTaCEsBwt1fPaqOBQA2VoAr5L/06zGLxVVFEtX1uN XJSWVKiawGyq7xJORskY22ck42bFOloDhqf4T8tCzshbWRTBX8y9Gzisp w==; X-CSE-ConnectionGUID: 1YSPE/4CRayCJ1FlAT1/Mg== X-CSE-MsgGUID: a7BhbyMVTuqls/xvA2plzg== X-IronPort-AV: E=McAfee;i="6700,10204,11371"; a="42826752" X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="42826752" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:23:04 -0700 X-CSE-ConnectionGUID: gZgUnkTBTCW7uGGR4rqrbg== X-CSE-MsgGUID: ujWNOOHISiOf8KQ9i3lJVQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="121267386" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:23:02 -0700 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Emmanuel Grumbach Subject: [PATCH wireless-next 08/15] wifi: iwlwifi: mld: KUnit: introduce iwl_mld_kunit_link Date: Thu, 13 Mar 2025 00:22:31 +0200 Message-Id: <20250313002008.f336491ccc4e.I6b727765eb394a3dbb78cea71e356be1bdc4a17c@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250312222238.2585340-1-miriam.rachel.korenblit@intel.com> References: <20250312222238.2585340-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 To allow setting up association/EMLSR states with more flexibility, change the relevant functions to receive a new struct, iwl_mld_kunit_link, which will contain all the link parameters (for now just link id, band and bandwidth). Signed-off-by: Miri Korenblit Reviewed-by: Emmanuel Grumbach --- .../intel/iwlwifi/mld/tests/link-selection.c | 13 +++--- .../wireless/intel/iwlwifi/mld/tests/link.c | 15 +++++-- .../wireless/intel/iwlwifi/mld/tests/utils.c | 45 +++++++++---------- .../wireless/intel/iwlwifi/mld/tests/utils.h | 22 ++++++--- 4 files changed, 54 insertions(+), 41 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/tests/link-selection.c b/drivers/net/wireless/intel/iwlwifi/mld/tests/link-selection.c index d835550c1a6b..34782569d67e 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/tests/link-selection.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/tests/link-selection.c @@ -126,23 +126,24 @@ static void test_link_grading(struct kunit *test) struct ieee80211_vif *vif; struct ieee80211_bss_conf *link; unsigned int actual_grade; - u8 assoc_link_id; /* Extract test case parameters */ u8 link_id = test_param->input.link.link_id; - enum nl80211_band band = test_param->input.link.chandef->chan->band; bool active = test_param->input.link.active; u16 valid_links; + struct iwl_mld_kunit_link assoc_link = { + .band = test_param->input.link.chandef->chan->band, + }; /* If the link is not active, use a different link as the assoc link */ if (active) { - assoc_link_id = link_id; + assoc_link.id = link_id; valid_links = BIT(link_id); } else { - assoc_link_id = BIT(ffz(BIT(link_id))); - valid_links = BIT(assoc_link_id) | BIT(link_id); + assoc_link.id = BIT(ffz(BIT(link_id))); + valid_links = BIT(assoc_link.id) | BIT(link_id); } - vif = iwlmld_kunit_setup_mlo_assoc(valid_links, assoc_link_id, band); + vif = iwlmld_kunit_setup_mlo_assoc(valid_links, &assoc_link); wiphy_lock(mld->wiphy); link = wiphy_dereference(mld->wiphy, vif->link_conf[link_id]); diff --git a/drivers/net/wireless/intel/iwlwifi/mld/tests/link.c b/drivers/net/wireless/intel/iwlwifi/mld/tests/link.c index 6e251dbc1dfe..4a4eaa134bd3 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/tests/link.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/tests/link.c @@ -2,7 +2,7 @@ /* * KUnit tests for channel helper functions * - * Copyright (C) 2024 Intel Corporation + * Copyright (C) 2024-2025 Intel Corporation */ #include @@ -61,6 +61,14 @@ static void test_missed_beacon(struct kunit *test) (const void *)(test->param_value); struct ieee80211_vif *vif; struct iwl_rx_packet *pkt; + struct iwl_mld_kunit_link link1 = { + .id = 0, + .band = NL80211_BAND_6GHZ, + }; + struct iwl_mld_kunit_link link2 = { + .id = 1, + .band = NL80211_BAND_5GHZ, + }; kunit_activate_static_stub(test, ieee80211_connection_loss, fake_ieee80211_connection_loss); @@ -68,12 +76,11 @@ static void test_missed_beacon(struct kunit *test) notif = (void *)pkt->data; if (test_param->input.emlsr) { - vif = iwlmld_kunit_assoc_emlsr(0x3, NL80211_BAND_5GHZ, - NL80211_BAND_6GHZ); + vif = iwlmld_kunit_assoc_emlsr(&link1, &link2); } else { struct iwl_mld_vif *mld_vif; - vif = iwlmld_kunit_setup_non_mlo_assoc(NL80211_BAND_6GHZ); + vif = iwlmld_kunit_setup_non_mlo_assoc(&link1); mld_vif = iwl_mld_vif_from_mac80211(vif); notif->link_id = cpu_to_le32(mld_vif->deflink.fw_id); } diff --git a/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.c b/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.c index 6331cd91cdf6..fa2710661bd5 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.c @@ -329,7 +329,7 @@ static void iwlmld_kunit_set_vif_associated(struct ieee80211_vif *vif) } static struct ieee80211_vif * -iwlmld_kunit_setup_assoc(bool mlo, u8 link_id, enum nl80211_band band) +iwlmld_kunit_setup_assoc(bool mlo, struct iwl_mld_kunit_link *assoc_link) { struct kunit *test = kunit_get_current_test(); struct iwl_mld *mld = test->priv; @@ -337,32 +337,32 @@ iwlmld_kunit_setup_assoc(bool mlo, u8 link_id, enum nl80211_band band) struct ieee80211_bss_conf *link; struct ieee80211_chanctx_conf *chan_ctx; - KUNIT_ASSERT_TRUE(test, mlo || link_id == 0); + KUNIT_ASSERT_TRUE(test, mlo || assoc_link->id == 0); vif = iwlmld_kunit_add_vif(mlo, NL80211_IFTYPE_STATION); if (mlo) - link = iwlmld_kunit_add_link(vif, link_id); + link = iwlmld_kunit_add_link(vif, assoc_link->id); else link = &vif->bss_conf; - chan_ctx = iwlmld_kunit_add_chanctx(band); + chan_ctx = iwlmld_kunit_add_chanctx(assoc_link->band); wiphy_lock(mld->wiphy); iwlmld_kunit_assign_chanctx_to_link(vif, link, chan_ctx); wiphy_unlock(mld->wiphy); /* The AP sta will now be pointer to by mld_vif->ap_sta */ - iwlmld_kunit_setup_sta(vif, IEEE80211_STA_AUTHORIZED, link_id); + iwlmld_kunit_setup_sta(vif, IEEE80211_STA_AUTHORIZED, assoc_link->id); iwlmld_kunit_set_vif_associated(vif); return vif; } -struct ieee80211_vif *iwlmld_kunit_setup_mlo_assoc(u16 valid_links, - u8 assoc_link_id, - enum nl80211_band band) +struct ieee80211_vif * +iwlmld_kunit_setup_mlo_assoc(u16 valid_links, + struct iwl_mld_kunit_link *assoc_link) { struct kunit *test = kunit_get_current_test(); struct ieee80211_vif *vif; @@ -370,13 +370,13 @@ struct ieee80211_vif *iwlmld_kunit_setup_mlo_assoc(u16 valid_links, KUNIT_ASSERT_TRUE(test, hweight16(valid_links) == 1 || hweight16(valid_links) == 2); - KUNIT_ASSERT_TRUE(test, valid_links & BIT(assoc_link_id)); + KUNIT_ASSERT_TRUE(test, valid_links & BIT(assoc_link->id)); - vif = iwlmld_kunit_setup_assoc(true, assoc_link_id, band); + vif = iwlmld_kunit_setup_assoc(true, assoc_link); /* Add the other link, if applicable */ if (hweight16(valid_links) > 1) { - u8 other_link_id = ffs(valid_links & ~BIT(assoc_link_id)) - 1; + u8 other_link_id = ffs(valid_links & ~BIT(assoc_link->id)) - 1; iwlmld_kunit_add_link(vif, other_link_id); } @@ -384,9 +384,10 @@ struct ieee80211_vif *iwlmld_kunit_setup_mlo_assoc(u16 valid_links, return vif; } -struct ieee80211_vif *iwlmld_kunit_setup_non_mlo_assoc(enum nl80211_band band) +struct ieee80211_vif * +iwlmld_kunit_setup_non_mlo_assoc(struct iwl_mld_kunit_link *assoc_link) { - return iwlmld_kunit_setup_assoc(false, 0, band); + return iwlmld_kunit_setup_assoc(false, assoc_link); } struct iwl_rx_packet * @@ -403,9 +404,8 @@ _iwl_mld_kunit_create_pkt(const void *notif, size_t notif_sz) return pkt; } -struct ieee80211_vif *iwlmld_kunit_assoc_emlsr(u16 valid_links, - enum nl80211_band band1, - enum nl80211_band band2) +struct ieee80211_vif *iwlmld_kunit_assoc_emlsr(struct iwl_mld_kunit_link *link1, + struct iwl_mld_kunit_link *link2) { struct kunit *test = kunit_get_current_test(); struct iwl_mld *mld = test->priv; @@ -414,23 +414,20 @@ struct ieee80211_vif *iwlmld_kunit_assoc_emlsr(u16 valid_links, struct ieee80211_chanctx_conf *chan_ctx; struct ieee80211_sta *sta; struct iwl_mld_vif *mld_vif; - u8 assoc_link_id, other_link_id; + u16 valid_links = BIT(link1->id) | BIT(link2->id); KUNIT_ASSERT_TRUE(test, hweight16(valid_links) == 2); - assoc_link_id = ffs(valid_links) - 1; - other_link_id = ffs(valid_links & ~BIT(assoc_link_id)) - 1; - - vif = iwlmld_kunit_setup_mlo_assoc(valid_links, assoc_link_id, band1); + vif = iwlmld_kunit_setup_mlo_assoc(valid_links, link1); mld_vif = iwl_mld_vif_from_mac80211(vif); /* Activate second link */ wiphy_lock(mld->wiphy); - link = wiphy_dereference(mld->wiphy, vif->link_conf[other_link_id]); + link = wiphy_dereference(mld->wiphy, vif->link_conf[link2->id]); KUNIT_EXPECT_NOT_NULL(test, link); - chan_ctx = iwlmld_kunit_add_chanctx(band2); + chan_ctx = iwlmld_kunit_add_chanctx(link2->band); iwlmld_kunit_assign_chanctx_to_link(vif, link, chan_ctx); wiphy_unlock(mld->wiphy); @@ -439,7 +436,7 @@ struct ieee80211_vif *iwlmld_kunit_assoc_emlsr(u16 valid_links, sta = mld_vif->ap_sta; KUNIT_EXPECT_NOT_NULL(test, sta); - iwlmld_kunit_alloc_link_sta(sta, other_link_id); + iwlmld_kunit_alloc_link_sta(sta, link2->id); return vif; } diff --git a/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.h b/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.h index 9b1f2ada997f..bb757a7dd8e7 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.h @@ -13,6 +13,12 @@ struct iwl_mld; int iwlmld_kunit_test_init(struct kunit *test); +struct iwl_mld_kunit_link { + u8 id; + enum nl80211_band band; + enum nl80211_chan_width bandwidth; +}; + enum nl80211_iftype; struct ieee80211_vif *iwlmld_kunit_add_vif(bool mlo, enum nl80211_iftype type); @@ -88,10 +94,12 @@ struct ieee80211_sta *iwlmld_kunit_setup_sta(struct ieee80211_vif *vif, enum ieee80211_sta_state state, int link_id); -struct ieee80211_vif *iwlmld_kunit_setup_mlo_assoc(u16 valid_links, - u8 assoc_link_id, - enum nl80211_band band); -struct ieee80211_vif *iwlmld_kunit_setup_non_mlo_assoc(enum nl80211_band band); +struct ieee80211_vif * +iwlmld_kunit_setup_mlo_assoc(u16 valid_links, + struct iwl_mld_kunit_link *assoc_link); + +struct ieee80211_vif * +iwlmld_kunit_setup_non_mlo_assoc(struct iwl_mld_kunit_link *assoc_link); struct iwl_rx_packet * _iwl_mld_kunit_create_pkt(const void *notif, size_t notif_sz); @@ -99,9 +107,9 @@ _iwl_mld_kunit_create_pkt(const void *notif, size_t notif_sz); #define iwl_mld_kunit_create_pkt(_notif) \ _iwl_mld_kunit_create_pkt(&(_notif), sizeof(_notif)) -struct ieee80211_vif *iwlmld_kunit_assoc_emlsr(u16 valid_links, - enum nl80211_band band1, - enum nl80211_band band2); +struct ieee80211_vif * +iwlmld_kunit_assoc_emlsr(struct iwl_mld_kunit_link *link1, + struct iwl_mld_kunit_link *link2); struct element *iwlmld_kunit_gen_element(u8 id, const void *data, size_t len); From patchwork Wed Mar 12 22:22:32 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14013995 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (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 CEE2C1EF0AD for ; Wed, 12 Mar 2025 22:23:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818186; cv=none; b=cuHxpiT87vPtpX0AnNKqP/yPKE6gAvqFDlH3iG4KpZwJdQJ92FilQ2KfxUYa1DCvDKZCswdbvsMJSWpcI1hLOeM8elGFY72V25Lj2E+0fXvdPy0+WBPYiP3zYE8W0IVxkL6D9hpKwCZctje3Ni2TFNMwwYH+2VWTFQOu0arZ+V8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818186; c=relaxed/simple; bh=GjS7lGGESt/rvA4lexSx3lHXmgQxxPUxFvVmQtzoatI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=DgcPdVZXUKt/Vo7x9z7Wfes0fpGvYXsdP4/fO8VCZ/Lydiq+4v7fFiKXczfpGRJJ3Df8OJohIsvSscbXoOcQw6p6P3QZU4nnXiJcgpu1XofAZZFjU4x8sZxV4b+WzTkvBRawYmloH6RrXv8hg35mWAMSLcQ4LjR6umfrMJnPQjw= 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=LiIjxNtR; arc=none smtp.client-ip=198.175.65.21 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="LiIjxNtR" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741818185; x=1773354185; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=GjS7lGGESt/rvA4lexSx3lHXmgQxxPUxFvVmQtzoatI=; b=LiIjxNtRCj/S9S0X53+eYnj1PzpDEKLsp126GpEujWK0qgcy2t6ClkaX FMKHPD174RusPXP6rn9Fl57VjUTMzb1x8mPZ9SQYfazgqLpBRL5zK+/nB DtL4P5tmqZExhCv9Hwc+Ojrd/YPiJb231QW1dADq35K5oKweXxxsBjGKB PZ1m2PU+Q4mMZ8WueGskFNGSAJgHSMZEIrFon07Yx2eJwV83Bm+/o2ysA Da08NrOAc/C60DqZxvjqNudx9g55JHpBfO26ur821/pJsLQ41OEhlilZc Cok9yBZ/azRfM15sHfOJ0U1YaATPbGWKAIeKyG1k1hYY8uvFR1XrwtvwY A==; X-CSE-ConnectionGUID: ZBslj8FSQdWWnsEsH2XIfg== X-CSE-MsgGUID: C1oAmiywS9uW+ECIUx4yNA== X-IronPort-AV: E=McAfee;i="6700,10204,11371"; a="42826754" X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="42826754" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:23:05 -0700 X-CSE-ConnectionGUID: 3Q1b7AfdRL2KTmMSdhdTeQ== X-CSE-MsgGUID: yW9dRUVCTheAuGPTTZ3pQA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="121267390" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:23:03 -0700 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Emmanuel Grumbach Subject: [PATCH wireless-next 09/15] wifi: iwlwifi: mld: KUnit: create chanctx with a custom width Date: Thu, 13 Mar 2025 00:22:32 +0200 Message-Id: <20250313002008.85a1285d34cd.Ia71cdcd4241fe73501bc93e3cb2c6bb3f631b9ec@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250312222238.2585340-1-miriam.rachel.korenblit@intel.com> References: <20250312222238.2585340-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 iwlmld_kunit_add_chanctx receives a band, picks a predefined static chandef, and creates the chanctx from it. Change it to receive a bandwidth as well. Otherwise, the bandwidth in the chanctx/phy will be different than what test specified in the iwl_mld_kunit_link. Signed-off-by: Miri Korenblit Reviewed-by: Emmanuel Grumbach --- .../net/wireless/intel/iwlwifi/mld/tests/utils.c | 5 +++-- .../net/wireless/intel/iwlwifi/mld/tests/utils.h | 14 ++++++++------ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.c b/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.c index fa2710661bd5..9712ee696509 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.c @@ -346,7 +346,8 @@ iwlmld_kunit_setup_assoc(bool mlo, struct iwl_mld_kunit_link *assoc_link) else link = &vif->bss_conf; - chan_ctx = iwlmld_kunit_add_chanctx(assoc_link->band); + chan_ctx = iwlmld_kunit_add_chanctx(assoc_link->band, + assoc_link->bandwidth); wiphy_lock(mld->wiphy); iwlmld_kunit_assign_chanctx_to_link(vif, link, chan_ctx); @@ -427,7 +428,7 @@ struct ieee80211_vif *iwlmld_kunit_assoc_emlsr(struct iwl_mld_kunit_link *link1, link = wiphy_dereference(mld->wiphy, vif->link_conf[link2->id]); KUNIT_EXPECT_NOT_NULL(test, link); - chan_ctx = iwlmld_kunit_add_chanctx(link2->band); + chan_ctx = iwlmld_kunit_add_chanctx(link2->band, link2->bandwidth); iwlmld_kunit_assign_chanctx_to_link(vif, link, chan_ctx); wiphy_unlock(mld->wiphy); diff --git a/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.h b/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.h index bb757a7dd8e7..d3723653cf1b 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.h @@ -65,24 +65,26 @@ struct ieee80211_chanctx_conf * iwlmld_kunit_add_chanctx_from_def(struct cfg80211_chan_def *def); static inline struct ieee80211_chanctx_conf * -iwlmld_kunit_add_chanctx(enum nl80211_band band) +iwlmld_kunit_add_chanctx(enum nl80211_band band, enum nl80211_chan_width width) { - struct cfg80211_chan_def *chandef; + struct cfg80211_chan_def chandef; switch (band) { case NL80211_BAND_2GHZ: - chandef = &chandef_2ghz; + chandef = chandef_2ghz; break; case NL80211_BAND_5GHZ: - chandef = &chandef_5ghz; + chandef = chandef_5ghz; break; default: case NL80211_BAND_6GHZ: - chandef = &chandef_6ghz; + chandef = chandef_6ghz; break; } - return iwlmld_kunit_add_chanctx_from_def(chandef); + chandef.width = width; + + return iwlmld_kunit_add_chanctx_from_def(&chandef); } void iwlmld_kunit_assign_chanctx_to_link(struct ieee80211_vif *vif, From patchwork Wed Mar 12 22:22:33 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14013996 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (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 521A91F03C5 for ; Wed, 12 Mar 2025 22:23:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818187; cv=none; b=lQoTKSwsm/co/L53HD0uBA33y3UrdxqpD+0B1/X1zlng4uSdVyCyd3lyR/VRNd7FApl29BzCiaFM2vcagUVgsu7xxo1I5VWKdVQION2td3og5DvH3nZ4zhLllL2uLJLWapJq/IYU2B8YNF8a3SiSN5Es3N1+6rT5pTr7+dDd6+U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818187; c=relaxed/simple; bh=1WBbeik5wi3drDYu/MVkynfo9xgawanZNjF0eIfzg0I=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=O9kcNux8gsdy+K6ge9F1hA+0/zlvqVkEp8mX7dSFSv46cyxs8Z16PuIWF7Ysv8Kl6zPFyfB2hvMzLMlygqTT4RgcZBjOzJinufd8+RJQsXeXJkIkoIeJJNZEGrKEK2C8zcDU9cQeNXzGaZRBUQvwmOPz4WyfPbTbVv9Vr8FoC1g= 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=WeOBZV2H; arc=none smtp.client-ip=198.175.65.21 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="WeOBZV2H" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741818187; x=1773354187; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=1WBbeik5wi3drDYu/MVkynfo9xgawanZNjF0eIfzg0I=; b=WeOBZV2HOjo8vosKzUaE/ZM9hUxaUtTtuKqVsDA8EyPwwwC1wf1BaCEd BKh1Tl77qpSKBp5EIjHMo+2QgVgXJ2QKhjp5T+35ZKozS7ms8qigUUH23 HWG7CfBLTjD3LQtKTMMPUi82M/7o+q4rbmGhvPJcOF8bMkc+U0BFGmXjW o6C/+UZpNwUL4bwoElCbqVXnCdavnEP4JSxZYDW3tQdyfXNXzfpoEkKaQ ommWk8oGi82KW2ZlZSB+QMTXFXeF3RRYfjMk0mczobj/OPhfNaJNsOeQy uLM7rJmxFNX8CGBNMPMysUyC82L4cWwxbHpDRYO9BXjD2sO0JhSSXIb+u Q==; X-CSE-ConnectionGUID: uNqKldcLSjyZAE6C6Yj6+g== X-CSE-MsgGUID: ZZky04kXRaCiqaTEv/kUjA== X-IronPort-AV: E=McAfee;i="6700,10204,11371"; a="42826756" X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="42826756" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:23:07 -0700 X-CSE-ConnectionGUID: ddohUVDFQ8q2f2AXcN/JnA== X-CSE-MsgGUID: He8AHmrGSLuW+Knjq78Kmw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="121267394" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:23:05 -0700 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Johannes Berg Subject: [PATCH wireless-next 10/15] wifi: iwlwifi: mld: KUnit: test iwl_mld_channel_load_allows_emlsr Date: Thu, 13 Mar 2025 00:22:33 +0200 Message-Id: <20250313002008.06fdf416c62f.If6e8f0e017287e79364eac9366f93c9ab964a673@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250312222238.2585340-1-miriam.rachel.korenblit@intel.com> References: <20250312222238.2585340-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 Add tests to check that iwl_mld_channel_load_allows_emlsr decides correctly whether EMLSR is allowed or not. Signed-off-by: Miri Korenblit Reviewed-by: Johannes Berg --- drivers/net/wireless/intel/iwlwifi/mld/mlo.c | 9 +- drivers/net/wireless/intel/iwlwifi/mld/mlo.h | 14 ++ .../intel/iwlwifi/mld/tests/link-selection.c | 131 ++++++++++++++++++ 3 files changed, 147 insertions(+), 7 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mlo.c b/drivers/net/wireless/intel/iwlwifi/mld/mlo.c index 9342f03c0908..dac72644ec78 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mlo.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/mlo.c @@ -602,12 +602,6 @@ void iwl_mld_emlsr_unblock_tpt_wk(struct wiphy *wiphy, struct wiphy_work *wk) /* * Link selection */ -struct iwl_mld_link_sel_data { - u8 link_id; - const struct cfg80211_chan_def *chandef; - s32 signal; - u16 grade; -}; s8 iwl_mld_get_emlsr_rssi_thresh(struct iwl_mld *mld, const struct cfg80211_chan_def *chandef, @@ -737,7 +731,7 @@ iwl_mld_get_min_chan_load_thresh(struct ieee80211_chanctx_conf *chanctx) return 10; } -static bool +VISIBLE_IF_KUNIT bool iwl_mld_channel_load_allows_emlsr(struct iwl_mld *mld, struct ieee80211_vif *vif, const struct iwl_mld_link_sel_data *a, @@ -794,6 +788,7 @@ iwl_mld_channel_load_allows_emlsr(struct iwl_mld *mld, return false; } +EXPORT_SYMBOL_IF_IWLWIFI_KUNIT(iwl_mld_channel_load_allows_emlsr); static bool iwl_mld_valid_emlsr_pair(struct ieee80211_vif *vif, diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mlo.h b/drivers/net/wireless/intel/iwlwifi/mld/mlo.h index 6c652c17069f..4fb1fdbe3df9 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mlo.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/mlo.h @@ -150,4 +150,18 @@ void iwl_mld_emlsr_check_chan_load(struct ieee80211_hw *hw, */ void iwl_mld_retry_emlsr(struct iwl_mld *mld, struct ieee80211_vif *vif); +struct iwl_mld_link_sel_data { + u8 link_id; + const struct cfg80211_chan_def *chandef; + s32 signal; + u16 grade; +}; + +#if IS_ENABLED(CONFIG_IWLWIFI_KUNIT_TESTS) +bool iwl_mld_channel_load_allows_emlsr(struct iwl_mld *mld, + struct ieee80211_vif *vif, + const struct iwl_mld_link_sel_data *a, + const struct iwl_mld_link_sel_data *b); +#endif + #endif /* __iwl_mld_mlo_h__ */ diff --git a/drivers/net/wireless/intel/iwlwifi/mld/tests/link-selection.c b/drivers/net/wireless/intel/iwlwifi/mld/tests/link-selection.c index 34782569d67e..295dcfd3f85d 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/tests/link-selection.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/tests/link-selection.c @@ -11,6 +11,7 @@ #include "link.h" #include "iface.h" #include "phy.h" +#include "mlo.h" static const struct link_grading_test_case { const char *desc; @@ -170,3 +171,133 @@ static struct kunit_suite link_selection = { }; kunit_test_suite(link_selection); + +static const struct channel_load_case { + const char *desc; + bool low_latency_vif; + u32 chan_load_not_by_us; + enum nl80211_chan_width bw_a; + enum nl80211_chan_width bw_b; + bool primary_link_active; + bool expected_result; +} channel_load_cases[] = { + { + .desc = "Unequal bandwidth, primary link inactive, EMLSR not allowed", + .low_latency_vif = false, + .primary_link_active = false, + .bw_a = NL80211_CHAN_WIDTH_40, + .bw_b = NL80211_CHAN_WIDTH_20, + .expected_result = false, + }, + { + .desc = "Equal bandwidths, sufficient channel load, EMLSR allowed", + .low_latency_vif = false, + .primary_link_active = true, + .chan_load_not_by_us = 11, + .bw_a = NL80211_CHAN_WIDTH_40, + .bw_b = NL80211_CHAN_WIDTH_40, + .expected_result = true, + }, + { + .desc = "Equal bandwidths, insufficient channel load, EMLSR not allowed", + .low_latency_vif = false, + .primary_link_active = true, + .chan_load_not_by_us = 6, + .bw_a = NL80211_CHAN_WIDTH_80, + .bw_b = NL80211_CHAN_WIDTH_80, + .expected_result = false, + }, + { + .desc = "Low latency VIF, sufficient channel load, EMLSR allowed", + .low_latency_vif = true, + .primary_link_active = true, + .chan_load_not_by_us = 6, + .bw_a = NL80211_CHAN_WIDTH_160, + .bw_b = NL80211_CHAN_WIDTH_160, + .expected_result = true, + }, + { + .desc = "Different bandwidths (2x ratio), primary link load permits EMLSR", + .low_latency_vif = false, + .primary_link_active = true, + .chan_load_not_by_us = 30, + .bw_a = NL80211_CHAN_WIDTH_40, + .bw_b = NL80211_CHAN_WIDTH_20, + .expected_result = true, + }, + { + .desc = "Different bandwidths (4x ratio), primary link load permits EMLSR", + .low_latency_vif = false, + .primary_link_active = true, + .chan_load_not_by_us = 45, + .bw_a = NL80211_CHAN_WIDTH_80, + .bw_b = NL80211_CHAN_WIDTH_20, + .expected_result = true, + }, + { + .desc = "Different bandwidths (16x ratio), primary link load insufficient", + .low_latency_vif = false, + .primary_link_active = true, + .chan_load_not_by_us = 45, + .bw_a = NL80211_CHAN_WIDTH_320, + .bw_b = NL80211_CHAN_WIDTH_20, + .expected_result = false, + }, +}; + +KUNIT_ARRAY_PARAM_DESC(channel_load, channel_load_cases, desc); + +static void test_iwl_mld_channel_load_allows_emlsr(struct kunit *test) +{ + const struct channel_load_case *params = test->param_value; + struct iwl_mld *mld = test->priv; + struct ieee80211_vif *vif; + struct cfg80211_chan_def chandef_a, chandef_b; + struct iwl_mld_link_sel_data a = {.chandef = &chandef_a, + .link_id = 4}; + struct iwl_mld_link_sel_data b = {.chandef = &chandef_b, + .link_id = 5}; + struct iwl_mld_kunit_link assoc_link = { + .id = params->primary_link_active ? a.link_id : b.link_id, + .bandwidth = params->primary_link_active ? params->bw_a : params->bw_b, + }; + bool result; + + vif = iwlmld_kunit_setup_mlo_assoc(BIT(a.link_id) | BIT(b.link_id), + &assoc_link); + + chandef_a.width = params->bw_a; + chandef_b.width = params->bw_b; + + if (params->low_latency_vif) + iwl_mld_vif_from_mac80211(vif)->low_latency_causes = 1; + + wiphy_lock(mld->wiphy); + + /* Simulate channel load */ + if (params->primary_link_active) { + struct iwl_mld_phy *phy = + iwlmld_kunit_get_phy_of_link(vif, a.link_id); + + phy->avg_channel_load_not_by_us = params->chan_load_not_by_us; + } + + result = iwl_mld_channel_load_allows_emlsr(mld, vif, &a, &b); + + wiphy_unlock(mld->wiphy); + + KUNIT_EXPECT_EQ(test, result, params->expected_result); +} + +static struct kunit_case channel_load_criteria_test_cases[] = { + KUNIT_CASE_PARAM(test_iwl_mld_channel_load_allows_emlsr, channel_load_gen_params), + {} +}; + +static struct kunit_suite channel_load_criteria_tests = { + .name = "iwlmld_channel_load_allows_emlsr", + .test_cases = channel_load_criteria_test_cases, + .init = iwlmld_kunit_test_init, +}; + +kunit_test_suite(channel_load_criteria_tests); From patchwork Wed Mar 12 22:22:34 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14013997 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (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 90D911EF0AD for ; Wed, 12 Mar 2025 22:23:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818189; cv=none; b=gJqPzs2zGzLk4wbrqEoAwmRBPqju5jV0sMl3rRsnj3NFwyFPIbzaACAta0HFM+aHgmI3735B38KjKZ85CFsUuD/h/HDm5R+nhwnd7i9Tafl4w3xx1OyDzKFq4iXKwCTJMq4hyiHrXNP5M6w8ho+f99NkSnnTLSELzDq1iFKty9k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818189; c=relaxed/simple; bh=LBfD5eupcVnF7YZmljnO0NrbKj6vEoZ66ONi9XXQYc0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=eBo7pL+eL6fJZBTiOkm7Sxna+A1sYmbYodDwB2LGuHng6FiU3eS9adD6IAEo5IuvK6Ho5CvPWPx3/KCO7hk1ix541hTc/T5Yx0Nfts7/L+w1vaIxiFffqDoGsdzI/3+37clysrxBqocxxAczxbwOMfL3JTd7gd3wxIUMechAaxc= 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=jHyTbaI5; arc=none smtp.client-ip=198.175.65.21 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="jHyTbaI5" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741818188; x=1773354188; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=LBfD5eupcVnF7YZmljnO0NrbKj6vEoZ66ONi9XXQYc0=; b=jHyTbaI5ogs8lKQr3gW8g25yBrXyA7yLosl/UkOgbmoYuYnqZA7vNvZ7 AsdX+Wc7Ped7f3nmHLzBFuaAbgYzavsS9tjOQ79XHNYwiyupzdU0fOEaf p4UOcyNFjiuGBgmiMzH0cL9YU0WcBqilOJ2vRIpB6Eq+hdMi/gIrsEPE9 rkBTQ7c/q5YkPOS6QYBHH3BVrurg5s8MQq6fPBQzCugCQf2DTr9HemZsZ BNg7wQxFZo/dgmSQFyC2D1OKitBNbccxZhJLbbpaTj1ifaXOrzEi9W7ym 6yK2Mj5sasMRrC2Y+0LMZmHsiOOtSE4bB8k8U06I+S/ISYeTYkmIF7JoW w==; X-CSE-ConnectionGUID: OpcgiX0dTbaAa6m69wFzFA== X-CSE-MsgGUID: Q0oMkcNyQ6e5u2AiJhrpzw== X-IronPort-AV: E=McAfee;i="6700,10204,11371"; a="42826758" X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="42826758" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:23:08 -0700 X-CSE-ConnectionGUID: VBCwk5H8RfGWtzZC1cc74g== X-CSE-MsgGUID: PX5shoMcQ2WHhgzK9EI0Aw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="121267396" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:23:06 -0700 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org Subject: [PATCH wireless-next 11/15] wifi: iwlwifi: mld: make iwl_mld_run_fw_init_sequence static Date: Thu, 13 Mar 2025 00:22:34 +0200 Message-Id: <20250313002008.2d30c0b66734.I98cd21aeaf6e787af3ee3ed60d0ad8656ed8ec52@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250312222238.2585340-1-miriam.rachel.korenblit@intel.com> References: <20250312222238.2585340-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 It is not used outside of fw.c. Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/mld/fw.c | 2 +- drivers/net/wireless/intel/iwlwifi/mld/mld.h | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/fw.c b/drivers/net/wireless/intel/iwlwifi/mld/fw.c index 9c1dce0d5979..62da137e1024 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/fw.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/fw.c @@ -257,7 +257,7 @@ static int iwl_mld_load_fw_wait_alive(struct iwl_mld *mld) return ret; } -int iwl_mld_run_fw_init_sequence(struct iwl_mld *mld) +static int iwl_mld_run_fw_init_sequence(struct iwl_mld *mld) { struct iwl_notification_wait init_wait; struct iwl_init_extended_cfg_cmd init_cfg = {}; diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mld.h b/drivers/net/wireless/intel/iwlwifi/mld/mld.h index 38f1d1bc5a24..5eceaaf7696d 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mld.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/mld.h @@ -336,7 +336,6 @@ iwl_mld_add_debugfs_files(struct iwl_mld *mld, struct dentry *debugfs_dir) {} #endif -int iwl_mld_run_fw_init_sequence(struct iwl_mld *mld); int iwl_mld_load_fw(struct iwl_mld *mld); void iwl_mld_stop_fw(struct iwl_mld *mld); int iwl_mld_start_fw(struct iwl_mld *mld); From patchwork Wed Mar 12 22:22:35 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14013998 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (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 D4D701F0E5C for ; Wed, 12 Mar 2025 22:23:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818190; cv=none; b=OzMVoHcMd296ARxRvux7xJ/KQz0lWpBXrxsXQFW48h6Qxik8lNoRGtN/u1trSek0DIO0E7Vj9EiJF/p5sSKU5yY+Z15J7Nkye1sCmeBhQa6xpTmrCKd4XX8Uik28swx4Q6vTBEChSTKKz6BSbQjrkrPfQEcxMXpNQwYWSDERnYE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818190; c=relaxed/simple; bh=T+SN5v1bTJW6yNVjHYotiT84weZpKqcq1iyVKIgCeC0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=l+hR5w9S8FsYROj779lLIk/uQgb0v3FxIlymjPNKw4hpfovzTICl5vpLguuFowVtT0p2thaWjLFbhyP0c27dMMnnGvJa7XtA2GEE+ELhUnxyahES2XADuJXC67wrReLeFi36Blgj0vaaCnqH3fcbWIG9JMBwwWUXo9QShBxM+yE= 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=LdURpCnj; arc=none smtp.client-ip=198.175.65.21 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="LdURpCnj" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741818189; x=1773354189; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=T+SN5v1bTJW6yNVjHYotiT84weZpKqcq1iyVKIgCeC0=; b=LdURpCnjBq7a4rxPtbTS9f3ETCudtnOQhVdJWsrVMdGdkHoMg1r/sc7W DgrTuY+apxO21kjJdQCKzfd7Wau//OTvoYw9Jv0/6C2EOCIyHTSm7mBhY PhAJbzQFRmJ8DW9JN6ySOigC+FJFw1vYYbzYBrVYrcApxipbZjc0PwJNs hP9mbS5cDN4pFSi6N6SKkAhGWbH8vpn+/IDvhX5P67QRe2JKduAVhbZKB Ib6E8Qyvqupszp4JPYKEpyCdx430xbLLqfMTUIsqFiopMocjXNUWDJaKm gkcoV698lTh9xulZXIeGJs6DYt5BXqQHr0i1uFemYqInWd7j+ehNyu1QK Q==; X-CSE-ConnectionGUID: mnaCbo8yTqOc01PSeh/Zxw== X-CSE-MsgGUID: vkx6jW+YTD2Ck2PCvOxIlA== X-IronPort-AV: E=McAfee;i="6700,10204,11371"; a="42826760" X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="42826760" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:23:09 -0700 X-CSE-ConnectionGUID: SE3YwXIASiOVyaAHjJ7G9w== X-CSE-MsgGUID: ISnGkQ3LQo2n3st7ko3bNA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="121267401" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:23:07 -0700 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org Subject: [PATCH wireless-next 12/15] wifi: iwlwifi: mld: fix copy/paste error Date: Thu, 13 Mar 2025 00:22:35 +0200 Message-Id: <20250313002008.aabb2232f9dd.I7cb24458a747e8363df2bf1ff848db6a9d472f60@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250312222238.2585340-1-miriam.rachel.korenblit@intel.com> References: <20250312222238.2585340-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 iwl_mld_emlsr_tmp_non_bss_done_wk used the wrong work name (prevent_done_wk) to extract the mld_vif pointer, so the pointer was a wrong one, leading to a page fault. Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/mld/mlo.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mlo.c b/drivers/net/wireless/intel/iwlwifi/mld/mlo.c index dac72644ec78..0f24c2e862c0 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mlo.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/mlo.c @@ -99,7 +99,7 @@ void iwl_mld_emlsr_tmp_non_bss_done_wk(struct wiphy *wiphy, struct wiphy_work *wk) { struct iwl_mld_vif *mld_vif = container_of(wk, struct iwl_mld_vif, - emlsr.prevent_done_wk.work); + emlsr.tmp_non_bss_done_wk.work); struct ieee80211_vif *vif = container_of((void *)mld_vif, struct ieee80211_vif, drv_priv); From patchwork Wed Mar 12 22:22:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14013999 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (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 E03F11F12F1 for ; Wed, 12 Mar 2025 22:23:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818192; cv=none; b=YCB03sdDGpx5MoBUtcR1h3LF9t3vT7A6hV1VOPMmWOdbxdmUVwbWzpEZ4mfK/FHVC0SK1WbvsNvy0ZZSY841UpfcYRsXuitVDVisrg0RnXAYvm6w3MRe6t2sEraCve/TgC6bx9h9x6Z+kUjCI1QWHIwPPvcsRdqQS5l4Pb41Mxs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818192; c=relaxed/simple; bh=sIRrE6KGGfHQ6rScaE1jSw4cK/j2ksVBjKLB8SOpaeM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Y1rwxhWQfaX0pUKppAuANY3dYZPwQ+Vo1B2D6dDeagVuHw/cH0Ou4PVxSRqsoGlQ6DFWh731soVt/1tB9RID1POMbcAl9iE18jZZU7chle/omacg4y+ujjejnlJXur8S+zZf0QYK7dov1M4Rzq4XIONOIlkAVWD7ijcLMrv8fyY= 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=ElCmiQ+9; arc=none smtp.client-ip=198.175.65.21 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="ElCmiQ+9" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741818191; x=1773354191; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=sIRrE6KGGfHQ6rScaE1jSw4cK/j2ksVBjKLB8SOpaeM=; b=ElCmiQ+99TG43fibW6Sgo4SmuPhvv4KJ8dgZyol8B1tyRPEDba9SE11Q 3NkGtQdDnkTzlqNaPjdnKDotzb7xR+wml9Tsdz7kt04HigdvAJm8Do8Bm luNTN7IWJeEFuZUrgronkS/7cDiVpnxbqa4UiCY+3BdjttCY4Oo8xsUdA 5GVkT92+MUSz8wSym2uYGdpvalADxRHlYwkU3SeWUgumUp4UYahY962uf 6HBv2aFvh+Vc7nw+pKTNmegp1YyvVGdBAg2Kt9ihQkkIbwrl0EWtcarpA Z5VNMYoZLSQ07lisg475ro2LSyGBGe8Tspjau5yXdIP6UqiFFSjsv7ayy w==; X-CSE-ConnectionGUID: dZVoQePdS4OIgMAnQKgXuA== X-CSE-MsgGUID: g5XVnfT2Q4CyZPyIPtH3NA== X-IronPort-AV: E=McAfee;i="6700,10204,11371"; a="42826762" X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="42826762" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:23:11 -0700 X-CSE-ConnectionGUID: +/UTvnzAQXa5qxEPU2wZDg== X-CSE-MsgGUID: yNlxKUERQIKZ4DVPcmQYLg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="121267408" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:23:09 -0700 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Benjamin Berg , Emmanuel Grumbach Subject: [PATCH wireless-next 13/15] wifi: iwlwifi: mld: iwl_mld_remove_link can't fail Date: Thu, 13 Mar 2025 00:22:36 +0200 Message-Id: <20250313002008.16fe6ebae412.If5371ff7e096b7078ff9e98ff0e72010cd1f076d@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250312222238.2585340-1-miriam.rachel.korenblit@intel.com> References: <20250312222238.2585340-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 iwl_mld_remove_link removes the link from both the FW and from the driver. If removing it from the FW failed, we assume that the FW is dead anyway and remove it from the driver as well. On the other hand, we still return an error value, indicating the caller (i.e. mac80211) that the link couldn't be removed - while it was actually removed. Later, mac80211 might tell the driver again to remove that link, and then the driver will warn that it doesn't exist. Fix this by making iwl_mld_remove_link a void function. Signed-off-by: Miri Korenblit Reviewed-by: Benjamin Berg Reviewed-by: Emmanuel Grumbach --- drivers/net/wireless/intel/iwlwifi/mld/link.c | 19 ++++++++----------- drivers/net/wireless/intel/iwlwifi/mld/link.h | 4 ++-- .../net/wireless/intel/iwlwifi/mld/mac80211.c | 9 ++------- 3 files changed, 12 insertions(+), 20 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/link.c b/drivers/net/wireless/intel/iwlwifi/mld/link.c index 6db8b5305349..82a4979a3af3 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/link.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/link.c @@ -455,7 +455,7 @@ void iwl_mld_deactivate_link(struct iwl_mld *mld, mld_link->fw_id); } -static int +static void iwl_mld_rm_link_from_fw(struct iwl_mld *mld, struct ieee80211_bss_conf *link) { struct iwl_mld_link *mld_link = iwl_mld_link_from_mac80211(link); @@ -464,13 +464,13 @@ iwl_mld_rm_link_from_fw(struct iwl_mld *mld, struct ieee80211_bss_conf *link) lockdep_assert_wiphy(mld->wiphy); if (WARN_ON(!mld_link)) - return -EINVAL; + return; cmd.link_id = cpu_to_le32(mld_link->fw_id); cmd.spec_link_id = link->link_id; cmd.phy_id = cpu_to_le32(FW_CTXT_ID_INVALID); - return iwl_mld_send_link_cmd(mld, &cmd, FW_CTXT_ACTION_REMOVE); + iwl_mld_send_link_cmd(mld, &cmd, FW_CTXT_ACTION_REMOVE); } static void iwl_mld_omi_bw_update(struct iwl_mld *mld, @@ -832,18 +832,17 @@ int iwl_mld_add_link(struct iwl_mld *mld, } /* Remove link from fw, unmap the bss_conf, and destroy the link structure */ -int iwl_mld_remove_link(struct iwl_mld *mld, - struct ieee80211_bss_conf *bss_conf) +void iwl_mld_remove_link(struct iwl_mld *mld, + struct ieee80211_bss_conf *bss_conf) { struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(bss_conf->vif); struct iwl_mld_link *link = iwl_mld_link_from_mac80211(bss_conf); bool is_deflink = link == &mld_vif->deflink; - int ret; if (WARN_ON(!link || link->active)) - return -EINVAL; + return; - ret = iwl_mld_rm_link_from_fw(mld, bss_conf); + iwl_mld_rm_link_from_fw(mld, bss_conf); /* Continue cleanup on failure */ if (!is_deflink) @@ -854,11 +853,9 @@ int iwl_mld_remove_link(struct iwl_mld *mld, wiphy_delayed_work_cancel(mld->wiphy, &link->rx_omi.finished_work); if (WARN_ON(link->fw_id >= mld->fw->ucode_capa.num_links)) - return -EINVAL; + return; RCU_INIT_POINTER(mld->fw_id_to_bss_conf[link->fw_id], NULL); - - return ret; } void iwl_mld_handle_missed_beacon_notif(struct iwl_mld *mld, diff --git a/drivers/net/wireless/intel/iwlwifi/mld/link.h b/drivers/net/wireless/intel/iwlwifi/mld/link.h index 3a4f3ac990d7..42b7bdcbd741 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/link.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/link.h @@ -114,8 +114,8 @@ iwl_mld_cleanup_link(struct iwl_mld *mld, struct iwl_mld_link *link) int iwl_mld_add_link(struct iwl_mld *mld, struct ieee80211_bss_conf *bss_conf); -int iwl_mld_remove_link(struct iwl_mld *mld, - struct ieee80211_bss_conf *bss_conf); +void iwl_mld_remove_link(struct iwl_mld *mld, + struct ieee80211_bss_conf *bss_conf); int iwl_mld_activate_link(struct iwl_mld *mld, struct ieee80211_bss_conf *link); void iwl_mld_deactivate_link(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 938cf5900a29..6851064b82da 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c @@ -2456,13 +2456,8 @@ iwl_mld_change_vif_links(struct ieee80211_hw *hw, added |= BIT(0); for (int i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++) { - if (removed & BIT(i)) { - link_conf = old[i]; - - err = iwl_mld_remove_link(mld, link_conf); - if (err) - return err; - } + if (removed & BIT(i)) + iwl_mld_remove_link(mld, old[i]); } for (int i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++) { From patchwork Wed Mar 12 22:22:37 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14014000 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (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 41D074685 for ; Wed, 12 Mar 2025 22:23:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818193; cv=none; b=qoPE2EVLo5i7jUvZNXmAt12ND5R9Ke9kQqErS+LvOoA9lqYDiLshZUk5khCj98tH6/GomQI/Reje4gHHAdqwnYObUT6/aST8lLWs3b+N0cYPkIcdqvq6/eikOdsCTauKK/pD209lq5zUrFf0EGN1CPZMVC9vfdY/m79FQBXbEjg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818193; c=relaxed/simple; bh=j99Cc8/8NDbZkAoHh9Gt/3Nl+XnHUeJwDRUGXT4vfo8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=XtccXxrDVKHZgpcOQQ1l6EomQWWiI+ZYQqrCLVZqlf4tKl5//bMSEQM7ljP4ZxpsizJJLIQZzIAmcNDXZG2btHskFpabCvayRjMBrU5RQqvcOieyoz5eadqQz8lEI3xYlhgV+o0EueghI2mj+gY0hx5BshzJjHA7VnjVjdFSQqc= 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=JZOP/TC+; arc=none smtp.client-ip=198.175.65.21 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="JZOP/TC+" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741818193; x=1773354193; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=j99Cc8/8NDbZkAoHh9Gt/3Nl+XnHUeJwDRUGXT4vfo8=; b=JZOP/TC+dHpbwA8UJtRGVTah0WGtZFRW7q54m8GFBgj0VsfKYu/EQAKY EIPOTuK1CzoS4gU4yu0dLpUBVbL5rG/9zl0tcoZ+caGQezz6CnUUkZNt/ WqdwEpig/QxQyeAG4+4gkFyHq9tcOVOsTsn3mGFqf18wC2caM488bDjal zW7J04EblO/WgmSpojvVPtSwiT2mt1uj45vsl0XHwjcmVJWOJItNLvl2P +LtSHjbFl+JfByjIv9g2qr+ucLWiToatLe3wOV+ZMEgPSGY10oeqGwUsH rx4AcmYwylamHf1MyDl/EmPU43uS26DYOBDZK+Bym8k8TTXSRjYEcnHBj A==; X-CSE-ConnectionGUID: +3EO86dQRoKdTRzyv7ihmw== X-CSE-MsgGUID: IqEQ0gS1RoC68yh61/mwYw== X-IronPort-AV: E=McAfee;i="6700,10204,11371"; a="42826764" X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="42826764" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:23:12 -0700 X-CSE-ConnectionGUID: U7O5RPqlQ3mYZ2FZXs9+yQ== X-CSE-MsgGUID: t6oqTcvbRiGsDO5dYtpNbQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="121267417" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:23:10 -0700 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Emmanuel Grumbach Subject: [PATCH wireless-next 14/15] wifi: iwlwifi: mld: we support v6 of compressed_ba_notif Date: Thu, 13 Mar 2025 00:22:37 +0200 Message-Id: <20250313002008.f3b668f41de7.Ib8d984c7158bf286adfb6d343955ff5f95b51d52@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250312222238.2585340-1-miriam.rachel.korenblit@intel.com> References: <20250312222238.2585340-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: Emmanuel Grumbach It just added a field that we don't use. Claim support for this new version. Signed-off-by: Emmanuel Grumbach Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/mld/notif.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/notif.c b/drivers/net/wireless/intel/iwlwifi/mld/notif.c index 06caedf9b0ba..fc18cba8aaa8 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/notif.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/notif.c @@ -347,7 +347,8 @@ CMD_VERSIONS(missed_beacon_notif, CMD_VERSIONS(tx_resp_notif, CMD_VER_ENTRY(8, iwl_tx_resp)) CMD_VERSIONS(compressed_ba_notif, - CMD_VER_ENTRY(5, iwl_compressed_ba_notif)) + CMD_VER_ENTRY(5, iwl_compressed_ba_notif) + CMD_VER_ENTRY(6, iwl_compressed_ba_notif)) CMD_VERSIONS(tlc_notif, CMD_VER_ENTRY(3, iwl_tlc_update_notif)) CMD_VERSIONS(mu_mimo_grp_notif, From patchwork Wed Mar 12 22:22:38 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 14014001 X-Patchwork-Delegate: johannes@sipsolutions.net Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (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 85C601F1303 for ; Wed, 12 Mar 2025 22:23:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818195; cv=none; b=SfR5qpR9i6isRcpXZB9z1UvHjvacoIutx5hAR/mKpG8v69aw9+W5hfF4T3OiarIxRzQf6T0MB2sAIZld/TKUDFNBzM73oKijtOzo4e2VFb113IEjT+jGj1jbSXPj/3rm+n+Ok+s6A4KQrJcr1mlBY60Tl9famOVRZSceLR+ElYY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741818195; c=relaxed/simple; bh=nUJrgbt9yEie7xuh9pvrPjNNC4swWBQVnPgjyyt/9/Y=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=E1tr+m70KRMIiQDsXLUXqoUuVal16/H+XyZvwUCp8WnFb+SqBSTvHTNS8XrTYGLlDuvaXEBKQ+PLnFXnRdHqTXIKA1R4UvgsUOAlQBDKa+l2fjfViRGawdCEPAmDtbMWstsWr8PgwYUssLTqJGqq0sRM/UTp9vuZChmvxTKpRmA= 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=OHB+vPxc; arc=none smtp.client-ip=198.175.65.21 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="OHB+vPxc" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741818194; x=1773354194; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=nUJrgbt9yEie7xuh9pvrPjNNC4swWBQVnPgjyyt/9/Y=; b=OHB+vPxcTbqPNUq+IevIFmxzfQpHIYiF9RT0PuR7dfe0oKt0FFI8nm3j MtRcZv7A3A95eGmORCw37FOpZasBkVtBfqdVkdR0DDqUHtWTs6e+1qpWf /gnW/AIdCEeVvZGqpz4sGZpD4QAM74BkuwQjsc13ALHWd7+wg3XbdivT9 4yGf8b6hRkNXIdLQuI4P/Wi5RZtCWalnuTQLvGxo5nk73X5D0cKRKO4N4 lGiTAqw1MXNx6afLOJh4BEXjR3dNNIEaFB6n41pE7ngrQBTCXky8YCc8Z d92w+Ft6afu1amFlFg3hVgHpnmz8oDWhYuhzLjEiOjRBFLwHnObrSsrsi g==; X-CSE-ConnectionGUID: /dlaVGgKT1qEX8VPBgJNtw== X-CSE-MsgGUID: grDSDU/dSFSypbCe8KWLJA== X-IronPort-AV: E=McAfee;i="6700,10204,11371"; a="42826768" X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="42826768" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:23:14 -0700 X-CSE-ConnectionGUID: p6SmO6RiRCCqo4ddSdnMsw== X-CSE-MsgGUID: 1zIfUYOSTPCam+Dbx/HiLw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,242,1736841600"; d="scan'208";a="121267429" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 15:23:12 -0700 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Benjamin Berg Subject: [PATCH wireless-next 15/15] wifi: iwlwifi: mld: add debugfs to control MLO scan Date: Thu, 13 Mar 2025 00:22:38 +0200 Message-Id: <20250313002008.1a1c2d285336.I5163ceb97ac797e3cf00badf79b9aa9355d7327d@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250312222238.2585340-1-miriam.rachel.korenblit@intel.com> References: <20250312222238.2585340-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 Add a debugfs entry to start/stop an MLO scan. This is required for testing. Signed-off-by: Miri Korenblit Reviewed-by: Benjamin Berg --- .../net/wireless/intel/iwlwifi/mld/debugfs.c | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/debugfs.c b/drivers/net/wireless/intel/iwlwifi/mld/debugfs.c index 14330daa6d13..453ce2ba39d1 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/debugfs.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/debugfs.c @@ -14,6 +14,7 @@ #include "notif.h" #include "ap.h" #include "iwl-utils.h" +#include "scan.h" #ifdef CONFIG_THERMAL #include "thermal.h" #endif @@ -901,6 +902,33 @@ iwl_dbgfs_vif_twt_operation_write(struct iwl_mld *mld, char *buf, size_t count, VIF_DEBUGFS_WRITE_FILE_OPS(twt_operation, 256); +static ssize_t iwl_dbgfs_vif_int_mlo_scan_write(struct iwl_mld *mld, char *buf, + size_t count, void *data) +{ + struct ieee80211_vif *vif = data; + u32 action; + int ret; + + if (!vif->cfg.assoc || !ieee80211_vif_is_mld(vif)) + return -EINVAL; + + if (kstrtou32(buf, 0, &action)) + return -EINVAL; + + if (action == 0) { + ret = iwl_mld_scan_stop(mld, IWL_MLD_SCAN_INT_MLO, false); + } else if (action == 1) { + iwl_mld_int_mlo_scan(mld, vif); + ret = 0; + } else { + ret = -EINVAL; + } + + return ret ?: count; +} + +VIF_DEBUGFS_WRITE_FILE_OPS(int_mlo_scan, 32); + void iwl_mld_add_vif_debugfs(struct ieee80211_hw *hw, struct ieee80211_vif *vif) { @@ -939,8 +967,8 @@ void iwl_mld_add_vif_debugfs(struct ieee80211_hw *hw, VIF_DEBUGFS_ADD_FILE(low_latency, mld_vif_dbgfs, 0600); VIF_DEBUGFS_ADD_FILE(twt_setup, mld_vif_dbgfs, 0200); VIF_DEBUGFS_ADD_FILE(twt_operation, mld_vif_dbgfs, 0200); + VIF_DEBUGFS_ADD_FILE(int_mlo_scan, mld_vif_dbgfs, 0200); } - #define LINK_DEBUGFS_WRITE_FILE_OPS(name, bufsz) \ WIPHY_DEBUGFS_WRITE_FILE_OPS(link_##name, bufsz, bss_conf)