Received: by 2002:a05:6a10:eb17:0:0:0:0 with SMTP id hx23csp488924pxb; Thu, 9 Sep 2021 05:43:28 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzGdFV8Sg0aE+3V8c+lm1247VmAw4SA5wKFJd8vA2MWUkxUzfgZ6wrXUjxkWBsQf/oTgh6a X-Received: by 2002:a05:6402:1b93:: with SMTP id cc19mr2932492edb.362.1631191408625; Thu, 09 Sep 2021 05:43:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631191408; cv=none; d=google.com; s=arc-20160816; b=YhzYT04wTmBOj9Aamcft1ABafYrUP11dx5/EUpon9PwcZaxnZJrNPK2aC2nT2sE+f3 4+aIWWOxq69lrFxtyLq7H3e1ECYj5Z+j+EQMhEh2Ogo9iaAkzsbFWEVMO+W7IR7Jpxyu prLisTfj+hRnmZ+mi08BYUeoVJBnyZvkggvbOY9+U83aiyn0tZWaWvmEFAE+1Q5kRsjZ tsiDMbg2f3aLHjaQDyenKJWhdvQB+Fjv4gJ9nh/nqK5yS1euH9iB5FMuv0VsonrteRKH wR6fy3TwuVrJQ4KoISGi+AqGSs5c7BIshWdyLvYueyRm7DqxbMeD+uVeXQIs1KH0c1wD EKgg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=g8cH209NrhT4zD7t+lr79PrD3plM9A+zyX7zC0ETu6M=; b=lMZUIS2KO85OXB0/vHKJPRQ57iII11p+YXIJlgqagbICYEC5la0qRYFttx+ud5rrh3 uzxt9Dv5My+TL9k3MvzX2RDcgMqnqKax09eXjhLIfitrnQBVUDMbJA0fp994iHl92Wot 6ECpdgfMUC6GT+1z/vyN1DeEBMKyxsA8njG0XT97tglz1y11a5ypG/0fGUE/LItVhjot 3imUpkjDBi+eJN1MrrCZ9tmpOgKgc1orz4/q9aEzQwO1rrtIIu6mw5LbQqI7G9P073oh MpFhci4zIAKZuVntnuh5qjfdmWVkXsnYo7PW//gVtOYaUjfbcCo+Si4cF5R6jWJzKc1q bZ9Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=CPAhG+6A; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id j10si1673844ejo.344.2021.09.09.05.43.03; Thu, 09 Sep 2021 05:43:28 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=CPAhG+6A; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347669AbhIIMnd (ORCPT + 99 others); Thu, 9 Sep 2021 08:43:33 -0400 Received: from mail.kernel.org ([198.145.29.99]:46118 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354810AbhIIMji (ORCPT ); Thu, 9 Sep 2021 08:39:38 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id ADFBC61BE4; Thu, 9 Sep 2021 11:54:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1631188485; bh=BZrkluB2099K/J1qS8KSKoiffuQQBK2F02rugxMspQk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CPAhG+6AjtrKPlyYZyP7G3Db5HkCbOXkYXAldfKwGonF1PWgHEJBrAz8wqTQ52NAw 9k7+wHtqBJzV8oR3o66NghWKUaGmQaeag2WDPN4WkGb8GsDJnZYPGoPZ9y6VmgOGIO gTe2xyg/dFaLhTqDzbwsfuuOzsRcYotUXcKiZyjkegDK2fTMjeJtnoYuKUKSkulaQM JC/ntjByvoTRUzSaWfL0dG9nONsd4usXpFd1zOtqv8h0vv4mLLeCUdYQl0joEhWKEk tHZUled7eh37NyXd8j6dLvjbC5viujhXu45tv9Qh2axuMeiK6RrGPq9UIeIOa74u6t mwFN1pBItaygg== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Johannes Berg , Luca Coelho , Sasha Levin , linux-wireless@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH AUTOSEL 5.10 160/176] iwlwifi: pcie: free RBs during configure Date: Thu, 9 Sep 2021 07:51:02 -0400 Message-Id: <20210909115118.146181-160-sashal@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210909115118.146181-1-sashal@kernel.org> References: <20210909115118.146181-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Johannes Berg [ Upstream commit 6ac5720086c8b176794eb74c5cc09f8b79017f38 ] When switching op-modes, or more generally when reconfiguring, we might switch the RB size. In _iwl_pcie_rx_init() we have a comment saying we must free all RBs since we might switch the size, but this is actually too late: the switch has been done and we'll free the buffers with the wrong size. Fix this by always freeing the buffers, if any, at the start of configure, instead of only after the size may have changed. Signed-off-by: Johannes Berg Signed-off-by: Luca Coelho Link: https://lore.kernel.org/r/iwlwifi.20210802170640.42d7c93279c4.I07f74e65aab0e3d965a81206fcb289dc92d74878@changeid Signed-off-by: Luca Coelho Signed-off-by: Sasha Levin --- drivers/net/wireless/intel/iwlwifi/pcie/rx.c | 5 ++++- drivers/net/wireless/intel/iwlwifi/pcie/trans.c | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c index 94299f259518..2c13fa8f2820 100644 --- a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c +++ b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c @@ -544,6 +544,9 @@ void iwl_pcie_free_rbs_pool(struct iwl_trans *trans) struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); int i; + if (!trans_pcie->rx_pool) + return; + for (i = 0; i < RX_POOL_SIZE(trans_pcie->num_rx_bufs); i++) { if (!trans_pcie->rx_pool[i].page) continue; @@ -1094,7 +1097,7 @@ static int _iwl_pcie_rx_init(struct iwl_trans *trans) INIT_LIST_HEAD(&rba->rbd_empty); spin_unlock(&rba->lock); - /* free all first - we might be reconfigured for a different size */ + /* free all first - we overwrite everything here */ iwl_pcie_free_rbs_pool(trans); for (i = 0; i < RX_QUEUE_SIZE; i++) diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c index bb990be7c870..082768ec8aa8 100644 --- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c +++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c @@ -1909,6 +1909,9 @@ static void iwl_trans_pcie_configure(struct iwl_trans *trans, { struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); + /* free all first - we might be reconfigured for a different size */ + iwl_pcie_free_rbs_pool(trans); + trans->txqs.cmd.q_id = trans_cfg->cmd_queue; trans->txqs.cmd.fifo = trans_cfg->cmd_fifo; trans->txqs.cmd.wdg_timeout = trans_cfg->cmd_q_wdg_timeout; -- 2.30.2