From patchwork Sun Feb 9 12:34:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 864054 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.10]) (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 E68541E522 for ; Sun, 9 Feb 2025 12:35:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.10 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739104513; cv=none; b=EGmP5ZwfZ94Zq/+uGEeJuc9DT1q/uJFbpLgmE3VLw1WUPDNDBIT7AieseTvnu3EAy/NIecpemT9rBuxPV9tHtNP2cB4hMhJMKOZKRkdWo/SLOBZMlwYzXuUUIEP1VzqlAzAFgQtKO6QmPtwWuGO1ld3JXs/1IuR1NF5/kHux9eE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739104513; c=relaxed/simple; bh=hdkIGlsnICz2snWfPuikGBreRjs/R6Z4WJCl7hlg5tU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Uc45ZISKSsN/q+nM25h8DkpXfREFCthyn+M/YT7YS3cJta1tz/kUJQpRe6qP3yxhPr+KBFph8VgGJdr1LLW4RmQeykpNVkjX4iVXUT+E0U5QLo89C/mI9PLuawvt/Gv8KCrgu34Hvb6Q10clq+3bkuO36nXWeEnrjTEl+VbVNzk= 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=ZENKoijH; arc=none smtp.client-ip=192.198.163.10 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="ZENKoijH" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1739104512; x=1770640512; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=hdkIGlsnICz2snWfPuikGBreRjs/R6Z4WJCl7hlg5tU=; b=ZENKoijHXFBWsRdF9+lDbvvEF2H02kzrI+NRAkJ7ODT3pXKsCDo2LOw2 oTiJOggMS7bbhC/kIyidqDEBbztCaLde+UVobOaPr8YUce3onsR7Nsch9 f5aCIF19RbXHTh0IKjutS2LBWzWEeKBF2MZtUGPwd1/aRvgZPMKFYSFOY k/bC3SdYonjUpAh2vAWWWQCNRONZf36Jcq7x7t4T77TRLESLUIGxRa1BM 1g+r4/8lQMsmzP/s67V5IpM3fPVPpKcFHhHadln4vBetyAJKh2uH9CXwE E6tKpnikHqeY9i3bWBymaCviQ1VQYKQPKWC2sk5gnML7OSwnC+exqoEtN A==; X-CSE-ConnectionGUID: kkrI0RQaTnC/e95WZh2qng== X-CSE-MsgGUID: kcUSHrN0Ruy1ncXh/4kcCQ== X-IronPort-AV: E=McAfee;i="6700,10204,11314"; a="51125970" X-IronPort-AV: E=Sophos;i="6.12,310,1728975600"; d="scan'208";a="51125970" Received: from orviesa010.jf.intel.com ([10.64.159.150]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Feb 2025 04:35:11 -0800 X-CSE-ConnectionGUID: JyH6gTH/RROst+G2mCfIZQ== X-CSE-MsgGUID: 70pCRVe2QQqzQrY/VCF1NA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.12,224,1728975600"; d="scan'208";a="111782399" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa010-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Feb 2025 04:35:10 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Johannes Berg Subject: [PATCH 1/9] wifi: iwlwifi: fw: allocate chained SG tables for dump Date: Sun, 9 Feb 2025 14:34:45 +0200 Message-Id: <20250209143303.697c7a465ac9.Iea982df46b5c075bfb77ade36f187d99a70c63db@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250209123453.2010013-1-miriam.rachel.korenblit@intel.com> References: <20250209123453.2010013-1-miriam.rachel.korenblit@intel.com> Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Israel (74) Limited From: Johannes Berg The firmware dumps can be pretty big, and since we use single pages for each SG table entry, even the table itself may end up being an order-5 allocation. Build chained tables so that we need not allocate a higher-order table here. This could be improved and cleaned up, e.g. by using the SG pool code or simply kvmalloc(), but all of that would require also updating the devcoredump first since that frees it all, so we need to be more careful. SG pool might also run against the CONFIG_ARCH_NO_SG_CHAIN limitation, which is irrelevant here. Also use _devcd_free_sgtable() for the error paths now, much simpler especially since it's in two places now. Signed-off-by: Johannes Berg Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/fw/dbg.c | 86 ++++++++++++++------- 1 file changed, 58 insertions(+), 28 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c index fb2ea38e89ac..6594216f873c 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c +++ b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c @@ -558,41 +558,71 @@ static void iwl_dump_prph(struct iwl_fw_runtime *fwrt, } /* - * alloc_sgtable - allocates scallerlist table in the given size, - * fills it with pages and returns it + * alloc_sgtable - allocates (chained) scatterlist in the given size, + * fills it with pages and returns it * @size: the size (in bytes) of the table -*/ -static struct scatterlist *alloc_sgtable(int size) + */ +static struct scatterlist *alloc_sgtable(ssize_t size) { - int alloc_size, nents, i; - struct page *new_page; - struct scatterlist *iter; - struct scatterlist *table; + struct scatterlist *result = NULL, *prev; + int nents, i, n_prev; nents = DIV_ROUND_UP(size, PAGE_SIZE); - table = kcalloc(nents, sizeof(*table), GFP_KERNEL); - if (!table) - return NULL; - sg_init_table(table, nents); - iter = table; - for_each_sg(table, iter, sg_nents(table), i) { - new_page = alloc_page(GFP_KERNEL); - if (!new_page) { - /* release all previous allocated pages in the table */ - iter = table; - for_each_sg(table, iter, sg_nents(table), i) { - new_page = sg_page(iter); - if (new_page) - __free_page(new_page); - } - kfree(table); + +#define N_ENTRIES_PER_PAGE (PAGE_SIZE / sizeof(*result)) + /* + * We need an additional entry for table chaining, + * this ensures the loop can finish i.e. we can + * fit at least two entries per page (obviously, + * many more really fit.) + */ + BUILD_BUG_ON(N_ENTRIES_PER_PAGE < 2); + + while (nents > 0) { + struct scatterlist *new, *iter; + int n_fill, n_alloc; + + if (nents <= N_ENTRIES_PER_PAGE) { + /* last needed table */ + n_fill = nents; + n_alloc = nents; + nents = 0; + } else { + /* fill a page with entries */ + n_alloc = N_ENTRIES_PER_PAGE; + /* reserve one for chaining */ + n_fill = n_alloc - 1; + nents -= n_fill; + } + + new = kcalloc(n_alloc, sizeof(*new), GFP_KERNEL); + if (!new) { + if (result) + _devcd_free_sgtable(result); return NULL; } - alloc_size = min_t(int, size, PAGE_SIZE); - size -= PAGE_SIZE; - sg_set_page(iter, new_page, alloc_size, 0); + sg_init_table(new, n_alloc); + + if (!result) + result = new; + else + sg_chain(prev, n_prev, new); + prev = new; + n_prev = n_alloc; + + for_each_sg(new, iter, n_fill, i) { + struct page *new_page = alloc_page(GFP_KERNEL); + + if (!new_page) { + _devcd_free_sgtable(result); + return NULL; + } + + sg_set_page(iter, new_page, PAGE_SIZE, 0); + } } - return table; + + return result; } static void iwl_fw_get_prph_len(struct iwl_fw_runtime *fwrt, From patchwork Sun Feb 9 12:34:46 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 863741 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.10]) (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 CFE381D47B5 for ; Sun, 9 Feb 2025 12:35:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.10 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739104516; cv=none; b=kCv/kkpZ1oOji/UrD6xO3qJ2h0jA4ea2/3rzkhkTX9YHHi+V0SWcds/NjG8GH7H3gQpZqU9aq0KPNPamAKb0O7VU+LqlVfJf1+86UDuoS+zKqs+1i1fHEYAd7uLwgR7UNwlSxCw5TzS9oOvFSkmSqS4KOc0v72inWGepMQUuk8w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739104516; c=relaxed/simple; bh=bGeJ1aIpY8w5LCmWGXcaIKofr/okufkfaJ5rDj1HicQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=PPkHLkncYg294oRkpB20BXxEvFGFYclNCsBdm2Qu22H/3xxNBQPv78LHMb8z94cFkDyDtnfmzUvUBYqD9O3O+gOQF4e+WJHHQkp2XSxsVnTHskufanp9r3Iy8WTNqWVeoLT0nIDYRNPb1oGUEoGIjm7G7kC8duBZwIhnQ1fBEyY= 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=J4YCk4mL; arc=none smtp.client-ip=192.198.163.10 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="J4YCk4mL" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1739104513; x=1770640513; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=bGeJ1aIpY8w5LCmWGXcaIKofr/okufkfaJ5rDj1HicQ=; b=J4YCk4mL/xip9eZ0y1dPO/aorrBd6NyuLFXaKjGc5KanupWfSt2a58Qa J5S/kHOdg2Le3Kjm0peF8VbwFXwWFXaMM3cGjt1yChMy8mC4fGBbYhnsm 3lSDu/TOIVLI4REaznM9l7VapnwuF8ONexUjCjiuiz2Q3ZP9AMKEJV1xU vcFRAeUrPTnejuvJ7l1EuxBAxK77QC8WneaWOedvRcnfIhVQDH8zsleuU e2ywSy0rfHADodZ33l4PAkT5Aox1WAtzrw6PSN61FAkTSET7EAF15DPfm KIrkQrAqSm5nlz4vN0hXt1E1kicpiNX1nCJrj8y6nY6cTj78hHtdOln1/ Q==; X-CSE-ConnectionGUID: Umf6hVvLQ0y7F7Ae5qzUsQ== X-CSE-MsgGUID: hXbA/vcIT+K6fKwAiNFYzw== X-IronPort-AV: E=McAfee;i="6700,10204,11314"; a="51125973" X-IronPort-AV: E=Sophos;i="6.12,310,1728975600"; d="scan'208";a="51125973" Received: from orviesa010.jf.intel.com ([10.64.159.150]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Feb 2025 04:35:12 -0800 X-CSE-ConnectionGUID: dQuJcf0ySXisQE6w7TIgWg== X-CSE-MsgGUID: tI/61LrvR3Sf2S+a9Rc3GQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.12,224,1728975600"; d="scan'208";a="111782403" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa010-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Feb 2025 04:35:11 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Emmanuel Grumbach Subject: [PATCH 2/9] wifi: iwlwifi: fw: avoid using an uninitialized variable Date: Sun, 9 Feb 2025 14:34:46 +0200 Message-Id: <20250209143303.37cdbba4eb56.I95fe9bd95303b8179f946766558a9f15f4fe254c@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250209123453.2010013-1-miriam.rachel.korenblit@intel.com> References: <20250209123453.2010013-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_fwrt_read_err_table can return true also when it failed to read the memory. In this case, err_id argument is not initialized, but the callers are still using it. Simply initialize it to 0. If the error table was read successfully it'll be overridden. Fixes: 43e0b2ada519 ("wifi: iwlwifi: fw: add an error table status getter") Signed-off-by: Miri Korenblit Reviewed-by: Emmanuel Grumbach --- drivers/net/wireless/intel/iwlwifi/fw/dump.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/wireless/intel/iwlwifi/fw/dump.c b/drivers/net/wireless/intel/iwlwifi/fw/dump.c index 8e0c85a1240d..c7b261c8ec96 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/dump.c +++ b/drivers/net/wireless/intel/iwlwifi/fw/dump.c @@ -540,6 +540,9 @@ bool iwl_fwrt_read_err_table(struct iwl_trans *trans, u32 base, u32 *err_id) } err_info = {}; int ret; + if (err_id) + *err_id = 0; + if (!base) return false; From patchwork Sun Feb 9 12:34:47 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 864053 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.10]) (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 C78241DDA17 for ; Sun, 9 Feb 2025 12:35:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.10 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739104516; cv=none; b=OTfE/tdSwMCmrNlQg4qhlcSW/5QgM1YZ8o3DgnACLuu3QkfCmtAiCXigJZOLhMRki8iSFAyPhUrzliczbjEsI5Kn6WMuimi8d9EisZRseRk3bB+/6ySAGnErWmcJfbTz9AJAV50Vt2wK8yuOEw3TP3IuRIhbL7iwYyeAUlYk/Fs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739104516; c=relaxed/simple; bh=l2k7HII3YGdwO7uoO7U2yXSbk6HJDNo9+5z1a2AXj5Y=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=LS7lZl1g/WNzOoMHFM+YM04bXEhLsCPQXIutug73GxQM5Uh8e5lE5qi+3vYlYdEWh2Ns5w9wIUCZ9tQZ2kGmACbfRy6jVwz279KsjZVY6eJ87PjX+ntZbTFWqe0fCszc/Kb7SV0CquuQoZJylQP0wHVwBiJoqnzeWQ3tTKkzokA= 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=PpedIIbL; arc=none smtp.client-ip=192.198.163.10 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="PpedIIbL" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1739104515; x=1770640515; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=l2k7HII3YGdwO7uoO7U2yXSbk6HJDNo9+5z1a2AXj5Y=; b=PpedIIbLPwCqz/8d8db2vKUpLCgd1AEM4sa9ElpDiycuNjWocfZ7P23g uLFY3GvReqFmX+bRipUh/RRQHDbpJvidliniuWKaizAdFuFZqmzoO+XIg tk/0bCDkS9SfdF39vBsaEKe5sEAlpNxz9tYXIaNaMN8KWz9xxAF8NEq2Q 4Tw7eWxTcC2XRbxEz0ZWRXMyaUUdNmsnHkcJgNzlGcMdH8dNWqhSGuyvI e9cql0/C2IOAanB42uCOz4DRRR3IBXeu+un9U2EyjNGqky50xhQYWVLU1 BJezAw4Hd7BUsrKCh9+J0Y+pNZQUh9sC2ytbix8od7G4vwbhCVSzI1F9P Q==; X-CSE-ConnectionGUID: W9E29l6LQ3mesQV3DmkZ7Q== X-CSE-MsgGUID: rf1FCsqZTRSRhVHcBmhP/w== X-IronPort-AV: E=McAfee;i="6700,10204,11314"; a="51125976" X-IronPort-AV: E=Sophos;i="6.12,310,1728975600"; d="scan'208";a="51125976" Received: from orviesa010.jf.intel.com ([10.64.159.150]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Feb 2025 04:35:14 -0800 X-CSE-ConnectionGUID: z0HIb6zaQMmoAiTVPOohOA== X-CSE-MsgGUID: /7mF8LTHQJyjy/RaT0V0lw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.12,224,1728975600"; d="scan'208";a="111782419" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa010-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Feb 2025 04:35:13 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Johannes Berg , Emmanuel Grumbach Subject: [PATCH 3/9] wifi: iwlwifi: mvm: clean up ROC on failure Date: Sun, 9 Feb 2025 14:34:47 +0200 Message-Id: <20250209143303.0fe36c291068.I67f5dac742170dd937f11e4d4f937f45f71b7cb4@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250209123453.2010013-1-miriam.rachel.korenblit@intel.com> References: <20250209123453.2010013-1-miriam.rachel.korenblit@intel.com> Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Israel (74) Limited From: Johannes Berg If the firmware fails to start the session protection, then we do call iwl_mvm_roc_finished() here, but that won't do anything at all because IWL_MVM_STATUS_ROC_P2P_RUNNING was never set. Set IWL_MVM_STATUS_ROC_P2P_RUNNING in the failure/stop path. If it started successfully before, it's already set, so that doesn't matter, and if it didn't start it needs to be set to clean up. Not doing so will lead to a WARN_ON() later on a fresh remain- on-channel, since the link is already active when activated as it was never deactivated. Fixes: 35c1bbd93c4e ("wifi: iwlwifi: mvm: remove IWL_MVM_STATUS_NEED_FLUSH_P2P") Signed-off-by: Johannes Berg Reviewed-by: Emmanuel Grumbach Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/mvm/time-event.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c b/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c index 9216c43a35c4..ebfa88b38b71 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c @@ -1030,6 +1030,8 @@ void iwl_mvm_rx_session_protect_notif(struct iwl_mvm *mvm, /* End TE, notify mac80211 */ mvmvif->time_event_data.id = SESSION_PROTECT_CONF_MAX_ID; mvmvif->time_event_data.link_id = -1; + /* set the bit so the ROC cleanup will actually clean up */ + set_bit(IWL_MVM_STATUS_ROC_P2P_RUNNING, &mvm->status); iwl_mvm_roc_finished(mvm); ieee80211_remain_on_channel_expired(mvm->hw); } else if (le32_to_cpu(notif->start)) { From patchwork Sun Feb 9 12:34:48 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 863740 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.10]) (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 7B4DE1DDC22 for ; Sun, 9 Feb 2025 12:35:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.10 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739104518; cv=none; b=vCp5cA4u3vmeJ6Kkbb0A3FJhjibbifYNOJP7hz210210UnGH2Y2rORp7X5c5X4RrP9v31p6MJ+T7yNKGhaUaQwdESGOcVNaivfsWqJMpE+ELb0i1NZuiaClXt6HCKLzGYf36SFmUdq+qjap2VgLhf06KYuReg3swXrTXkxwQ27E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739104518; c=relaxed/simple; bh=n0tWg4GTE4cf8DbWgrNpF0LwkF+vjQb3zR3ZS1aBqgQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=rsJXDD1us82OSY6eqJt3uZcnlIZSR6g+PJraqGSC0H95r0XH6bG3KQpckvC2Qyl8kazFuj12ZKwe7/LIlN2uRnbjsPkOTL71AuuhtI8DtZ2gQViqbafQ9ssJRx78PswOiLE0Dh9LnuncVyoAaCw78qZZmXETFziZ+SZP1FmuQBY= 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=cmLA7i0K; arc=none smtp.client-ip=192.198.163.10 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="cmLA7i0K" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1739104516; x=1770640516; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=n0tWg4GTE4cf8DbWgrNpF0LwkF+vjQb3zR3ZS1aBqgQ=; b=cmLA7i0KFAY7MDfntppOD0AuvcJASFUCn2iOlb4iOG/T40rcO/hGuJPK fcCbXrvmbVB215/TvsnE6zKXXI51t815gRDpHHmEC5I6h9qq5ZNsEdaD7 FuSphhp2dTaBdAcukoBeuXuNIyy2Wsyzp9ILOtC/b1LBTKul7wz+x1CYp JQV2t6sRtYVEqKavEpLp2TZSX4GEz07raC8zQApf+xNnBiGoNK2gdM1/G dhRTz/g9aOmLDpQsbclp/1nROV0MA6n+vWmUVeTAUbPaI2zY6vA/exjv5 f+S9MmG9yeLPJfz4o8PJhWmOIGl8vb6pRAkLGxGM7Y2VpJBbrKIele1ax w==; X-CSE-ConnectionGUID: Yui+4flZTfmpAPyZlQbQAA== X-CSE-MsgGUID: Y+2+A8o5S4GKsBTrmYq6Wg== X-IronPort-AV: E=McAfee;i="6700,10204,11314"; a="51125978" X-IronPort-AV: E=Sophos;i="6.12,310,1728975600"; d="scan'208";a="51125978" Received: from orviesa010.jf.intel.com ([10.64.159.150]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Feb 2025 04:35:16 -0800 X-CSE-ConnectionGUID: 2zs6FeN9Qn+y3C81F6wJMw== X-CSE-MsgGUID: LlPqzDJ/Q3e8Lp7fBPdmCQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.12,224,1728975600"; d="scan'208";a="111782440" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa010-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Feb 2025 04:35:15 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Emmanuel Grumbach Subject: [PATCH 4/9] wifi: iwlwifi: mvm: don't dump the firmware state upon RFKILL while suspend Date: Sun, 9 Feb 2025 14:34:48 +0200 Message-Id: <20250209143303.a10463a40318.I14131781c3124b58e60e1f5e9d793a2bc88b464c@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250209123453.2010013-1-miriam.rachel.korenblit@intel.com> References: <20250209123453.2010013-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 This is not really a firmware error. We need to reload the firmware, but this doesn't mean that we should consider this as a firmware error. When the firmware was restarted upon resume, this wasn't felt by the driver. Now that we keep the firmware running during suspend even if we don't have wowlan, this started to pop-up. Fixes: e8bb19c1d590 ("wifi: iwlwifi: support fast resume") Signed-off-by: Emmanuel Grumbach Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/mvm/d3.c | 77 ++++++++++++++------- 1 file changed, 51 insertions(+), 26 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/d3.c b/drivers/net/wireless/intel/iwlwifi/mvm/d3.c index 129b6bdf9ef9..82ca7f8b1bb2 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/d3.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/d3.c @@ -3092,8 +3092,14 @@ static void iwl_mvm_d3_disconnect_iter(void *data, u8 *mac, ieee80211_resume_disconnect(vif); } -static bool iwl_mvm_check_rt_status(struct iwl_mvm *mvm, - struct ieee80211_vif *vif) +enum rt_status { + FW_ALIVE, + FW_NEEDS_RESET, + FW_ERROR, +}; + +static enum rt_status iwl_mvm_check_rt_status(struct iwl_mvm *mvm, + struct ieee80211_vif *vif) { u32 err_id; @@ -3101,29 +3107,35 @@ static bool iwl_mvm_check_rt_status(struct iwl_mvm *mvm, if (iwl_fwrt_read_err_table(mvm->trans, mvm->trans->dbg.lmac_error_event_table[0], &err_id)) { - if (err_id == RF_KILL_INDICATOR_FOR_WOWLAN && vif) { - struct cfg80211_wowlan_wakeup wakeup = { - .rfkill_release = true, - }; - ieee80211_report_wowlan_wakeup(vif, &wakeup, - GFP_KERNEL); + if (err_id == RF_KILL_INDICATOR_FOR_WOWLAN) { + IWL_WARN(mvm, "Rfkill was toggled during suspend\n"); + if (vif) { + struct cfg80211_wowlan_wakeup wakeup = { + .rfkill_release = true, + }; + + ieee80211_report_wowlan_wakeup(vif, &wakeup, + GFP_KERNEL); + } + + return FW_NEEDS_RESET; } - return true; + return FW_ERROR; } /* check if we have lmac2 set and check for error */ if (iwl_fwrt_read_err_table(mvm->trans, mvm->trans->dbg.lmac_error_event_table[1], NULL)) - return true; + return FW_ERROR; /* check for umac error */ if (iwl_fwrt_read_err_table(mvm->trans, mvm->trans->dbg.umac_error_event_table, NULL)) - return true; + return FW_ERROR; - return false; + return FW_ALIVE; } /* @@ -3492,6 +3504,7 @@ static int __iwl_mvm_resume(struct iwl_mvm *mvm, bool test) bool d0i3_first = fw_has_capa(&mvm->fw->ucode_capa, IWL_UCODE_TLV_CAPA_D0I3_END_FIRST); bool resume_notif_based = iwl_mvm_d3_resume_notif_based(mvm); + enum rt_status rt_status; bool keep = false; mutex_lock(&mvm->mutex); @@ -3515,14 +3528,19 @@ static int __iwl_mvm_resume(struct iwl_mvm *mvm, bool test) iwl_fw_dbg_read_d3_debug_data(&mvm->fwrt); - if (iwl_mvm_check_rt_status(mvm, vif)) { - IWL_ERR(mvm, "FW Error occurred during suspend. Restarting.\n"); + rt_status = iwl_mvm_check_rt_status(mvm, vif); + if (rt_status != FW_ALIVE) { set_bit(STATUS_FW_ERROR, &mvm->trans->status); - iwl_mvm_dump_nic_error_log(mvm); - iwl_dbg_tlv_time_point(&mvm->fwrt, - IWL_FW_INI_TIME_POINT_FW_ASSERT, NULL); - iwl_fw_dbg_collect_desc(&mvm->fwrt, &iwl_dump_desc_assert, - false, 0); + if (rt_status == FW_ERROR) { + IWL_ERR(mvm, "FW Error occurred during suspend. Restarting.\n"); + iwl_mvm_dump_nic_error_log(mvm); + iwl_dbg_tlv_time_point(&mvm->fwrt, + IWL_FW_INI_TIME_POINT_FW_ASSERT, + NULL); + iwl_fw_dbg_collect_desc(&mvm->fwrt, + &iwl_dump_desc_assert, + false, 0); + } ret = 1; goto err; } @@ -3679,6 +3697,7 @@ int iwl_mvm_fast_resume(struct iwl_mvm *mvm) .notif_expected = IWL_D3_NOTIF_D3_END_NOTIF, }; + enum rt_status rt_status; int ret; lockdep_assert_held(&mvm->mutex); @@ -3688,14 +3707,20 @@ int iwl_mvm_fast_resume(struct iwl_mvm *mvm) mvm->last_reset_or_resume_time_jiffies = jiffies; iwl_fw_dbg_read_d3_debug_data(&mvm->fwrt); - if (iwl_mvm_check_rt_status(mvm, NULL)) { - IWL_ERR(mvm, "FW Error occurred during suspend. Restarting.\n"); + rt_status = iwl_mvm_check_rt_status(mvm, NULL); + if (rt_status != FW_ALIVE) { set_bit(STATUS_FW_ERROR, &mvm->trans->status); - iwl_mvm_dump_nic_error_log(mvm); - iwl_dbg_tlv_time_point(&mvm->fwrt, - IWL_FW_INI_TIME_POINT_FW_ASSERT, NULL); - iwl_fw_dbg_collect_desc(&mvm->fwrt, &iwl_dump_desc_assert, - false, 0); + if (rt_status == FW_ERROR) { + IWL_ERR(mvm, + "iwl_mvm_check_rt_status failed, device is gone during suspend\n"); + iwl_mvm_dump_nic_error_log(mvm); + iwl_dbg_tlv_time_point(&mvm->fwrt, + IWL_FW_INI_TIME_POINT_FW_ASSERT, + NULL); + iwl_fw_dbg_collect_desc(&mvm->fwrt, + &iwl_dump_desc_assert, + false, 0); + } mvm->trans->state = IWL_TRANS_NO_FW; ret = -ENODEV; From patchwork Sun Feb 9 12:34:49 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 864052 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.10]) (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 F140F1CCB40 for ; Sun, 9 Feb 2025 12:35:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.10 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739104519; cv=none; b=fGP+25Cvk20WbfXCg6tnpW//37wQmun6T1mPSZcIGLhNuoynwkDFmJxM3PyirVjHkGnMeZuqj0+SeFjlnJnjSCxX/vG7E6f875wg/49XazJ2tfNjSaP/K200rvlHgZDSyGf8ti22OkwP94jqFt1uV3bAXQkDJRcze1m+57lEYQI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739104519; c=relaxed/simple; bh=KlPm5iWWgWagsIpk4sTL7/2jAggTVN+kQQrBdjYkG5g=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=bdk0H3Y+QuTSAOB0o8gQC4xMccd7cQRDAQj8TI/5/TFLTmZV0TdWbhWafnObYO2sMkHCHO4e+KrOKbhw/xmGs+cpSlDVZEdyUjC5873MvVqozWAFLAC+Rrtplymntg/XuvkYrqPtcExPnZABiWJkORNtRcqsaEc5IC+qMk9xNn8= 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=FshmCKDy; arc=none smtp.client-ip=192.198.163.10 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="FshmCKDy" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1739104518; x=1770640518; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=KlPm5iWWgWagsIpk4sTL7/2jAggTVN+kQQrBdjYkG5g=; b=FshmCKDyOa8RzacEngV/HvhW7T32dKyjUmS9NXRoQti48eMjJyX0OcAH P0y6E++eLnai9btNgZ75QFK2XjF/NTncWkUER6zbC9afeZIRLHqKvtD+s L7zcAoVvIHogHwWz04mZVqE0/Hj59KKIrJn+gAei+dSvq6wcjqRi61bxn MlLzSinttUUpKtc/YvSpYe2yrrIGWCIM6/we2LjPof08J0EMtvx+U7nCo ErtC7Ea+Q4LvU+9z4sMvmCZDpOaSUMVUqInXjvPCgga2XF6SgiW0T639S Y/vMl7bjl6AmO6hbD6On5TqxxSrLZbOsSMPwGpFjufVY7j9y1VeFEcgM6 g==; X-CSE-ConnectionGUID: o+gTmbsCReWQVif+Pqnybg== X-CSE-MsgGUID: CHJHqQZ1TDiE8NtKxtucrg== X-IronPort-AV: E=McAfee;i="6700,10204,11314"; a="51125980" X-IronPort-AV: E=Sophos;i="6.12,310,1728975600"; d="scan'208";a="51125980" Received: from orviesa010.jf.intel.com ([10.64.159.150]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Feb 2025 04:35:18 -0800 X-CSE-ConnectionGUID: lMaqsOo/TY6boPNuP/NvtQ== X-CSE-MsgGUID: PY8ED3FpT0e6pfyQetOVIA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.12,224,1728975600"; d="scan'208";a="111782446" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa010-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Feb 2025 04:35:16 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Emmanuel Grumbach Subject: [PATCH 5/9] wifi: iwlwifi: mvm: don't try to talk to a dead firmware Date: Sun, 9 Feb 2025 14:34:49 +0200 Message-Id: <20250209143303.8e1597b62c70.I12ea71dd9b805b095c9fc12a10c9f34a4e801b61@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250209123453.2010013-1-miriam.rachel.korenblit@intel.com> References: <20250209123453.2010013-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 This fixes: bad state = 0 WARNING: CPU: 10 PID: 702 at drivers/net/wireless/inel/iwlwifi/iwl-trans.c:178 iwl_trans_send_cmd+0xba/0xe0 [iwlwifi] Call Trace: ? __warn+0xca/0x1c0 ? iwl_trans_send_cmd+0xba/0xe0 [iwlwifi 64fa9ad799a0e0d2ba53d4af93a53ad9a531f8d4] iwl_fw_dbg_clear_monitor_buf+0xd7/0x110 [iwlwifi 64fa9ad799a0e0d2ba53d4af93a53ad9a531f8d4] _iwl_dbgfs_fw_dbg_clear_write+0xe2/0x120 [iwlmvm 0e8adb18cea92d2c341766bcc10b18699290068a] Ask whether the firmware is alive before sending a command. Fixes: 268712dc3b34 ("wifi: iwlwifi: mvm: add a debugfs hook to clear the monitor data") Signed-off-by: Emmanuel Grumbach Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c b/drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c index 83e3c1160362..55d035b896e9 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c @@ -1479,6 +1479,13 @@ static ssize_t iwl_dbgfs_fw_dbg_clear_write(struct iwl_mvm *mvm, if (mvm->trans->trans_cfg->device_family < IWL_DEVICE_FAMILY_9000) return -EOPNOTSUPP; + /* + * If the firmware is not running, silently succeed since there is + * no data to clear. + */ + if (!iwl_mvm_firmware_running(mvm)) + return count; + mutex_lock(&mvm->mutex); iwl_fw_dbg_clear_monitor_buf(&mvm->fwrt); mutex_unlock(&mvm->mutex); From patchwork Sun Feb 9 12:34:50 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 863739 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.10]) (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 4E52A1D89E3 for ; Sun, 9 Feb 2025 12:35:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.10 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739104521; cv=none; b=pHWsazqyi1YzL7LtzGwX3i0TBiOVkctsF10PtG6Aj2bMuIGus0CWLt8nsGXSkrMnNGnkl10HgHncObWBLx73lm/DQO6Bys9Po34tgKk+n64ib3vxTdCy4qvkiv46lmNAcAWN7HX7TaejU37dzt+U/IVRnxnqUm2v50Ie+UNm6LQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739104521; c=relaxed/simple; bh=3cF4awjvGGR2OySM+Cv7MqorgjQUtwfWiw7FOGbO22s=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=AbAbGxeY/QoU6HVt1SFwEPoRWzkgj+FcaBMVfYx/Npfsd0j5MbRgdTGNuGtN71S3cIX83t0G+kY69adT5VT/v7kvSIAfV7kqhFTreFMra9NYNh8KyoEeVK0ePJ2NyxheOzdwer52LsSUHwlcxoaaGXPRDyFIeC+3qYxtCRjBcVE= 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=RND8YtXq; arc=none smtp.client-ip=192.198.163.10 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="RND8YtXq" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1739104520; x=1770640520; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=3cF4awjvGGR2OySM+Cv7MqorgjQUtwfWiw7FOGbO22s=; b=RND8YtXqD2xmV5HWsntYoHTe3HnbwR42Jm8zZ+6L/XnHH4dDbJdsSBwK V/dpD3evWGhkmC0X8sRyQkBX8C7Pd6jJ5pBytko0gkn9MmEXez1zTpLtM DVSTQf1pKI+rsD9t6EfThsqTO3/NL3DZYrnrF+0lIHFEvP5IHntbUMzrp Vf7SNJ4kO4/UtqohrrWky3PQuqJsEIXpU1fbuq7aQJgFMbSqd5HdC2ArV HfLg/TU8HUTI1xgVSXx2/jpC5fcvVyi9K5wtWUHW96d9lrJU/40iICWfd qVHFj4Dwnq/gmqdYg6bVEnbnSXsia8bWnNk2BbCVIZJBBhzum9wZLiY4C g==; X-CSE-ConnectionGUID: JfV3GC9cTUWUgFuR3L9+jw== X-CSE-MsgGUID: Vflj025fTd6XGzeIweKY4w== X-IronPort-AV: E=McAfee;i="6700,10204,11314"; a="51125984" X-IronPort-AV: E=Sophos;i="6.12,310,1728975600"; d="scan'208";a="51125984" Received: from orviesa010.jf.intel.com ([10.64.159.150]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Feb 2025 04:35:19 -0800 X-CSE-ConnectionGUID: l4/JWOGqRDK1YSUOVy8NdQ== X-CSE-MsgGUID: +GV97U9FQq+wWHU8/PhYsg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.12,224,1728975600"; d="scan'208";a="111782454" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa010-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Feb 2025 04:35:18 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Emmanuel Grumbach , Johannes Berg Subject: [PATCH 6/9] wifi: iwlwifi: mvm: use the right version of the rate API Date: Sun, 9 Feb 2025 14:34:50 +0200 Message-Id: <20250209143303.13d70cdcbb4e.Ic92193bce4013b70a823cfef250ee79c16cf7c17@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250209123453.2010013-1-miriam.rachel.korenblit@intel.com> References: <20250209123453.2010013-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 The firmware uses the newer version of the API in recent devices. For older devices, we translate the rate to the new format. Don't parse the rate with old parsing macros. Signed-off-by: Emmanuel Grumbach Reviewed-by: Johannes Berg Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c b/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c index 09fd8752046e..14ea89f931bb 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c @@ -995,7 +995,7 @@ iwl_mvm_decode_he_phy_ru_alloc(struct iwl_mvm_rx_phy_data *phy_data, */ u8 ru = le32_get_bits(phy_data->d1, IWL_RX_PHY_DATA1_HE_RU_ALLOC_MASK); u32 rate_n_flags = phy_data->rate_n_flags; - u32 he_type = rate_n_flags & RATE_MCS_HE_TYPE_MSK_V1; + u32 he_type = rate_n_flags & RATE_MCS_HE_TYPE_MSK; u8 offs = 0; rx_status->bw = RATE_INFO_BW_HE_RU; @@ -1050,13 +1050,13 @@ iwl_mvm_decode_he_phy_ru_alloc(struct iwl_mvm_rx_phy_data *phy_data, if (he_mu) he_mu->flags2 |= - le16_encode_bits(FIELD_GET(RATE_MCS_CHAN_WIDTH_MSK_V1, + le16_encode_bits(FIELD_GET(RATE_MCS_CHAN_WIDTH_MSK, rate_n_flags), IEEE80211_RADIOTAP_HE_MU_FLAGS2_BW_FROM_SIG_A_BW); - else if (he_type == RATE_MCS_HE_TYPE_TRIG_V1) + else if (he_type == RATE_MCS_HE_TYPE_TRIG) he->data6 |= cpu_to_le16(IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW_KNOWN) | - le16_encode_bits(FIELD_GET(RATE_MCS_CHAN_WIDTH_MSK_V1, + le16_encode_bits(FIELD_GET(RATE_MCS_CHAN_WIDTH_MSK, rate_n_flags), IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW); } From patchwork Sun Feb 9 12:34:51 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 864051 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.10]) (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 046421DC185 for ; Sun, 9 Feb 2025 12:35:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.10 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739104523; cv=none; b=G+yg8PUSmwWYCs6tZMFoU5nARhS7q5iUHUeHAPRD7uRlTc66aji7Gyol1VAz+5SnAh4y2+l5ttNcv+D+k80NYtpm3opV+nj1m5jYK4BTmEATNhkeNaMjelPEA4vgdHOkVug66I9J7LfvCfrViVWkmTw0njXwkiyfoI1vHT7vBVY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739104523; c=relaxed/simple; bh=o6JcCRkNJU3VVmD3zcdZDHs8mScML9JLHfhd0N26y+k=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=CqkxVUUfs+ebkgHOP4FamuyXnyeVlUZKOqFgfpGq8jGhHcKYNS2zeVYhJHYaVecH/tnLFR+MWFNV3fbWSkzdbzafLGOB3/QrXL8uIqzlwowyC/sJKPRYySmnXj0Xe5NVMQZhV30MubT7chFHUIJ9cFM0Q+n+9aCUas/jSzoV3iU= 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=H8jvunm8; arc=none smtp.client-ip=192.198.163.10 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="H8jvunm8" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1739104522; x=1770640522; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=o6JcCRkNJU3VVmD3zcdZDHs8mScML9JLHfhd0N26y+k=; b=H8jvunm8ZiNljkfJ6JrtfgoALCCVT1mE0Ah28ggx0t4XS5cQrvg/+fQS fl0fLGEI13401v+uol6cKMMpvzAscMqe/t2NL8opDrLn+88505ls56umb CzVKRPRZb75RMLPMONei81TmnpiZZN9EWX1UR9Xvt2xsjVTKwaDx2lD96 6O+IpuolPOnOMQboLMWFlNikWQ6RdHt1GSxYoXil52wdgsKswILkbog3G nfrA8PtyD7oxc+KGO9WGLW/sXC5G/d+fSOxmqzXws7cGQMYPOt/a01GGk +ofkDoUhc+fzGJVneexm11MDf+PqUEOszTPcCMh1/UZbseDZLN9wN4k0m A==; X-CSE-ConnectionGUID: XmgfAYwGRFqnIEHPXATxFw== X-CSE-MsgGUID: ORYTNviwQduMdcMhVD+yIQ== X-IronPort-AV: E=McAfee;i="6700,10204,11314"; a="51125986" X-IronPort-AV: E=Sophos;i="6.12,310,1728975600"; d="scan'208";a="51125986" Received: from orviesa010.jf.intel.com ([10.64.159.150]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Feb 2025 04:35:21 -0800 X-CSE-ConnectionGUID: mpka5ml6R/WBE+fKU++fAA== X-CSE-MsgGUID: P/x/5wPgSjirP/+k/ako8w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.12,224,1728975600"; d="scan'208";a="111782459" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa010-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Feb 2025 04:35:20 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Johannes Berg Subject: [PATCH 7/9] wifi: iwlwifi: limit printed string from FW file Date: Sun, 9 Feb 2025 14:34:51 +0200 Message-Id: <20250209143303.cb5f9d0c2f5d.Idec695d53c6c2234aade306f7647b576c7e3d928@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250209123453.2010013-1-miriam.rachel.korenblit@intel.com> References: <20250209123453.2010013-1-miriam.rachel.korenblit@intel.com> Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Israel (74) Limited From: Johannes Berg There's no guarantee here that the file is always with a NUL-termination, so reading the string may read beyond the end of the TLV. If that's the last TLV in the file, it can perhaps even read beyond the end of the file buffer. Fix that by limiting the print format to the size of the buffer we have. Fixes: aee1b6385e29 ("iwlwifi: support fseq tlv and print fseq version") Signed-off-by: Johannes Berg Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/iwl-drv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-drv.c b/drivers/net/wireless/intel/iwlwifi/iwl-drv.c index d3a65f33097c..352b6e73e08f 100644 --- a/drivers/net/wireless/intel/iwlwifi/iwl-drv.c +++ b/drivers/net/wireless/intel/iwlwifi/iwl-drv.c @@ -1181,7 +1181,7 @@ static int iwl_parse_tlv_firmware(struct iwl_drv *drv, if (tlv_len != sizeof(*fseq_ver)) goto invalid_tlv_len; - IWL_INFO(drv, "TLV_FW_FSEQ_VERSION: %s\n", + IWL_INFO(drv, "TLV_FW_FSEQ_VERSION: %.32s\n", fseq_ver->version); } break; From patchwork Sun Feb 9 12:34:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 863738 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.10]) (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 3C83E1DE896 for ; Sun, 9 Feb 2025 12:35:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.10 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739104524; cv=none; b=ANwQEQbvtLwDzmfHcctSChb5rUJ1cefM9obQs5ZmDr6ALJ2RQrp/yOqcgR5ZwXtqT+/3JHkBG72BSJ95sQQ1LgdEQkvP74b+pl3SK40tdcgie8NFiPgjRf6KmCv0Jg+Q+QxzsPKnuTv8V4y5OsaWB7fgZCCJ+7eXuhCrKhkhGjA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739104524; c=relaxed/simple; bh=kJoBTBUnx3ThJujJq2NlULkcDwcFZROW8aDrwlWtN1c=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ZiyYUk5/490h0qkw1UReYhPbplhLe6oQWMVEEoE8RxD8aqkEPXW+MjwrppyDVzqqjWcNkrs4DupSBAmprV7u2gMYoITRlaNEiT2s6GH1NzXXz5J2310/NcCv/xX36+IFVUj85Tyvzrf/W0DGtmAifcnXbCMPTGOIaB9772A9Gjg= 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=HoiOvW30; arc=none smtp.client-ip=192.198.163.10 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="HoiOvW30" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1739104523; x=1770640523; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=kJoBTBUnx3ThJujJq2NlULkcDwcFZROW8aDrwlWtN1c=; b=HoiOvW3026xdoTAazf4Tm0B4r2CH1NEE64Lg4cwqp2uWPO6z7rWt/g7Q +7WMomU8AA4gp1F5l4/iFtI4zmoNJq0TU3TmULhbyWK7rbVYzB65aytc2 ojh2axByzfbqzWZbkU6IV1InvIDthpZ2dVZZFBJKcjTSJJnFBecdvj+Xx zwE3TcLIsWzfElNJoRdeZ6QQYiJ1Wdm1Xok/JhmnPGqPiPIwnOqYLDGeh qk6Ff0rD0ixAF1rzbmLL/nb0XoINlcuayGgGCV0yITm+Be3j+xs5m98yH IhlqP1rz/19+mH/iMqP034+tGPcQrZyR3TLKop+ktddWAA9HGYCGUXkIn Q==; X-CSE-ConnectionGUID: Hlt41em+T4CsiZzqKfj8cw== X-CSE-MsgGUID: Npe8x9OpSFKvSCzZ0Taw4Q== X-IronPort-AV: E=McAfee;i="6700,10204,11314"; a="51125988" X-IronPort-AV: E=Sophos;i="6.12,310,1728975600"; d="scan'208";a="51125988" Received: from orviesa010.jf.intel.com ([10.64.159.150]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Feb 2025 04:35:23 -0800 X-CSE-ConnectionGUID: H/SicHS8Rg+Sz5kUB5u/DQ== X-CSE-MsgGUID: y/C6JYfaTMSAnmN10FQACQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.12,224,1728975600"; d="scan'208";a="111782466" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa010-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Feb 2025 04:35:21 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Ilan Peer , Emmanuel Grumbach Subject: [PATCH 8/9] wifi: iwlwifi: Free pages allocated when failing to build A-MSDU Date: Sun, 9 Feb 2025 14:34:52 +0200 Message-Id: <20250209143303.bc27fad9b3d5.Ibf43dd18fb652b1a59061204e081f11c9fa34a3f@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250209123453.2010013-1-miriam.rachel.korenblit@intel.com> References: <20250209123453.2010013-1-miriam.rachel.korenblit@intel.com> Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Israel (74) Limited From: Ilan Peer When failing to prepare the data needed for A-MSDU transmission, the memory allocated for the TSO management was not freed. Fix it. Fixes: 7f5e3038f029 ("wifi: iwlwifi: map entire SKB when sending AMSDUs") Signed-off-by: Ilan Peer Reviewed-by: Emmanuel Grumbach Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c b/drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c index 1f483f15c238..dce5096db82b 100644 --- a/drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c +++ b/drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c @@ -347,6 +347,7 @@ iwl_tfh_tfd *iwl_txq_gen2_build_tx_amsdu(struct iwl_trans *trans, return tfd; out_err: + iwl_pcie_free_tso_pages(trans, skb, out_meta); iwl_txq_gen2_tfd_unmap(trans, out_meta, tfd); return NULL; } From patchwork Sun Feb 9 12:34:53 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miri Korenblit X-Patchwork-Id: 864050 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.10]) (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 8B9A01DEFD6 for ; Sun, 9 Feb 2025 12:35:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.10 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739104527; cv=none; b=FzE2kEMCVIXJnZ4MyfGN3x7Tkefw56KOu/Vd5iPv6GhO7QyxQEgZ0Xb7222l/NwiwqupYzsgdaHNTAHOcU2rIXaas9ER//jAFlxlntxQYE5AUavNQ50Hin97dO4FbQ+xL78plc3feOXgexgzHyvxJv4AFBmwbCrEWyvcEpRezos= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739104527; c=relaxed/simple; bh=bg2k8jcm1b6E6qh/13yDOWN1E8H7Z9dRhancspZ0TLU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=GFCSa6mmd0jw+9PUs6PZKoj4B2pEqaHBNyilNJCnIkwpHeoiPLxuwFSt3dDM2Am7sqqLhxnnZScQ8vtKE5+k7XaOSExds3FliSBfv3jHXt2xKbZp0dG487H3dIrk6OH6nTAhBwepdJ/Eg403V4jInWSpb5xAPPFpKl+3fEWWjTA= 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=K9ppKDOo; arc=none smtp.client-ip=192.198.163.10 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="K9ppKDOo" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1739104525; x=1770640525; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=bg2k8jcm1b6E6qh/13yDOWN1E8H7Z9dRhancspZ0TLU=; b=K9ppKDOorfXicZB7bDjVsXh1RKgmijJyutFHoz6MAdBT/Z7kwsSvgeq6 tPrBYq4j7s9P2U0H13GtQavx2e11LETppAr2QFmPeGedlNUK/KxEyuiQK Aqe04LeWqCe6dKLsuI9vk7P5Kr8H7S9cG9q06+m+tGD74zXJsC8g+dolX snR3vpho5asZMwhJjYzASNrTvV4CIHL514I2kVODNfcK4ggjosomPxk0n eiI3L7EQEPejthA1vFuRrFvmV2ogbv7C5570X8ey9KRavCDowRS4RgNly kQQR0vzjX3qt2UW1jranTFA2RLhNwNeyURuBU19Tj1i1Ssq9y4T9OSZG2 w==; X-CSE-ConnectionGUID: KT+MetTvS1uYBv+jYeLu/A== X-CSE-MsgGUID: bU7My2H+QbKQop7nkt1tsQ== X-IronPort-AV: E=McAfee;i="6700,10204,11314"; a="51125990" X-IronPort-AV: E=Sophos;i="6.12,310,1728975600"; d="scan'208";a="51125990" Received: from orviesa010.jf.intel.com ([10.64.159.150]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Feb 2025 04:35:25 -0800 X-CSE-ConnectionGUID: t/LaAuWLTPOONhVlV1UQzw== X-CSE-MsgGUID: oP0cNllLSWe9nznpyWvLig== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.12,224,1728975600"; d="scan'208";a="111782471" Received: from weis0040.iil.intel.com ([10.12.217.108]) by orviesa010-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Feb 2025 04:35:23 -0800 From: Miri Korenblit To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Ilan Peer , Benjamin Berg Subject: [PATCH 9/9] wifi: iwlwifi: Fix A-MSDU TSO preparation Date: Sun, 9 Feb 2025 14:34:53 +0200 Message-Id: <20250209143303.75769a4769bf.Iaf79e8538093cdf8c446c292cc96164ad6498f61@changeid> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250209123453.2010013-1-miriam.rachel.korenblit@intel.com> References: <20250209123453.2010013-1-miriam.rachel.korenblit@intel.com> Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Israel (74) Limited From: Ilan Peer The TSO preparation assumed that the skb head contained the headers while the rest of the data was in the fragments. Since this is not always true, e.g., it is possible that the data was linearised, modify the TSO preparation to start the data processing after the network headers. Fixes: 7f5e3038f029 ("wifi: iwlwifi: map entire SKB when sending AMSDUs") Signed-off-by: Ilan Peer Reviewed-by: Benjamin Berg Signed-off-by: Miri Korenblit --- .../wireless/intel/iwlwifi/pcie/internal.h | 5 +++-- .../net/wireless/intel/iwlwifi/pcie/tx-gen2.c | 5 +++-- drivers/net/wireless/intel/iwlwifi/pcie/tx.c | 20 +++++++++++-------- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/internal.h b/drivers/net/wireless/intel/iwlwifi/pcie/internal.h index 856b7e9f717d..45460f93d24a 100644 --- a/drivers/net/wireless/intel/iwlwifi/pcie/internal.h +++ b/drivers/net/wireless/intel/iwlwifi/pcie/internal.h @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ /* - * Copyright (C) 2003-2015, 2018-2024 Intel Corporation + * Copyright (C) 2003-2015, 2018-2025 Intel Corporation * Copyright (C) 2013-2015 Intel Mobile Communications GmbH * Copyright (C) 2016-2017 Intel Deutschland GmbH */ @@ -646,7 +646,8 @@ dma_addr_t iwl_pcie_get_sgt_tb_phys(struct sg_table *sgt, unsigned int offset, unsigned int len); struct sg_table *iwl_pcie_prep_tso(struct iwl_trans *trans, struct sk_buff *skb, struct iwl_cmd_meta *cmd_meta, - u8 **hdr, unsigned int hdr_room); + u8 **hdr, unsigned int hdr_room, + unsigned int offset); void iwl_pcie_free_tso_pages(struct iwl_trans *trans, struct sk_buff *skb, struct iwl_cmd_meta *cmd_meta); diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c b/drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c index dce5096db82b..401919f9fe88 100644 --- a/drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c +++ b/drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause /* * Copyright (C) 2017 Intel Deutschland GmbH - * Copyright (C) 2018-2020, 2023-2024 Intel Corporation + * Copyright (C) 2018-2020, 2023-2025 Intel Corporation */ #include #include @@ -188,7 +188,8 @@ static int iwl_txq_gen2_build_amsdu(struct iwl_trans *trans, (3 + snap_ip_tcp_hdrlen + sizeof(struct ethhdr)); /* Our device supports 9 segments at most, it will fit in 1 page */ - sgt = iwl_pcie_prep_tso(trans, skb, out_meta, &start_hdr, hdr_room); + sgt = iwl_pcie_prep_tso(trans, skb, out_meta, &start_hdr, hdr_room, + snap_ip_tcp_hdrlen + hdr_len); if (!sgt) return -ENOMEM; diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/tx.c b/drivers/net/wireless/intel/iwlwifi/pcie/tx.c index 334ebd4c12fa..7b6071a59b69 100644 --- a/drivers/net/wireless/intel/iwlwifi/pcie/tx.c +++ b/drivers/net/wireless/intel/iwlwifi/pcie/tx.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause /* - * Copyright (C) 2003-2014, 2018-2021, 2023-2024 Intel Corporation + * Copyright (C) 2003-2014, 2018-2021, 2023-2025 Intel Corporation * Copyright (C) 2013-2015 Intel Mobile Communications GmbH * Copyright (C) 2016-2017 Intel Deutschland GmbH */ @@ -1855,6 +1855,7 @@ dma_addr_t iwl_pcie_get_sgt_tb_phys(struct sg_table *sgt, unsigned int offset, * @cmd_meta: command meta to store the scatter list information for unmapping * @hdr: output argument for TSO headers * @hdr_room: requested length for TSO headers + * @offset: offset into the data from which mapping should start * * Allocate space for a scatter gather list and TSO headers and map the SKB * using the scatter gather list. The SKB is unmapped again when the page is @@ -1864,18 +1865,20 @@ dma_addr_t iwl_pcie_get_sgt_tb_phys(struct sg_table *sgt, unsigned int offset, */ struct sg_table *iwl_pcie_prep_tso(struct iwl_trans *trans, struct sk_buff *skb, struct iwl_cmd_meta *cmd_meta, - u8 **hdr, unsigned int hdr_room) + u8 **hdr, unsigned int hdr_room, + unsigned int offset) { struct sg_table *sgt; + unsigned int n_segments; if (WARN_ON_ONCE(skb_has_frag_list(skb))) return NULL; + n_segments = DIV_ROUND_UP(skb->len - offset, skb_shinfo(skb)->gso_size); *hdr = iwl_pcie_get_page_hdr(trans, hdr_room + __alignof__(struct sg_table) + sizeof(struct sg_table) + - (skb_shinfo(skb)->nr_frags + 1) * - sizeof(struct scatterlist), + n_segments * sizeof(struct scatterlist), skb); if (!*hdr) return NULL; @@ -1883,11 +1886,11 @@ struct sg_table *iwl_pcie_prep_tso(struct iwl_trans *trans, struct sk_buff *skb, sgt = (void *)PTR_ALIGN(*hdr + hdr_room, __alignof__(struct sg_table)); sgt->sgl = (void *)(sgt + 1); - sg_init_table(sgt->sgl, skb_shinfo(skb)->nr_frags + 1); + sg_init_table(sgt->sgl, n_segments); /* Only map the data, not the header (it is copied to the TSO page) */ - sgt->orig_nents = skb_to_sgvec(skb, sgt->sgl, skb_headlen(skb), - skb->data_len); + sgt->orig_nents = skb_to_sgvec(skb, sgt->sgl, offset, + skb->len - offset); if (WARN_ON_ONCE(sgt->orig_nents <= 0)) return NULL; @@ -1939,7 +1942,8 @@ static int iwl_fill_data_tbs_amsdu(struct iwl_trans *trans, struct sk_buff *skb, (3 + snap_ip_tcp_hdrlen + sizeof(struct ethhdr)) + iv_len; /* Our device supports 9 segments at most, it will fit in 1 page */ - sgt = iwl_pcie_prep_tso(trans, skb, out_meta, &start_hdr, hdr_room); + sgt = iwl_pcie_prep_tso(trans, skb, out_meta, &start_hdr, hdr_room, + snap_ip_tcp_hdrlen + hdr_len + iv_len); if (!sgt) return -ENOMEM;