Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp3937177pxj; Mon, 21 Jun 2021 09:45:24 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzlGnXpYdQ2wDCx/roqKkg4Ryj8vK5jQGv3CFzn30QqRpfyKk7M+iEPLUoiZy1Gdwsz0mzJ X-Received: by 2002:a05:6402:4396:: with SMTP id o22mr22546690edc.15.1624293923908; Mon, 21 Jun 2021 09:45:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1624293923; cv=none; d=google.com; s=arc-20160816; b=duH/hLoFn1cHB35bXttrU2FGGs4M/hfL7B5v5tLXk5Ts52JN9+INncn1hbMZG4nYts dc90VR51+79C2+nTP6YoHabBRGhoVV8gGmmd52qiS/+6volARwW92e+mw/7jx+b9JSPG 4v1eZ/vPuneTMH61RatOg42Fhy3qUY80w/GpFwMHlBzk2C2W0q2QDJI4gmt+xu63gmWm GRt8clsgLB7q9yg7NOM6DPOAI2EXNekpWRYLRETDweDast2AeeYKUTTmTOhBEpvHkV8Z HQXcWbTYpQufEJCpZoSERYdlAg+uVychwgA92H3H9ghCwRd1/HPEq/OqErq7KBZgh3ij YOMA== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=yGy+CRhz3iuVrCTV50ntxD0BXy2fK28GN5Rk136IkKw=; b=u6iJNGBh6ZyV8rvegXoeKd+Lb1rhbr2JLwUtulOQcs5QgzsLSWsX9ikfYv9OsMMrFG yJVt4irjWP/4dYS7hD7MjRw+XLtoPRDopddx1wVa/aW7P3mEecEh3r0ZoHVCW+3Tm/GE alR1kYvTnwhZQD+uEVI28NUasWvHJNg9ZuvkPVFNItAj64AARJJttC7uOMOuEDWXtUQY xSN5MlLeboO8J16QiS3Sgd44Z0YKHGSi6goCDnN8o6vZi9+sRL97sShmy6b1mg9YhFBC nAxotxVeWUEHBaaYuogm5+tdIaB8vn225krD+9R4Do7SfZaViToCCtSbevrcwWPEhaEY V+tg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=qQCwni1n; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id f7si11306545edd.231.2021.06.21.09.45.01; Mon, 21 Jun 2021 09:45:23 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-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=@linuxfoundation.org header.s=korg header.b=qQCwni1n; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232649AbhFUQnK (ORCPT + 99 others); Mon, 21 Jun 2021 12:43:10 -0400 Received: from mail.kernel.org ([198.145.29.99]:33912 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233282AbhFUQjl (ORCPT ); Mon, 21 Jun 2021 12:39:41 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 5192E61435; Mon, 21 Jun 2021 16:29:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1624292999; bh=6ZI8gI+VoQCnuIKDBVtLc5Cc7ZZ3Dc8qpBxdPur43Hc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qQCwni1n0jKHkop9E2RPno9hhA88sRP7Fw1RbBEClKWDahpztQPJzlX9pSZvg7fpe Wbtk/r99F6my32RXX13hRBVMbSN9gq7Fl9fTSEnlaVJZPzpDtBAGzWmW5X6U6I9XmZ 3ks73LVp2j1QsFdia2bAeE14N0kUtqOU7nSLVRxw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Maciej Fijalkowski , Kiran Bhandare , Tony Nguyen , Sasha Levin Subject: [PATCH 5.12 028/178] ice: parameterize functions responsible for Tx ring management Date: Mon, 21 Jun 2021 18:14:02 +0200 Message-Id: <20210621154922.838909535@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210621154921.212599475@linuxfoundation.org> References: <20210621154921.212599475@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Maciej Fijalkowski [ Upstream commit 2e84f6b3773f43263124c76499c0c4ec3f40aa9b ] Commit ae15e0ba1b33 ("ice: Change number of XDP Tx queues to match number of Rx queues") tried to address the incorrect setting of XDP queue count that was based on the Tx queue count, whereas in theory we should provide the XDP queue per Rx queue. However, the routines that setup and destroy the set of Tx resources are still based on the vsi->num_txq. Ice supports the asynchronous Tx/Rx queue count, so for a setup where vsi->num_txq > vsi->num_rxq, ice_vsi_stop_tx_rings and ice_vsi_cfg_txqs will be accessing the vsi->xdp_rings out of the bounds. Parameterize two mentioned functions so they get the size of Tx resources array as the input. Fixes: ae15e0ba1b33 ("ice: Change number of XDP Tx queues to match number of Rx queues") Signed-off-by: Maciej Fijalkowski Tested-by: Kiran Bhandare Signed-off-by: Tony Nguyen Signed-off-by: Sasha Levin --- drivers/net/ethernet/intel/ice/ice_lib.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/drivers/net/ethernet/intel/ice/ice_lib.c b/drivers/net/ethernet/intel/ice/ice_lib.c index 27e439853c3b..55432ea360ad 100644 --- a/drivers/net/ethernet/intel/ice/ice_lib.c +++ b/drivers/net/ethernet/intel/ice/ice_lib.c @@ -1715,12 +1715,13 @@ setup_rings: * ice_vsi_cfg_txqs - Configure the VSI for Tx * @vsi: the VSI being configured * @rings: Tx ring array to be configured + * @count: number of Tx ring array elements * * Return 0 on success and a negative value on error * Configure the Tx VSI for operation. */ static int -ice_vsi_cfg_txqs(struct ice_vsi *vsi, struct ice_ring **rings) +ice_vsi_cfg_txqs(struct ice_vsi *vsi, struct ice_ring **rings, u16 count) { struct ice_aqc_add_tx_qgrp *qg_buf; u16 q_idx = 0; @@ -1732,7 +1733,7 @@ ice_vsi_cfg_txqs(struct ice_vsi *vsi, struct ice_ring **rings) qg_buf->num_txqs = 1; - for (q_idx = 0; q_idx < vsi->num_txq; q_idx++) { + for (q_idx = 0; q_idx < count; q_idx++) { err = ice_vsi_cfg_txq(vsi, rings[q_idx], qg_buf); if (err) goto err_cfg_txqs; @@ -1752,7 +1753,7 @@ err_cfg_txqs: */ int ice_vsi_cfg_lan_txqs(struct ice_vsi *vsi) { - return ice_vsi_cfg_txqs(vsi, vsi->tx_rings); + return ice_vsi_cfg_txqs(vsi, vsi->tx_rings, vsi->num_txq); } /** @@ -1767,7 +1768,7 @@ int ice_vsi_cfg_xdp_txqs(struct ice_vsi *vsi) int ret; int i; - ret = ice_vsi_cfg_txqs(vsi, vsi->xdp_rings); + ret = ice_vsi_cfg_txqs(vsi, vsi->xdp_rings, vsi->num_xdp_txq); if (ret) return ret; @@ -1965,17 +1966,18 @@ int ice_vsi_stop_all_rx_rings(struct ice_vsi *vsi) * @rst_src: reset source * @rel_vmvf_num: Relative ID of VF/VM * @rings: Tx ring array to be stopped + * @count: number of Tx ring array elements */ static int ice_vsi_stop_tx_rings(struct ice_vsi *vsi, enum ice_disq_rst_src rst_src, - u16 rel_vmvf_num, struct ice_ring **rings) + u16 rel_vmvf_num, struct ice_ring **rings, u16 count) { u16 q_idx; if (vsi->num_txq > ICE_LAN_TXQ_MAX_QDIS) return -EINVAL; - for (q_idx = 0; q_idx < vsi->num_txq; q_idx++) { + for (q_idx = 0; q_idx < count; q_idx++) { struct ice_txq_meta txq_meta = { }; int status; @@ -2003,7 +2005,7 @@ int ice_vsi_stop_lan_tx_rings(struct ice_vsi *vsi, enum ice_disq_rst_src rst_src, u16 rel_vmvf_num) { - return ice_vsi_stop_tx_rings(vsi, rst_src, rel_vmvf_num, vsi->tx_rings); + return ice_vsi_stop_tx_rings(vsi, rst_src, rel_vmvf_num, vsi->tx_rings, vsi->num_txq); } /** @@ -2012,7 +2014,7 @@ ice_vsi_stop_lan_tx_rings(struct ice_vsi *vsi, enum ice_disq_rst_src rst_src, */ int ice_vsi_stop_xdp_tx_rings(struct ice_vsi *vsi) { - return ice_vsi_stop_tx_rings(vsi, ICE_NO_RESET, 0, vsi->xdp_rings); + return ice_vsi_stop_tx_rings(vsi, ICE_NO_RESET, 0, vsi->xdp_rings, vsi->num_xdp_txq); } /** -- 2.30.2