From patchwork Thu Jul 25 22:23:49 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 13742187 X-Patchwork-Delegate: kuba@kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 1D5C0143C4B for ; Thu, 25 Jul 2024 22:24:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721946245; cv=none; b=FfESLVrTKuYAlv23gt+qzsppoglqGevyNW5exXjrHmVw7WzqQuPV2eyM/spgAbqMzdu7N+uwG/sZwe2iDNYL/C/fyTKmq5KpQ/icJiIRe/84RypPIAwgiD9LEfF8xcKbgJQiFWyeZl0OgiI5Sr1Ap4vsnZZWoUESwsilyJI0tj0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721946245; c=relaxed/simple; bh=24rI0zBxjyY2Lqd98zxx0B/rISB/OYL2ybM6TpEh5xY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Fj46OyHPJRc3l4EdEm0Ys8eH3cBYEMNiEGrF8zy1IAN2W7dN4SMKjmKZIPhfXFDldRocdAKNuampq+pXmLBGrkTiJgWlPl5XAFbca6ATNNUXQpsSs8G6qNlq4sMo2Pix0Iuj8/XiFR2+DdPqjkdi4SgADKhmMgPnwkX73/RZNV8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=LnNlsDAH; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="LnNlsDAH" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 02AFEC4AF07; Thu, 25 Jul 2024 22:24:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721946244; bh=24rI0zBxjyY2Lqd98zxx0B/rISB/OYL2ybM6TpEh5xY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LnNlsDAHbV1M2/V3mw0ZgiswVLQadeP6Bz9ZWoLAU6ICFv/469+rHBY7OeNrLgwoB EG2nMKCTHtS8nmTjvw6CXN16eXsHjsBGn4bhLAz7k1TnnKzwMIz5ZIQ/Sd6x4iAssT ea1pY3OuAGm2y41AUrWqmoCeGcd3acpf6H3dE7xwJJ1ani22soFpNbhFGMIxEXLiTC haW9UtRynSIOyyrbhN/hGKHLcOTdkwBJf18NG9kFkTvxqKrO/SA12tvEcsy0bAad8Y jn3NPt14e/v509TzKAiO7HB52q0A1XJwolnyZSot3Z2nuf2yMVNs9eowbyrQ1KPGkW AILRBD5UOLJAg== From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, michael.chan@broadcom.com, shuah@kernel.org, ecree.xilinx@gmail.com, przemyslaw.kitszel@intel.com, ahmed.zaki@intel.com, andrew@lunn.ch, willemb@google.com, pavan.chebbi@broadcom.com, petrm@nvidia.com, Jakub Kicinski Subject: [PATCH net 1/5] eth: bnxt: reject unsupported hash functions Date: Thu, 25 Jul 2024 15:23:49 -0700 Message-ID: <20240725222353.2993687-2-kuba@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240725222353.2993687-1-kuba@kernel.org> References: <20240725222353.2993687-1-kuba@kernel.org> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org In commit under Fixes I split the bnxt_set_rxfh_context() function, and attached the appropriate chunks to new ops. I missed that bnxt_set_rxfh_context() gets called after some initial checks in bnxt_set_rxfh(), namely that the hash function is Toeplitz. Fixes: 5c466b4d4e75 ("eth: bnxt: move from .set_rxfh to .create_rxfh_context and friends") Signed-off-by: Jakub Kicinski Reviewed-by: Pavan Chebbi --- drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c index d00ef0063820..0425a54eca98 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c @@ -1863,8 +1863,14 @@ static void bnxt_modify_rss(struct bnxt *bp, struct ethtool_rxfh_context *ctx, } static int bnxt_rxfh_context_check(struct bnxt *bp, + const struct ethtool_rxfh_param *rxfh, struct netlink_ext_ack *extack) { + if (rxfh->hfunc && rxfh->hfunc != ETH_RSS_HASH_TOP) { + NL_SET_ERR_MSG_MOD(extack, "RSS hash function not supported"); + return -EOPNOTSUPP; + } + if (!BNXT_SUPPORTS_MULTI_RSS_CTX(bp)) { NL_SET_ERR_MSG_MOD(extack, "RSS contexts not supported"); return -EOPNOTSUPP; @@ -1888,7 +1894,7 @@ static int bnxt_create_rxfh_context(struct net_device *dev, struct bnxt_vnic_info *vnic; int rc; - rc = bnxt_rxfh_context_check(bp, extack); + rc = bnxt_rxfh_context_check(bp, rxfh, extack); if (rc) return rc; @@ -1953,7 +1959,7 @@ static int bnxt_modify_rxfh_context(struct net_device *dev, struct bnxt_rss_ctx *rss_ctx; int rc; - rc = bnxt_rxfh_context_check(bp, extack); + rc = bnxt_rxfh_context_check(bp, rxfh, extack); if (rc) return rc; From patchwork Thu Jul 25 22:23:50 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 13742188 X-Patchwork-Delegate: kuba@kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 F0E421482EE for ; Thu, 25 Jul 2024 22:24:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721946246; cv=none; b=LQ/A2OnC45DPVsfN005pFCC8ez6rgCmC2dhV9g3Wn7lAUM/zWTVeC0nl187gLHuSdd2RiIFWtGzvCKAfbbnAZB0nAo9x/UMPDcMAWUvc3WS9v8AeuQB1ugVHNu9LFv5ZKjP1maoUEXzb/AiFhfz7ZWz1vCmLbRYebK3WmruEdpY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721946246; c=relaxed/simple; bh=grQdt8JMcVjRohxFP+2jPQF0HLdM4ScdnuJ+n4Os1Ag=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bdAzaZSP3Pmw/9UpXpbl/WiO+INW6zWxpMVJOmHPdEgKc8sjn5opSGLwn7gr4nqT2dog5OXh77PADSG3ywtLHSCT+UkNcope/2m5lToweba0oMNb97K1wwr23cGw1MxGzNt0SyPwd5Nc1KwmC0C3U2acIHcbksYu+KBckWBrNqk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=K+S/o9W+; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="K+S/o9W+" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CE353C4AF0A; Thu, 25 Jul 2024 22:24:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721946245; bh=grQdt8JMcVjRohxFP+2jPQF0HLdM4ScdnuJ+n4Os1Ag=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=K+S/o9W+W06/bliPqhXfgKC9T90uKyz1bhtZvHt1MNC5ztCk0CE+UwpRDcFJ/qCGW b2PjWlqZx026O5aRvpzuddXrCrRMPG9xTE0BTsLUCiiadVkKIsunlQ551/f6FXiwYD u+TReVOg8HMTdPkr+f1sBCeya4kDIKf0ylyhlQZzpzyp5qmAvMbT0mNywABpOckAHf WrwJm9lsnq6k8HJxqthaEu8k2Rl27G96Is6EptkDCrrpj7Qe4GGbw+KzfVVJip365/ 5FYmaRxGUnik9p79RsLOUMJ6+Y1fQgykAuvzIpK8GlKkZJ7asHnACSJ2v1FhKKggb8 jV2SzXoQUcWng== From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, michael.chan@broadcom.com, shuah@kernel.org, ecree.xilinx@gmail.com, przemyslaw.kitszel@intel.com, ahmed.zaki@intel.com, andrew@lunn.ch, willemb@google.com, pavan.chebbi@broadcom.com, petrm@nvidia.com, Jakub Kicinski Subject: [PATCH net 2/5] eth: bnxt: populate defaults in the RSS context struct Date: Thu, 25 Jul 2024 15:23:50 -0700 Message-ID: <20240725222353.2993687-3-kuba@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240725222353.2993687-1-kuba@kernel.org> References: <20240725222353.2993687-1-kuba@kernel.org> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org As described in the kdoc for .create_rxfh_context we are responsible for populating the defaults. The core will not call .get_rxfh for non-0 context. The problem can be easily observed since Netlink doesn't currently use the cache. Using netlink ethtool: $ ethtool -x eth0 context 1 [...] RSS hash key: 13:60:cd:60:14:d3:55:36:86:df:90:f2:96:14:e2:21:05:57:a8:8f:a5:12:5e:54:62:7f:fd:3c:15:7e:76:05:71:42:a2:9a:73:80:09:9c RSS hash function: toeplitz: on xor: off crc32: off But using IOCTL ethtool shows: $ ./ethtool-old -x eth0 context 1 [...] RSS hash key: 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 RSS hash function: Operation not supported Fixes: 7964e7884643 ("net: ethtool: use the tracking array for get_rxfh on custom RSS contexts") Signed-off-by: Jakub Kicinski Reviewed-by: Pavan Chebbi --- drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c index 0425a54eca98..ab8e3f197e7b 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c @@ -1921,8 +1921,12 @@ static int bnxt_create_rxfh_context(struct net_device *dev, if (rc) goto out; + /* Populate defaults in the context */ bnxt_set_dflt_rss_indir_tbl(bp, ctx); + ctx->hfunc = ETH_RSS_HASH_TOP; memcpy(vnic->rss_hash_key, bp->rss_hash_key, HW_HASH_KEY_SIZE); + memcpy(ethtool_rxfh_context_key(ctx), + bp->rss_hash_key, HW_HASH_KEY_SIZE); rc = bnxt_hwrm_vnic_alloc(bp, vnic, 0, bp->rx_nr_rings); if (rc) { From patchwork Thu Jul 25 22:23:51 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 13742189 X-Patchwork-Delegate: kuba@kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 DB4BC149006 for ; Thu, 25 Jul 2024 22:24:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721946246; cv=none; b=Jpq550VzL9Or9irIHDgerRkoWyuuenzaZUn39rhtcbFTlVaGxIc0aHbvpQLDXn8vxxS0RcCP+8j8rBhvP7QIoHOLENGtgAdivDVBwVtq3eLz9eF//ZRvmUMb8h1zbaqjCgt9dWupMlRrft+Ydu6KSupgJzu1npptxuGdE6nk7dM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721946246; c=relaxed/simple; bh=82QFFfsRm7da6OHnWNDXEfSYrmq7Bhmr00IHPzW0VOo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HEbIeaJaCxr64hg1LCubqhihd/uUlU0r1y8qR0es625frgKCkGCkbB7agovyIVmYkbDU971h1k5QJjj0i6oFEiJch1TQGJr2C8xIzEKfUiaIYD5ICHqw6pnUvdj8FG5DvvMibtJaOvaddL4FByPQ7RzODBsz4MLu9fLxqEa68p8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZfrKB/Xb; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ZfrKB/Xb" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A8D20C4AF0F; Thu, 25 Jul 2024 22:24:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721946246; bh=82QFFfsRm7da6OHnWNDXEfSYrmq7Bhmr00IHPzW0VOo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZfrKB/Xb37HnaRgqZgQbwjZst7TpEAJvxiE6nhWDlSzR0a2U+Z3p7+MU7tbSrPHKk opPCVajaQk5H0sWpYNkv9FnejbUXmxZM+/oWPdpkDeXIprX/aO58RjzNuDMX+AK1Y6 MLazOT0TdzLzE8cXUqBlC1j3Lmht0iXJg6DaRN1pCqJgjycdVtx8FlfP+lEkZVVyrg KQu5IAe1mm/KvgoXqeMalq3/GRKTCoaoUK6VzlsAmaH61eUQe3pQ6OmUSD3g7a1Rcj 6xWf+1M+1FdSafxSUS0DFMs2I0948XK4ge1k6CCvr1f4u1ihME3uPXbX3kIEYzrS7r Z/oWXRRnoo1GQ== From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, michael.chan@broadcom.com, shuah@kernel.org, ecree.xilinx@gmail.com, przemyslaw.kitszel@intel.com, ahmed.zaki@intel.com, andrew@lunn.ch, willemb@google.com, pavan.chebbi@broadcom.com, petrm@nvidia.com, Jakub Kicinski Subject: [PATCH net 3/5] ethtool: fix setting key and resetting indir at once Date: Thu, 25 Jul 2024 15:23:51 -0700 Message-ID: <20240725222353.2993687-4-kuba@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240725222353.2993687-1-kuba@kernel.org> References: <20240725222353.2993687-1-kuba@kernel.org> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org The indirection table and the key follow struct ethtool_rxfh in user memory. To reset the indirection table user space calls SET_RXFH with table of size 0 (OTOH to say "no change" it should use -1 / ~0). The logic for calculating the offset where they key sits is incorrect in this case, as kernel would still offset by the full table length, while for the reset there is no indir table and key is immediately after the struct. $ ethtool -X eth0 default hkey 01:02:03... $ ethtool -x eth0 [...] RSS hash key: 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 [...] Fixes: 3de0b592394d ("ethtool: Support for configurable RSS hash key") Signed-off-by: Jakub Kicinski --- net/ethtool/ioctl.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c index 983fee76f5cf..a37ba113610a 100644 --- a/net/ethtool/ioctl.c +++ b/net/ethtool/ioctl.c @@ -1331,13 +1331,13 @@ static noinline_for_stack int ethtool_set_rxfh(struct net_device *dev, u32 rss_cfg_offset = offsetof(struct ethtool_rxfh, rss_config[0]); const struct ethtool_ops *ops = dev->ethtool_ops; u32 dev_indir_size = 0, dev_key_size = 0, i; + u32 user_indir_len = 0, indir_bytes = 0; struct ethtool_rxfh_param rxfh_dev = {}; struct ethtool_rxfh_context *ctx = NULL; struct netlink_ext_ack *extack = NULL; struct ethtool_rxnfc rx_rings; struct ethtool_rxfh rxfh; bool locked = false; /* dev->ethtool->rss_lock taken */ - u32 indir_bytes = 0; bool create = false; u8 *rss_config; int ret; @@ -1400,6 +1400,7 @@ static noinline_for_stack int ethtool_set_rxfh(struct net_device *dev, */ if (rxfh.indir_size && rxfh.indir_size != ETH_RXFH_INDIR_NO_CHANGE) { + user_indir_len = indir_bytes; rxfh_dev.indir = (u32 *)rss_config; rxfh_dev.indir_size = dev_indir_size; ret = ethtool_copy_validate_indir(rxfh_dev.indir, @@ -1426,7 +1427,7 @@ static noinline_for_stack int ethtool_set_rxfh(struct net_device *dev, rxfh_dev.key_size = dev_key_size; rxfh_dev.key = rss_config + indir_bytes; if (copy_from_user(rxfh_dev.key, - useraddr + rss_cfg_offset + indir_bytes, + useraddr + rss_cfg_offset + user_indir_len, rxfh.key_size)) { ret = -EFAULT; goto out; From patchwork Thu Jul 25 22:23:52 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 13742190 X-Patchwork-Delegate: kuba@kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 A0DED1494CB for ; Thu, 25 Jul 2024 22:24:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721946247; cv=none; b=rdQF69AQWE7yz3IHsC9mYMP/TOtLTA3T/1pfyd3niT5Wee5aTPAvaCVciFWnxh7EFAQ+Goafw6D6UeC3uzM7C0BmjcIHU8fe8+qgw+vD8CQTBL8yM/5DUla4Q7Do7E8oGLFyAe2TJ3BAp4VLlfTfELzrYeeRfPYJpQjgK4l3IbU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721946247; c=relaxed/simple; bh=EL82RGxzOGRnUmC9jRPxvgwiL0cwbKM03Js9y/jrqIM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TDZwILlpaicVTdR+/kj7KUqtppd/cxhO1wTpcPRnx1BiLsHeHzPf55j5bRvAAKHlHrPBis9yJsQW00aWfWUNzX+PJv7j8rQ6ksHmOsYo1RlhScOa5Nkc3uj0Ag6QED43dBFAjTuwUIhbDvM29PKFcs9yx8N9jezg31SpyVjo4jQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=T+RHnzWh; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="T+RHnzWh" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 838B4C4AF0E; Thu, 25 Jul 2024 22:24:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721946247; bh=EL82RGxzOGRnUmC9jRPxvgwiL0cwbKM03Js9y/jrqIM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=T+RHnzWhc2vjMy09E9PdEF/lsg7tZUqhz032Gqe5+tQpfjdbvk/iEaXn6tdrG5wCW wzoOCHfYpvR4vbi6/BqSdwUVOJbbXpPTCPRBAGkC01VWyB9eYUpnM1u09m2guZlQTg i8r4Vr4/87rfxd2fIiW131rR/5vjB5QnJx3o+JlED3ZXVdYFfyHwd3UuW368KL76GD 07rAVZ+DjSdCpYhgXVym9nv8mIDjfZ2fPxkT2pvXTkMRMa3oexrGRc0SbCr2b3O74K iyw6AdinOot0HEHX+DTYRB8sFGQ3sPGBByjkkkvCmGnL1ef5FQmq7zoo/ZZwtVru28 0jJOsYujD8/HQ== From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, michael.chan@broadcom.com, shuah@kernel.org, ecree.xilinx@gmail.com, przemyslaw.kitszel@intel.com, ahmed.zaki@intel.com, andrew@lunn.ch, willemb@google.com, pavan.chebbi@broadcom.com, petrm@nvidia.com, Jakub Kicinski Subject: [PATCH net 4/5] ethtool: fix the state of additional contexts with old API Date: Thu, 25 Jul 2024 15:23:52 -0700 Message-ID: <20240725222353.2993687-5-kuba@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240725222353.2993687-1-kuba@kernel.org> References: <20240725222353.2993687-1-kuba@kernel.org> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org We expect drivers implementing the new create/modify/destroy API to populate the defaults in struct ethtool_rxfh_context. In legacy API ctx isn't even passed, and rxfh.indir / rxfh.key are NULL so drivers can't give us defaults even if they want to. Call get_rxfh() to fetch the values. We can reuse rxfh_dev for the get_rxfh(), rxfh stores the input from the user. This fixes IOCTL reporting 0s instead of the default key / indir table for drivers using legacy API. Add a check to try to catch drivers using the new API but not populating the key. Fixes: 7964e7884643 ("net: ethtool: use the tracking array for get_rxfh on custom RSS contexts") Signed-off-by: Jakub Kicinski Reviewed-by: Edward Cree --- net/ethtool/ioctl.c | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c index a37ba113610a..8ca13208d240 100644 --- a/net/ethtool/ioctl.c +++ b/net/ethtool/ioctl.c @@ -1382,10 +1382,9 @@ static noinline_for_stack int ethtool_set_rxfh(struct net_device *dev, rxfh.input_xfrm == RXH_XFRM_NO_CHANGE)) return -EINVAL; - if (rxfh.indir_size != ETH_RXFH_INDIR_NO_CHANGE) - indir_bytes = dev_indir_size * sizeof(rxfh_dev.indir[0]); + indir_bytes = dev_indir_size * sizeof(rxfh_dev.indir[0]); - rss_config = kzalloc(indir_bytes + rxfh.key_size, GFP_USER); + rss_config = kzalloc(indir_bytes + dev_key_size, GFP_USER); if (!rss_config) return -ENOMEM; @@ -1475,16 +1474,21 @@ static noinline_for_stack int ethtool_set_rxfh(struct net_device *dev, rxfh_dev.input_xfrm = rxfh.input_xfrm; if (rxfh.rss_context && ops->create_rxfh_context) { - if (create) + if (create) { ret = ops->create_rxfh_context(dev, ctx, &rxfh_dev, extack); - else if (rxfh_dev.rss_delete) + /* Make sure driver populates defaults */ + WARN_ON_ONCE(!ret && !rxfh_dev.key && + !memchr_inv(ethtool_rxfh_context_key(ctx), + 0, ctx->key_size)); + } else if (rxfh_dev.rss_delete) { ret = ops->remove_rxfh_context(dev, ctx, rxfh.rss_context, extack); - else + } else { ret = ops->modify_rxfh_context(dev, ctx, &rxfh_dev, extack); + } } else { ret = ops->set_rxfh(dev, &rxfh_dev, extack); } @@ -1523,6 +1527,22 @@ static noinline_for_stack int ethtool_set_rxfh(struct net_device *dev, kfree(ctx); goto out; } + + /* Fetch the defaults for the old API, in the new API drivers + * should write defaults into ctx themselves. + */ + rxfh_dev.indir = (u32 *)rss_config; + rxfh_dev.indir_size = dev_indir_size; + + rxfh_dev.key = rss_config + indir_bytes; + rxfh_dev.key_size = dev_key_size; + + ret = ops->get_rxfh(dev, &rxfh_dev); + if (WARN_ON(ret)) { + xa_erase(&dev->ethtool->rss_ctx, rxfh.rss_context); + kfree(ctx); + goto out; + } } if (rxfh_dev.rss_delete) { WARN_ON(xa_erase(&dev->ethtool->rss_ctx, rxfh.rss_context) != ctx); @@ -1531,12 +1551,14 @@ static noinline_for_stack int ethtool_set_rxfh(struct net_device *dev, if (rxfh_dev.indir) { for (i = 0; i < dev_indir_size; i++) ethtool_rxfh_context_indir(ctx)[i] = rxfh_dev.indir[i]; - ctx->indir_configured = 1; + ctx->indir_configured = + rxfh.indir_size && + rxfh.indir_size != ETH_RXFH_INDIR_NO_CHANGE; } if (rxfh_dev.key) { memcpy(ethtool_rxfh_context_key(ctx), rxfh_dev.key, dev_key_size); - ctx->key_configured = 1; + ctx->key_configured = !!rxfh.key_size; } if (rxfh_dev.hfunc != ETH_RSS_HASH_NO_CHANGE) ctx->hfunc = rxfh_dev.hfunc; From patchwork Thu Jul 25 22:23:53 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 13742191 X-Patchwork-Delegate: kuba@kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 26D8D149C45 for ; Thu, 25 Jul 2024 22:24:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721946248; cv=none; b=ZGlYRuEL5+jFlXYEU8TFGLQ/21VASWCV9ymHf3f9+dxgnSFH1QqLX9JAcARWuSR76EVUSdhZJHaYcmAc8GfUecLmBBnwsrg2MALvWR0dbd5uCIBb+C7flbCVB2cJvtpxReMEAGyJIULxa16QRbxkI9Nid83FXAQLvP0YcQl4S1A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721946248; c=relaxed/simple; bh=dsSnne8Bi1bYb7EKJ3HIsjhUoGpd07DdslYzg3yiPtU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JybUFvCd3G4ncSwjd/pehhZbNRvVZUIw8ZH2GcRNuCPQD84ZNGn+u+UYsX9OTOGWuoiBmN93hQ/qSJcyDnc2/jpnNTZzlnJBhIzwhFa5Wgwm1w0/NjXhIhfVHs4ZaEwD7LgPevlZoChdLj6zDtowEuGpDYflBF793NlMEcHfM4Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qpxYg4KE; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="qpxYg4KE" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 58C14C4AF12; Thu, 25 Jul 2024 22:24:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721946248; bh=dsSnne8Bi1bYb7EKJ3HIsjhUoGpd07DdslYzg3yiPtU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qpxYg4KEwmApU+4KBRKmk2jVvkcaZl4hGD1MA/q3DxE6AL/t8E8i980Mod3lYAQ8/ INe3oe3wQ3GrrI6D4C48ZTa60oFp/MHKA5M+kyHhOe09VW8vOSOoDUoCEhHUg+JNzs 0uVUnv4cX4dj9RRTZicJO7WvvbNH6lzzbdLWzvsxGbN+pRVZE6Xt5YXW4H91ZyEYih 2WngXHGXGfekiJzwqD2J8edLaTPxQVUkF3kYigWsHQs6BrbMIIn4uKb8vkBPeq34TT VCp4hu5HL5HCX7YdLIvjwH8YP3dGqdRyHk2eL30YKS75C0tYS7aGh9fU8YCOnnG4jy bzfOFaNo/LsKg== From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, michael.chan@broadcom.com, shuah@kernel.org, ecree.xilinx@gmail.com, przemyslaw.kitszel@intel.com, ahmed.zaki@intel.com, andrew@lunn.ch, willemb@google.com, pavan.chebbi@broadcom.com, petrm@nvidia.com, Jakub Kicinski Subject: [PATCH net 5/5] selftests: drv-net: rss_ctx: check for all-zero keys Date: Thu, 25 Jul 2024 15:23:53 -0700 Message-ID: <20240725222353.2993687-6-kuba@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240725222353.2993687-1-kuba@kernel.org> References: <20240725222353.2993687-1-kuba@kernel.org> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org We had a handful of bugs relating to key being either all 0 or just reported incorrectly as all 0. Check for this in the tests. Signed-off-by: Jakub Kicinski Reviewed-by: Petr Machata --- .../selftests/drivers/net/hw/rss_ctx.py | 37 +++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/tools/testing/selftests/drivers/net/hw/rss_ctx.py b/tools/testing/selftests/drivers/net/hw/rss_ctx.py index 931dbc36ca43..011508ca604b 100755 --- a/tools/testing/selftests/drivers/net/hw/rss_ctx.py +++ b/tools/testing/selftests/drivers/net/hw/rss_ctx.py @@ -19,6 +19,15 @@ from lib.py import ethtool, ip, defer, GenerateTraffic, CmdExitFailure return [random.randint(0, 255) for _ in range(length)] +def _rss_key_check(cfg, data=None, context=0): + if data is None: + data = get_rss(cfg, context=context) + if 'rss-hash-key' not in data: + return + non_zero = [x for x in data['rss-hash-key'] if x != 0] + ksft_eq(bool(non_zero), True, comment=f"RSS key is all zero {data['rss-hash-key']}") + + def get_rss(cfg, context=0): return ethtool(f"-x {cfg.ifname} context {context}", json=True)[0] @@ -90,8 +99,9 @@ from lib.py import ethtool, ip, defer, GenerateTraffic, CmdExitFailure def test_rss_key_indir(cfg): """Test basics like updating the main RSS key and indirection table.""" - if len(_get_rx_cnts(cfg)) < 2: - KsftSkipEx("Device has only one queue (or doesn't support queue stats)") + qcnt = len(_get_rx_cnts(cfg)) + if qcnt < 3: + KsftSkipEx("Device has fewer than 3 queues (or doesn't support queue stats)") data = get_rss(cfg) want_keys = ['rss-hash-key', 'rss-hash-function', 'rss-indirection-table'] @@ -101,6 +111,7 @@ from lib.py import ethtool, ip, defer, GenerateTraffic, CmdExitFailure if not data[k]: raise KsftFailEx(f"ethtool results empty for '{k}': {data[k]}") + _rss_key_check(cfg, data=data) key_len = len(data['rss-hash-key']) # Set the key @@ -110,9 +121,26 @@ from lib.py import ethtool, ip, defer, GenerateTraffic, CmdExitFailure data = get_rss(cfg) ksft_eq(key, data['rss-hash-key']) + # Set the indirection table and the key together + key = _rss_key_rand(key_len) + ethtool(f"-X {cfg.ifname} equal 3 hkey " + _rss_key_str(key)) + reset_indir = defer(ethtool, f"-X {cfg.ifname} default") + + data = get_rss(cfg) + _rss_key_check(cfg, data=data) + ksft_eq(0, min(data['rss-indirection-table'])) + ksft_eq(2, max(data['rss-indirection-table'])) + + # Reset indirection table and set the key + key = _rss_key_rand(key_len) + ethtool(f"-X {cfg.ifname} default hkey " + _rss_key_str(key)) + data = get_rss(cfg) + _rss_key_check(cfg, data=data) + ksft_eq(0, min(data['rss-indirection-table'])) + ksft_eq(qcnt - 1, max(data['rss-indirection-table'])) + # Set the indirection table ethtool(f"-X {cfg.ifname} equal 2") - reset_indir = defer(ethtool, f"-X {cfg.ifname} default") data = get_rss(cfg) ksft_eq(0, min(data['rss-indirection-table'])) ksft_eq(1, max(data['rss-indirection-table'])) @@ -317,8 +345,11 @@ from lib.py import ethtool, ip, defer, GenerateTraffic, CmdExitFailure ctx_cnt = i break + _rss_key_check(cfg, context=ctx_id) + if not create_with_cfg: ethtool(f"-X {cfg.ifname} context {ctx_id} {want_cfg}") + _rss_key_check(cfg, context=ctx_id) # Sanity check the context we just created data = get_rss(cfg, ctx_id)