From patchwork Sat Aug 3 04:26:13 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 13752148 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 06A5474424 for ; Sat, 3 Aug 2024 04:26:51 +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=1722659211; cv=none; b=rVmjYhtjioTBed5GPnjv28xEjzqg15B6ipjvgBjrmcRntHqJDTduv6dQDVjujNIHFqtLRdAF5KPAKBsM94uvZfUqhJiMae0qTjm8pOfZybRnmz1tQPAFm+ZUp2XbNSXdIKJIwWIFm4WmJEmajDg5WZmumOe2ypADY2qH68/fgM8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722659211; c=relaxed/simple; bh=yW/rh9EuW5h71pnWQMOaVRRwb6aC5AWoliMKy2fI8pc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=atSE9u8GJY6qvpI4zIFw7S85s5Hk7wvING71d/FFEbVJPY7alL2045hV1EBM7k5MMVQCLjxfJ1OfLvEJmtvtsGTrB/mVBtA1w4wv6AwSztVRXvgefjYGpFAm5tiFFFo+jxqzZMcZ2iYPzJE7X+WNQVVBeK2KDDiIOxzX/IYh1YI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=fevkNsFF; 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="fevkNsFF" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 389B4C4AF0C; Sat, 3 Aug 2024 04:26:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722659210; bh=yW/rh9EuW5h71pnWQMOaVRRwb6aC5AWoliMKy2fI8pc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fevkNsFFJOB3Lbs6afLXO1Wnd62CL9kslCq1erIqAvnbXB//kxN87no+KeW/Ptp2T DBTmtiO9d/HKxwANioOUdT8yOSsrLIxaK1byazftJ4gWNQyi1BK0p5r9Q+koLxQH95 QQL+etkE+0eG4zSAC9HNfYsMIWpHPWuPjG+/HncoPiBU3HzRNSzWgt0RPn1iFh7xKr YFTFu2z6W41yjytfJpiRbRf5AFLpp6ERl1LgO37TGJHj+t5zAaI3kw9P30dF9RNwCI BNQPam6TavlSPs0qz22sHo5/PawQE4FLRKk6Hjy0YtYHnojY330BKccA4Gj4/EfwDk 48N29u8TB4rFg== From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, dxu@dxuuu.xyz, ecree.xilinx@gmail.com, przemyslaw.kitszel@intel.com, donald.hunter@gmail.com, gal.pressman@linux.dev, tariqt@nvidia.com, willemdebruijn.kernel@gmail.com, jdamato@fastly.com, Jakub Kicinski Subject: [PATCH net-next v2 01/12] selftests: drv-net: rss_ctx: add identifier to traffic comments Date: Fri, 2 Aug 2024 21:26:13 -0700 Message-ID: <20240803042624.970352-2-kuba@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240803042624.970352-1-kuba@kernel.org> References: <20240803042624.970352-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 Include the "name" of the context in the comment for traffic checks. Makes it easier to reason about which context failed when we loop over 32 contexts (it may matter if we failed in first vs last, for example). Reviewed-by: Joe Damato Signed-off-by: Jakub Kicinski Reviewed-by: Gal Pressman --- tools/testing/selftests/drivers/net/hw/rss_ctx.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/drivers/net/hw/rss_ctx.py b/tools/testing/selftests/drivers/net/hw/rss_ctx.py index 011508ca604b..1da6b214f4fe 100755 --- a/tools/testing/selftests/drivers/net/hw/rss_ctx.py +++ b/tools/testing/selftests/drivers/net/hw/rss_ctx.py @@ -90,10 +90,10 @@ from lib.py import ethtool, ip, defer, GenerateTraffic, CmdExitFailure ksft_ge(directed, 20000, f"traffic on {name}: " + str(cnts)) if params.get('noise'): ksft_lt(sum(cnts[i] for i in params['noise']), directed / 2, - "traffic on other queues:" + str(cnts)) + f"traffic on other queues ({name})':" + str(cnts)) if params.get('empty'): ksft_eq(sum(cnts[i] for i in params['empty']), 0, - "traffic on inactive queues: " + str(cnts)) + f"traffic on inactive queues ({name}): " + str(cnts)) def test_rss_key_indir(cfg): From patchwork Sat Aug 3 04:26:14 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 13752149 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 1291079B84 for ; Sat, 3 Aug 2024 04:26:51 +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=1722659212; cv=none; b=qiLumVwzXYQwugybBEf/FPGmmMXyQ+KffOBvQ9n/DYhnHSdpxqgAtniU8wh2F/K8xDC7Vocg7vOKi9k6BWeTYRx9UHsSZFG5y4G73RBp5HD9P1sndcj12p6imXTthVAZM0CGYR75XQIxyUHzuHBEoiJc1MYatwbtNKRmRkDzSKk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722659212; c=relaxed/simple; bh=tjLZCzOSAoLPYlpKaJnyShnO8KOdgGjMWgxCcWz2ltQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mpC1DFl+cBv23mDuMr2cZQTqhZ6c8swqQ9jkAU+WmLRJR8FGnI8TAZaSAe5HYJLCJ3PPAZ+xHEzsObNd/U5/gPSWLNCMT/5DrmMC+VOm8zf//NTm7X6/0M8NGJOsrNgyUKhKqBYW9PtaabDxJXeL31TgVjCCIxyUUWljneB36Ds= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=RgT82hpN; 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="RgT82hpN" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 048B9C4AF0A; Sat, 3 Aug 2024 04:26:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722659211; bh=tjLZCzOSAoLPYlpKaJnyShnO8KOdgGjMWgxCcWz2ltQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RgT82hpNDLQDR1UUAMZhKsax+FtmVjyoAy71+Ej1dkKN8jN88oPsaXe+DBE1KUDwG YFnJs0mMyuaj2LCvlACCf2wtjkb397bQFKYXDUcslERdcuaeCKNOdoo5sIr2BxajPN 1lpTZsBqL4kiydYaMufweoSNsc1zh1KLM/4XLmxdP6g/nvS4JAe83n+oSvqdbpWhRo TsOsMZCPpmgqUbRGMU2qB90MuekCr+fwuEEZIThhPvNX3E7BSdPutw0DFBT1xz5OBe 5GySHZgbgrm2y/m40WalrKlXPDIft24xLkm19g6cYftXJkis3vYOay+NO00imrgkvF 2bZ0Z1ifG5k8A== From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, dxu@dxuuu.xyz, ecree.xilinx@gmail.com, przemyslaw.kitszel@intel.com, donald.hunter@gmail.com, gal.pressman@linux.dev, tariqt@nvidia.com, willemdebruijn.kernel@gmail.com, jdamato@fastly.com, Jakub Kicinski , marcin.s.wojtas@gmail.com, linux@armlinux.org.uk Subject: [PATCH net-next v2 02/12] eth: mvpp2: implement new RSS context API Date: Fri, 2 Aug 2024 21:26:14 -0700 Message-ID: <20240803042624.970352-3-kuba@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240803042624.970352-1-kuba@kernel.org> References: <20240803042624.970352-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 Implement the separate create/modify/delete ops for RSS. No problems with IDs - even tho RSS tables are per device the driver already seems to allocate IDs linearly per port. There's a translation table from per-port context ID to device context ID. mvpp2 doesn't have a key for the hash, it defaults to an empty/previous indir table. Compile-tested only. Signed-off-by: Jakub Kicinski --- v2: - copy the default indir table - use ID from the core - fix build issues CC: marcin.s.wojtas@gmail.com CC: linux@armlinux.org.uk --- .../net/ethernet/marvell/mvpp2/mvpp2_cls.c | 18 +--- .../net/ethernet/marvell/mvpp2/mvpp2_cls.h | 2 +- .../net/ethernet/marvell/mvpp2/mvpp2_main.c | 102 +++++++++++++----- 3 files changed, 79 insertions(+), 43 deletions(-) diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c index 40aeaa7bd739..1641791a2d5b 100644 --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c @@ -1522,29 +1522,19 @@ static int mvpp22_rss_context_create(struct mvpp2_port *port, u32 *rss_ctx) return 0; } -int mvpp22_port_rss_ctx_create(struct mvpp2_port *port, u32 *port_ctx) +int mvpp22_port_rss_ctx_create(struct mvpp2_port *port, u32 port_ctx) { u32 rss_ctx; - int ret, i; + int ret; ret = mvpp22_rss_context_create(port, &rss_ctx); if (ret) return ret; - /* Find the first available context number in the port, starting from 1. - * Context 0 on each port is reserved for the default context. - */ - for (i = 1; i < MVPP22_N_RSS_TABLES; i++) { - if (port->rss_ctx[i] < 0) - break; - } - - if (i == MVPP22_N_RSS_TABLES) + if (WARN_ON_ONCE(port->rss_ctx[port_ctx] >= 0)) return -EINVAL; - port->rss_ctx[i] = rss_ctx; - *port_ctx = i; - + port->rss_ctx[port_ctx] = rss_ctx; return 0; } diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.h b/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.h index 663157dc8062..85c9c6e80678 100644 --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.h +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.h @@ -264,7 +264,7 @@ int mvpp22_port_rss_init(struct mvpp2_port *port); int mvpp22_port_rss_enable(struct mvpp2_port *port); int mvpp22_port_rss_disable(struct mvpp2_port *port); -int mvpp22_port_rss_ctx_create(struct mvpp2_port *port, u32 *rss_ctx); +int mvpp22_port_rss_ctx_create(struct mvpp2_port *port, u32 rss_ctx); int mvpp22_port_rss_ctx_delete(struct mvpp2_port *port, u32 rss_ctx); int mvpp22_port_rss_ctx_indir_set(struct mvpp2_port *port, u32 rss_ctx, diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c index 0d62a33afa80..90182f6fd9a1 100644 --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c @@ -5696,38 +5696,80 @@ static int mvpp2_ethtool_get_rxfh(struct net_device *dev, return ret; } +static bool mvpp2_ethtool_rxfh_okay(struct mvpp2_port *port, + const struct ethtool_rxfh_param *rxfh) +{ + if (!mvpp22_rss_is_supported(port)) + return false; + + if (rxfh->hfunc != ETH_RSS_HASH_NO_CHANGE && + rxfh->hfunc != ETH_RSS_HASH_CRC32) + return false; + + if (rxfh->key) + return false; + + return true; +} + +static int mvpp2_create_rxfh_context(struct net_device *dev, + struct ethtool_rxfh_context *ctx, + const struct ethtool_rxfh_param *rxfh, + struct netlink_ext_ack *extack) +{ + struct mvpp2_port *port = netdev_priv(dev); + int ret = 0; + + if (!mvpp2_ethtool_rxfh_okay(port, rxfh)) + return -EOPNOTSUPP; + + ctx->hfunc = ETH_RSS_HASH_CRC32; + + ret = mvpp22_port_rss_ctx_create(port, rxfh->rss_context); + if (ret) + return ret; + + if (!rxfh->indir) + ret = mvpp22_port_rss_ctx_indir_get(port, rxfh->rss_context, + ethtool_rxfh_context_indir(ctx)); + else + ret = mvpp22_port_rss_ctx_indir_set(port, rxfh->rss_context, + rxfh->indir); + return ret; +} + +static int mvpp2_modify_rxfh_context(struct net_device *dev, + struct ethtool_rxfh_context *ctx, + const struct ethtool_rxfh_param *rxfh, + struct netlink_ext_ack *extack) +{ + struct mvpp2_port *port = netdev_priv(dev); + int ret = 0; + + if (!mvpp2_ethtool_rxfh_okay(port, rxfh)) + return -EOPNOTSUPP; + + if (rxfh->indir) + ret = mvpp22_port_rss_ctx_indir_set(port, rxfh->rss_context, + rxfh->indir); + return ret; +} + +static int mvpp2_remove_rxfh_context(struct net_device *dev, + struct ethtool_rxfh_context *ctx, + u32 rss_context, + struct netlink_ext_ack *extack) +{ + struct mvpp2_port *port = netdev_priv(dev); + + return mvpp22_port_rss_ctx_delete(port, rss_context); +} + static int mvpp2_ethtool_set_rxfh(struct net_device *dev, struct ethtool_rxfh_param *rxfh, struct netlink_ext_ack *extack) { - struct mvpp2_port *port = netdev_priv(dev); - u32 *rss_context = &rxfh->rss_context; - int ret = 0; - - if (!mvpp22_rss_is_supported(port)) - return -EOPNOTSUPP; - - if (rxfh->hfunc != ETH_RSS_HASH_NO_CHANGE && - rxfh->hfunc != ETH_RSS_HASH_CRC32) - return -EOPNOTSUPP; - - if (rxfh->key) - return -EOPNOTSUPP; - - if (*rss_context && rxfh->rss_delete) - return mvpp22_port_rss_ctx_delete(port, *rss_context); - - if (*rss_context == ETH_RXFH_CONTEXT_ALLOC) { - ret = mvpp22_port_rss_ctx_create(port, rss_context); - if (ret) - return ret; - } - - if (rxfh->indir) - ret = mvpp22_port_rss_ctx_indir_set(port, *rss_context, - rxfh->indir); - - return ret; + return mvpp2_modify_rxfh_context(dev, NULL, rxfh, extack); } /* Device ops */ @@ -5750,6 +5792,7 @@ static const struct net_device_ops mvpp2_netdev_ops = { static const struct ethtool_ops mvpp2_eth_tool_ops = { .cap_rss_ctx_supported = true, + .rxfh_max_context_id = MVPP22_N_RSS_TABLES, .supported_coalesce_params = ETHTOOL_COALESCE_USECS | ETHTOOL_COALESCE_MAX_FRAMES, .nway_reset = mvpp2_ethtool_nway_reset, @@ -5772,6 +5815,9 @@ static const struct ethtool_ops mvpp2_eth_tool_ops = { .get_rxfh_indir_size = mvpp2_ethtool_get_rxfh_indir_size, .get_rxfh = mvpp2_ethtool_get_rxfh, .set_rxfh = mvpp2_ethtool_set_rxfh, + .create_rxfh_context = mvpp2_create_rxfh_context, + .modify_rxfh_context = mvpp2_modify_rxfh_context, + .remove_rxfh_context = mvpp2_remove_rxfh_context, }; /* Used for PPv2.1, or PPv2.2 with the old Device Tree binding that From patchwork Sat Aug 3 04:26:15 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 13752150 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 D61AF12B17C; Sat, 3 Aug 2024 04:26:52 +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=1722659213; cv=none; b=T4zReXtwWQa1YAgsgcQ+8g1+Ttc9Y4Cx27gHkVPItweMfFr8LEIcymyEknOfGCB4IyJZUV010q8fLbTxN16NBjqeWNP2+mWcGGxa2VTri6yIfms9vWNhytT6oOhL7SqTrEB5SrX6l2shOZXmRz4SYNS2NNyLfRJYWZrhrWoSnIM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722659213; c=relaxed/simple; bh=87XPti6RVqAiNW3eWPIQm2vFmmfDS6ddZiot77zPsWk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rMhk+QXvFkF12DG3AyKygWKaNl29eLechvBitwWYpMM+X7yJLZa5Nh7JXY5x21gw4euOMIManmC5IL490TrG/IDQRi48B0vFVJrQCGwa1yuMrnSAqb2Zr10e8dwxtkBhgpXGFLlBABjE+1eV2fpMwEmyU/z6QYtZxdK4SZ91Ku4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=lfzI7yBB; 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="lfzI7yBB" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CB107C4AF12; Sat, 3 Aug 2024 04:26:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722659212; bh=87XPti6RVqAiNW3eWPIQm2vFmmfDS6ddZiot77zPsWk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lfzI7yBBXFi14uuqoXT2SPOZQKetjPQPCMd4+gd5Q3WC6ez5YSidNSl8yBCsZ51By PdZn6dY5jJb6x0UZFls96PDCicx5veh2NYHDX8ooZxrGz3uaCQs+UMKL4iMv/R58Ax BKwVDTQE7RKthSgfhnRNTd0suBqiIVlqNGKu4yV4EYHn36kMjCUfFNG9Q+jPTyVaQb 9TqeBvyj/aAdcmW/l7ON2A7uAEjkGLU09FF11D90jREAzHtmwxhxruZ+NZ1lGNrD5r p+yUG2LB3CaxmJRSYGzQ20kgmUon1mn1VG5/sqCS6thGN0FGA+BgBXquSEbhdI5SMZ xuF959SmiNp5g== From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, dxu@dxuuu.xyz, ecree.xilinx@gmail.com, przemyslaw.kitszel@intel.com, donald.hunter@gmail.com, gal.pressman@linux.dev, tariqt@nvidia.com, willemdebruijn.kernel@gmail.com, jdamato@fastly.com, Jakub Kicinski , saeedm@nvidia.com, leon@kernel.org, linux-rdma@vger.kernel.org Subject: [PATCH net-next v2 03/12] eth: mlx5: allow disabling queues when RSS contexts exist Date: Fri, 2 Aug 2024 21:26:15 -0700 Message-ID: <20240803042624.970352-4-kuba@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240803042624.970352-1-kuba@kernel.org> References: <20240803042624.970352-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 Since commit 24ac7e544081 ("ethtool: use the rss context XArray in ring deactivation safety-check") core will prevent queues from being disabled while being used by additional RSS contexts. The safety check is no longer necessary, and core will do a more accurate job of only rejecting changes which can actually break things. Reviewed-by: Joe Damato Signed-off-by: Jakub Kicinski Reviewed-by: Gal Pressman --- CC: saeedm@nvidia.com CC: tariqt@nvidia.com CC: leon@kernel.org CC: linux-rdma@vger.kernel.org --- drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c index 36845872ae94..0b941482db30 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c @@ -445,7 +445,6 @@ int mlx5e_ethtool_set_channels(struct mlx5e_priv *priv, unsigned int count = ch->combined_count; struct mlx5e_params new_params; bool arfs_enabled; - int rss_cnt; bool opened; int err = 0; @@ -499,17 +498,6 @@ int mlx5e_ethtool_set_channels(struct mlx5e_priv *priv, goto out; } - /* Don't allow changing the number of channels if non-default RSS contexts exist, - * the kernel doesn't protect against set_channels operations that break them. - */ - rss_cnt = mlx5e_rx_res_rss_cnt(priv->rx_res) - 1; - if (rss_cnt) { - err = -EINVAL; - netdev_err(priv->netdev, "%s: Non-default RSS contexts exist (%d), cannot change the number of channels\n", - __func__, rss_cnt); - goto out; - } - /* Don't allow changing the number of channels if MQPRIO mode channel offload is active, * because it defines a partition over the channels queues. */ From patchwork Sat Aug 3 04:26:16 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 13752151 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 AADE513635D for ; Sat, 3 Aug 2024 04:26:53 +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=1722659213; cv=none; b=uQIMyiouSeDu10KWiSFGHm4Z3oEgzOj26xCzDzLij33VCnPQD3A/4Y7VUGnMrnzt4ojwsoa3CRMAofV1a1rDT3OXO5UUyVCMS16vMpdkm9LtUBhvCjHEL5OTU43ElO+Y0Zi1iqimOsmBDjCAoZwoDXYBMItDUQjOjhL7TrWYI18= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722659213; c=relaxed/simple; bh=9QWTJ3UkjaqqR3IuV/bA/w6aTyOS0uCVQVQTaaRRaS0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=L6YjuqIus4r4f9u0nAWk4zsj7xfz2xgDgVDf1HdiQcIG3py12vgSvlPf3vyEU1V2HbEizlxr3EThmNXvOFuMJin5MzVWFN+snXJJbn/FCoNOtNzWjHreyseDOKhZI4uh/pQ3X8KGGDPb3a7go1EDNwmr6RqmGPTwY1KNgPQqKTk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Q1+zYLzh; 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="Q1+zYLzh" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A3F3BC4AF0A; Sat, 3 Aug 2024 04:26:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722659213; bh=9QWTJ3UkjaqqR3IuV/bA/w6aTyOS0uCVQVQTaaRRaS0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Q1+zYLzhDUpviHVWkGojA44vLbCNFnugg+9fcXVrcwE2Gfi02hRXN6xr8DmPuI5FJ PNLJUi4MGIQVwmeEYr5seaLLv0uLhtQtk7/bPV7txsBPspLRPbxigibNh0BHDcE4RX l2hcb0BBUit3ub9Ae0xy63v6Ce0hHu9qsO6eYiGws6flJNtFUspEtdH5eNzS0LJyNt P77uLuaHcAnJwhVxT8iAXpH3mPec6Y4jQoOJNdrLC/ArkX6n7pH31gWtSBqf9wdY8w jP2piU8yk2hB80eSLC/64Er7uTyfpsd8qbUvvjf2OAXeC6ub+UZ7PfAol7GHZcH19U HljsoyGb3AgHw== From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, dxu@dxuuu.xyz, ecree.xilinx@gmail.com, przemyslaw.kitszel@intel.com, donald.hunter@gmail.com, gal.pressman@linux.dev, tariqt@nvidia.com, willemdebruijn.kernel@gmail.com, jdamato@fastly.com, Jakub Kicinski Subject: [PATCH net-next v2 04/12] ethtool: make ethtool_ops::cap_rss_ctx_supported optional Date: Fri, 2 Aug 2024 21:26:16 -0700 Message-ID: <20240803042624.970352-5-kuba@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240803042624.970352-1-kuba@kernel.org> References: <20240803042624.970352-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 cap_rss_ctx_supported was created because the API for creating and configuring additional contexts is mux'ed with the normal RSS API. Presence of ops does not imply driver can actually support rss_context != 0 (in fact drivers mostly ignore that field). cap_rss_ctx_supported lets core check that the driver is context-aware before calling it. Now that we have .create_rxfh_context, there is no such ambiguity. We can depend on presence of the op. Make setting the bit optional. Reviewed-by: Joe Damato Signed-off-by: Jakub Kicinski Reviewed-by: Gal Pressman Reviewed-by: Edward Cree --- include/linux/ethtool.h | 3 ++- net/ethtool/ioctl.c | 6 ++++-- net/ethtool/rss.c | 3 ++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index 303fda54ef17..55c9f613ab64 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h @@ -727,7 +727,8 @@ struct kernel_ethtool_ts_info { * @cap_link_lanes_supported: indicates if the driver supports lanes * parameter. * @cap_rss_ctx_supported: indicates if the driver supports RSS - * contexts. + * contexts via legacy API, drivers implementing @create_rxfh_context + * do not have to set this bit. * @cap_rss_sym_xor_supported: indicates if the driver supports symmetric-xor * RSS. * @rxfh_indir_space: max size of RSS indirection tables, if indirection table diff --git a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c index 8ca13208d240..52dfb07393a6 100644 --- a/net/ethtool/ioctl.c +++ b/net/ethtool/ioctl.c @@ -1227,7 +1227,8 @@ static noinline_for_stack int ethtool_get_rxfh(struct net_device *dev, if (rxfh.rsvd8[0] || rxfh.rsvd8[1] || rxfh.rsvd32) return -EINVAL; /* Most drivers don't handle rss_context, check it's 0 as well */ - if (rxfh.rss_context && !ops->cap_rss_ctx_supported) + if (rxfh.rss_context && !(ops->cap_rss_ctx_supported || + ops->create_rxfh_context)) return -EOPNOTSUPP; rxfh.indir_size = rxfh_dev.indir_size; @@ -1357,7 +1358,8 @@ static noinline_for_stack int ethtool_set_rxfh(struct net_device *dev, if (rxfh.rsvd8[0] || rxfh.rsvd8[1] || rxfh.rsvd32) return -EINVAL; /* Most drivers don't handle rss_context, check it's 0 as well */ - if (rxfh.rss_context && !ops->cap_rss_ctx_supported) + if (rxfh.rss_context && !(ops->cap_rss_ctx_supported || + ops->create_rxfh_context)) return -EOPNOTSUPP; /* Check input data transformation capabilities */ if (rxfh.input_xfrm && rxfh.input_xfrm != RXH_XFRM_SYM_XOR && diff --git a/net/ethtool/rss.c b/net/ethtool/rss.c index 5c4c4505ab9a..a06bdac8b8a2 100644 --- a/net/ethtool/rss.c +++ b/net/ethtool/rss.c @@ -60,7 +60,8 @@ rss_prepare_data(const struct ethnl_req_info *req_base, return -EOPNOTSUPP; /* Some drivers don't handle rss_context */ - if (request->rss_context && !ops->cap_rss_ctx_supported) + if (request->rss_context && !(ops->cap_rss_ctx_supported || + ops->create_rxfh_context)) return -EOPNOTSUPP; ret = ethnl_ops_begin(dev); From patchwork Sat Aug 3 04:26:17 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 13752152 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 6B1241386D1 for ; Sat, 3 Aug 2024 04:26:54 +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=1722659214; cv=none; b=TYcWoW9+6C6UzohnLX/ZLeebF2OwRzK//2DMnlgUKvuBxpyOw/AKxVSburN/L5nl3GJnYHg7lcE9hJJzzoFNhApVCMgap//P7tHYupBG5tzoP2I+PPWseCRgx2y1GWv5qHiTc/sWS8Z9tZsFrboSix+fhIR+8IvRQcF8dG/MzeM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722659214; c=relaxed/simple; bh=b6C+TXmsKYJsM7SRrfnQqPhEHtccDjBWI+WEuGIioqE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=g/TFOIqEf2p2TXec/jlIpyD+7TVgPymD7R0JeynnyuHRDG7NIA4QiyuMiRMRUO5PyYnXA3Q3dHqhhfEQAypFQxUA9HutjIQlk9FSedAuilGct+0VyFY1rfU9NeMSAF7Ej7eajeNaMuL37Wzs9pJOuf/g8D6EcMNwEtEpzwI5Q1g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=L/oP7CC7; 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="L/oP7CC7" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 62001C4AF0C; Sat, 3 Aug 2024 04:26:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722659214; bh=b6C+TXmsKYJsM7SRrfnQqPhEHtccDjBWI+WEuGIioqE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=L/oP7CC7Or4k26omD3U9Q4kU7+TJxRkkQDxnUi/GLyfgR+iv/rHJ82t8LKhQEUKHy iLfGjtwW03ngzxOV8e7IaBa11N7s825ebkP1HCh688nSjw2A1i6JpiMwUpCxOlgvTF 5gFyLTqMNsTdbGiElmTp7xLP9GwEdEy1SmzVEOlYBe+RY/K1DWgZFYPgrZup/KX/Gi uVu0sxupnPZn12YyX47pKPrmr8e+y3pmCJ/7rv0L161CHS49XCiUjaWmL7tz9oMV8H wFfLpExiU3T4vygEvntKd9l/PyS0647f+X4S4CMRUew6lcGY0ZnUOEvOrAhNfpzKus qEs9td3mehy6A== From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, dxu@dxuuu.xyz, ecree.xilinx@gmail.com, przemyslaw.kitszel@intel.com, donald.hunter@gmail.com, gal.pressman@linux.dev, tariqt@nvidia.com, willemdebruijn.kernel@gmail.com, jdamato@fastly.com, Jakub Kicinski Subject: [PATCH net-next v2 05/12] eth: remove .cap_rss_ctx_supported from updated drivers Date: Fri, 2 Aug 2024 21:26:17 -0700 Message-ID: <20240803042624.970352-6-kuba@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240803042624.970352-1-kuba@kernel.org> References: <20240803042624.970352-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 Remove .cap_rss_ctx_supported from drivers which moved to the new API. This makes it easy to grep for drivers which still need to be converted. Reviewed-by: Joe Damato Signed-off-by: Jakub Kicinski Reviewed-by: Gal Pressman Reviewed-by: Edward Cree --- drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 1 - drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 1 - drivers/net/ethernet/sfc/ef100_ethtool.c | 1 - drivers/net/ethernet/sfc/ethtool.c | 1 - 4 files changed, 4 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c index ab8e3f197e7b..33e8cf0a3764 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c @@ -5289,7 +5289,6 @@ void bnxt_ethtool_free(struct bnxt *bp) const struct ethtool_ops bnxt_ethtool_ops = { .cap_link_lanes_supported = 1, - .cap_rss_ctx_supported = 1, .rxfh_max_context_id = BNXT_MAX_ETH_RSS_CTX, .rxfh_indir_space = BNXT_MAX_RSS_TABLE_ENTRIES_P5, .rxfh_priv_size = sizeof(struct bnxt_rss_ctx), diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c index 90182f6fd9a1..5d5ad8d47e46 100644 --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c @@ -5791,7 +5791,6 @@ static const struct net_device_ops mvpp2_netdev_ops = { }; static const struct ethtool_ops mvpp2_eth_tool_ops = { - .cap_rss_ctx_supported = true, .rxfh_max_context_id = MVPP22_N_RSS_TABLES, .supported_coalesce_params = ETHTOOL_COALESCE_USECS | ETHTOOL_COALESCE_MAX_FRAMES, diff --git a/drivers/net/ethernet/sfc/ef100_ethtool.c b/drivers/net/ethernet/sfc/ef100_ethtool.c index 896ffca4aee2..746b5314acb5 100644 --- a/drivers/net/ethernet/sfc/ef100_ethtool.c +++ b/drivers/net/ethernet/sfc/ef100_ethtool.c @@ -37,7 +37,6 @@ ef100_ethtool_get_ringparam(struct net_device *net_dev, /* Ethtool options available */ const struct ethtool_ops ef100_ethtool_ops = { - .cap_rss_ctx_supported = true, .get_drvinfo = efx_ethtool_get_drvinfo, .get_msglevel = efx_ethtool_get_msglevel, .set_msglevel = efx_ethtool_set_msglevel, diff --git a/drivers/net/ethernet/sfc/ethtool.c b/drivers/net/ethernet/sfc/ethtool.c index 7c887160e2ef..15245720c949 100644 --- a/drivers/net/ethernet/sfc/ethtool.c +++ b/drivers/net/ethernet/sfc/ethtool.c @@ -240,7 +240,6 @@ static int efx_ethtool_get_ts_info(struct net_device *net_dev, } const struct ethtool_ops efx_ethtool_ops = { - .cap_rss_ctx_supported = true, .supported_coalesce_params = ETHTOOL_COALESCE_USECS | ETHTOOL_COALESCE_USECS_IRQ | ETHTOOL_COALESCE_USE_ADAPTIVE_RX, From patchwork Sat Aug 3 04:26:18 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 13752153 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 2FADB79B84 for ; Sat, 3 Aug 2024 04:26:54 +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=1722659215; cv=none; b=Hxfx/u2Mp570x/Cc3+kvQvcgJ/GACtwfWz3+/ourmGyyk/OpyyCJ88L39UK0UWwnhw+rvupRQYLry+6Ug/U5Swo9NeNUqsuEpmoo6hK49eW8RINLyizBk89gGGwMSq74cOmO3jg8VcaqkUfgyDfLCTUqC5Rhb2nRL4G1OF2wO8E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722659215; c=relaxed/simple; bh=w1pRDcwlrI9r0dr/+5NRDEAQ2Q8bMQBO1l7nPzQrmSc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JVxJgLWpJdY6JZwHR/j0lsbFpz1+V8gQ9gEPH4rnimH4j15CsOpt+Hlc4R5r4ScBIfxzchXOQgh0NCpyIhjFiSTFjmD5NkX//R2PLHYv8Bj97BGZ7xR8/t6eSqyFlJlZnyOiWYAMahDphTD65Z3w5x3vTbEhfLdRgkDdgJLnOI8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=vM14DwQ/; 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="vM14DwQ/" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2BFFAC4AF0B; Sat, 3 Aug 2024 04:26:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722659214; bh=w1pRDcwlrI9r0dr/+5NRDEAQ2Q8bMQBO1l7nPzQrmSc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vM14DwQ/7J2ziOv6nqSjNA3tHGjI4iXoAQQosN8clkwkO9zuUNFNPFcHfgbWjq1mA seP5GJURoX9MDbwTCw7ztMlfSxgtzpkLj9D7BxHa4JdGQ6OVflMqfN0yUs893hg0Lv VcjZyEeJKiC8K2L1N5SFAYvxY0j+l6tjN19ws8KYTG8EUsWpndZje7BFLLheVMu06K FXHMrkBgjpfhgXKm0Ph79M3Ym0l0bm3VUqDgJDMto45c6DPYCw971Ah/F1PWEZXyLA sb3ays9V2zyXrM/kh4H0OWm97FEJn8g8Cw0vMQb122Pd2R6USMI9zAPslyZoMS0xsL dlzwfq7TmvdDA== From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, dxu@dxuuu.xyz, ecree.xilinx@gmail.com, przemyslaw.kitszel@intel.com, donald.hunter@gmail.com, gal.pressman@linux.dev, tariqt@nvidia.com, willemdebruijn.kernel@gmail.com, jdamato@fastly.com, Jakub Kicinski Subject: [PATCH net-next v2 06/12] ethtool: rss: don't report key if device doesn't support it Date: Fri, 2 Aug 2024 21:26:18 -0700 Message-ID: <20240803042624.970352-7-kuba@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240803042624.970352-1-kuba@kernel.org> References: <20240803042624.970352-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 marvell/otx2 and mvpp2 do not support setting different keys for different RSS contexts. Contexts have separate indirection tables but key is shared with all other contexts. This is likely fine, indirection table is the most important piece. Don't report the key-related parameters from such drivers. This prevents driver-errors, e.g. otx2 always writes the main key, even when user asks to change per-context key. The second reason is that without this change tracking the keys by the core gets complicated. Even if the driver correctly reject setting key with rss_context != 0, change of the main key would have to be reflected in the XArray for all additional contexts. Since the additional contexts don't have their own keys not including the attributes (in Netlink speak) seems intuitive. ethtool CLI seems to deal with it just fine. Reviewed-by: Joe Damato Signed-off-by: Jakub Kicinski --- .../net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 1 + drivers/net/ethernet/intel/ice/ice_ethtool.c | 1 + .../ethernet/mellanox/mlx5/core/en_ethtool.c | 1 + drivers/net/ethernet/sfc/ef100_ethtool.c | 1 + drivers/net/ethernet/sfc/ethtool.c | 1 + drivers/net/ethernet/sfc/siena/ethtool.c | 1 + include/linux/ethtool.h | 3 +++ net/ethtool/ioctl.c | 25 ++++++++++++++++--- net/ethtool/rss.c | 21 +++++++++++----- 9 files changed, 45 insertions(+), 10 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c index 33e8cf0a3764..77621ccfff5e 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c @@ -5289,6 +5289,7 @@ void bnxt_ethtool_free(struct bnxt *bp) const struct ethtool_ops bnxt_ethtool_ops = { .cap_link_lanes_supported = 1, + .rxfh_per_ctx_key = 1, .rxfh_max_context_id = BNXT_MAX_ETH_RSS_CTX, .rxfh_indir_space = BNXT_MAX_RSS_TABLE_ENTRIES_P5, .rxfh_priv_size = sizeof(struct bnxt_rss_ctx), diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool.c b/drivers/net/ethernet/intel/ice/ice_ethtool.c index 8c990c976132..b5b57926cdc0 100644 --- a/drivers/net/ethernet/intel/ice/ice_ethtool.c +++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c @@ -4725,6 +4725,7 @@ static const struct ethtool_ops ice_ethtool_ops = { ETHTOOL_COALESCE_USE_ADAPTIVE | ETHTOOL_COALESCE_RX_USECS_HIGH, .cap_rss_sym_xor_supported = true, + .rxfh_per_ctx_key = true, .get_link_ksettings = ice_get_link_ksettings, .set_link_ksettings = ice_set_link_ksettings, .get_fec_stats = ice_get_fec_stats, diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c index 0b941482db30..2d514210aaec 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c @@ -2593,6 +2593,7 @@ static void mlx5e_get_ts_stats(struct net_device *netdev, const struct ethtool_ops mlx5e_ethtool_ops = { .cap_rss_ctx_supported = true, + .rxfh_per_ctx_key = true, .supported_coalesce_params = ETHTOOL_COALESCE_USECS | ETHTOOL_COALESCE_MAX_FRAMES | ETHTOOL_COALESCE_USE_ADAPTIVE | diff --git a/drivers/net/ethernet/sfc/ef100_ethtool.c b/drivers/net/ethernet/sfc/ef100_ethtool.c index 746b5314acb5..127b9d6ade6f 100644 --- a/drivers/net/ethernet/sfc/ef100_ethtool.c +++ b/drivers/net/ethernet/sfc/ef100_ethtool.c @@ -58,6 +58,7 @@ const struct ethtool_ops ef100_ethtool_ops = { .get_rxfh_indir_size = efx_ethtool_get_rxfh_indir_size, .get_rxfh_key_size = efx_ethtool_get_rxfh_key_size, + .rxfh_per_ctx_key = 1, .rxfh_priv_size = sizeof(struct efx_rss_context_priv), .get_rxfh = efx_ethtool_get_rxfh, .set_rxfh = efx_ethtool_set_rxfh, diff --git a/drivers/net/ethernet/sfc/ethtool.c b/drivers/net/ethernet/sfc/ethtool.c index 15245720c949..e4d86123b797 100644 --- a/drivers/net/ethernet/sfc/ethtool.c +++ b/drivers/net/ethernet/sfc/ethtool.c @@ -267,6 +267,7 @@ const struct ethtool_ops efx_ethtool_ops = { .set_rxnfc = efx_ethtool_set_rxnfc, .get_rxfh_indir_size = efx_ethtool_get_rxfh_indir_size, .get_rxfh_key_size = efx_ethtool_get_rxfh_key_size, + .rxfh_per_ctx_key = 1, .rxfh_priv_size = sizeof(struct efx_rss_context_priv), .get_rxfh = efx_ethtool_get_rxfh, .set_rxfh = efx_ethtool_set_rxfh, diff --git a/drivers/net/ethernet/sfc/siena/ethtool.c b/drivers/net/ethernet/sfc/siena/ethtool.c index 4c182d4edfc2..6d4e5101433a 100644 --- a/drivers/net/ethernet/sfc/siena/ethtool.c +++ b/drivers/net/ethernet/sfc/siena/ethtool.c @@ -241,6 +241,7 @@ static int efx_ethtool_get_ts_info(struct net_device *net_dev, const struct ethtool_ops efx_siena_ethtool_ops = { .cap_rss_ctx_supported = true, + .rxfh_per_ctx_key = true, .supported_coalesce_params = ETHTOOL_COALESCE_USECS | ETHTOOL_COALESCE_USECS_IRQ | ETHTOOL_COALESCE_USE_ADAPTIVE_RX, diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index 55c9f613ab64..16f72a556fe9 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h @@ -731,6 +731,8 @@ struct kernel_ethtool_ts_info { * do not have to set this bit. * @cap_rss_sym_xor_supported: indicates if the driver supports symmetric-xor * RSS. + * @rxfh_per_ctx_key: device supports setting different RSS key for each + * additional context. * @rxfh_indir_space: max size of RSS indirection tables, if indirection table * size as returned by @get_rxfh_indir_size may change during lifetime * of the device. Leave as 0 if the table size is constant. @@ -952,6 +954,7 @@ struct ethtool_ops { u32 cap_link_lanes_supported:1; u32 cap_rss_ctx_supported:1; u32 cap_rss_sym_xor_supported:1; + u32 rxfh_per_ctx_key:1; u32 rxfh_indir_space; u16 rxfh_key_space; u16 rxfh_priv_size; diff --git a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c index 52dfb07393a6..e32b791f8d1c 100644 --- a/net/ethtool/ioctl.c +++ b/net/ethtool/ioctl.c @@ -1261,10 +1261,15 @@ static noinline_for_stack int ethtool_get_rxfh(struct net_device *dev, if (rxfh_dev.indir) memcpy(rxfh_dev.indir, ethtool_rxfh_context_indir(ctx), indir_bytes); - if (rxfh_dev.key) - memcpy(rxfh_dev.key, ethtool_rxfh_context_key(ctx), - user_key_size); - rxfh_dev.hfunc = ctx->hfunc; + if (!ops->rxfh_per_ctx_key) { + rxfh_dev.key_size = 0; + } else { + if (rxfh_dev.key) + memcpy(rxfh_dev.key, + ethtool_rxfh_context_key(ctx), + user_key_size); + rxfh_dev.hfunc = ctx->hfunc; + } rxfh_dev.input_xfrm = ctx->input_xfrm; ret = 0; } else { @@ -1281,6 +1286,11 @@ static noinline_for_stack int ethtool_get_rxfh(struct net_device *dev, &rxfh_dev.input_xfrm, sizeof(rxfh.input_xfrm))) { ret = -EFAULT; + } else if (copy_to_user(useraddr + + offsetof(struct ethtool_rxfh, key_size), + &rxfh_dev.key_size, + sizeof(rxfh.key_size))) { + ret = -EFAULT; } else if (copy_to_user(useraddr + offsetof(struct ethtool_rxfh, rss_config[0]), rss_config, total_size)) { @@ -1386,6 +1396,13 @@ static noinline_for_stack int ethtool_set_rxfh(struct net_device *dev, indir_bytes = dev_indir_size * sizeof(rxfh_dev.indir[0]); + /* Check settings which may be global rather than per RSS-context */ + if (rxfh.rss_context && !ops->rxfh_per_ctx_key) + if (rxfh.key_size || + (rxfh.hfunc && rxfh.hfunc != ETH_RSS_HASH_NO_CHANGE) || + (rxfh.input_xfrm && rxfh.input_xfrm != RXH_XFRM_NO_CHANGE)) + return -EOPNOTSUPP; + rss_config = kzalloc(indir_bytes + dev_key_size, GFP_USER); if (!rss_config) return -ENOMEM; diff --git a/net/ethtool/rss.c b/net/ethtool/rss.c index a06bdac8b8a2..cd8100d81919 100644 --- a/net/ethtool/rss.c +++ b/net/ethtool/rss.c @@ -10,6 +10,7 @@ struct rss_req_info { struct rss_reply_data { struct ethnl_reply_data base; + bool no_key_fields; u32 indir_size; u32 hkey_size; u32 hfunc; @@ -60,9 +61,12 @@ rss_prepare_data(const struct ethnl_req_info *req_base, return -EOPNOTSUPP; /* Some drivers don't handle rss_context */ - if (request->rss_context && !(ops->cap_rss_ctx_supported || - ops->create_rxfh_context)) - return -EOPNOTSUPP; + if (request->rss_context) { + if (!ops->cap_rss_ctx_supported && !ops->create_rxfh_context) + return -EOPNOTSUPP; + + data->no_key_fields = !ops->rxfh_per_ctx_key; + } ret = ethnl_ops_begin(dev); if (ret < 0) @@ -132,13 +136,18 @@ rss_fill_reply(struct sk_buff *skb, const struct ethnl_req_info *req_base, nla_put_u32(skb, ETHTOOL_A_RSS_CONTEXT, request->rss_context)) return -EMSGSIZE; + if ((data->indir_size && + nla_put(skb, ETHTOOL_A_RSS_INDIR, + sizeof(u32) * data->indir_size, data->indir_table))) + return -EMSGSIZE; + + if (data->no_key_fields) + return 0; + if ((data->hfunc && nla_put_u32(skb, ETHTOOL_A_RSS_HFUNC, data->hfunc)) || (data->input_xfrm && nla_put_u32(skb, ETHTOOL_A_RSS_INPUT_XFRM, data->input_xfrm)) || - (data->indir_size && - nla_put(skb, ETHTOOL_A_RSS_INDIR, - sizeof(u32) * data->indir_size, data->indir_table)) || (data->hkey_size && nla_put(skb, ETHTOOL_A_RSS_HKEY, data->hkey_size, data->hkey))) return -EMSGSIZE; From patchwork Sat Aug 3 04:26:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 13752154 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 EB45A13A3E4 for ; Sat, 3 Aug 2024 04:26:55 +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=1722659216; cv=none; b=HR3FBII30b5iumkbIcAt9iQmWpSsD+uLmFvou+bGzlsin5prh+O23v3u4zli7oCR95CBKJoDq5qao8E1CotEoIIHdEwvM/EMdjH0qI/4VbeLcNbVOgksWGN5b2+rCpgBB4dSNtdmKlgIx/HOXcBK9rCKi6hCnYHQHDe7apW+GqM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722659216; c=relaxed/simple; bh=mern0oxMBhMjRajxmnvl090135JBDOuY+VtdAgYTjBU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bsne3JyZVKBFnvAkpTY78uH/OxBZP09HvtpNL0aNNPR0MdjOvKVDscSPBD6olIp7Ac/Igoa4mC9a5GA9QUbDAZxxRE9Yg1RzeNtXkneJeprM7aEgBOxwtG5YJiMC2HyXHGrskbqHYrMfgWfrlrLc/QA+CQqQ/f73rmcEwC2JlXo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Qg8sNuj9; 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="Qg8sNuj9" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DDA2EC4AF0A; Sat, 3 Aug 2024 04:26:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722659215; bh=mern0oxMBhMjRajxmnvl090135JBDOuY+VtdAgYTjBU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Qg8sNuj9tOlqqzBV2Q0Xk5Hpp0HE2J3j1kI1Pe2nIVTEktWUNDntr/Md7RVAhW9Y5 PNvypnvSdCYtqvA1lvXPrxHoitg5DS9EEGJAPs2hum0HPf8Y0Jrgb+sLRBn8e/cjlz xQslNk81LOt+tmdFws2yIYr4PCQ+2nxnEpYdQKFK+ZRKOVyoonUDc4vwzvVqOzUa7B NspjQiITWhmsKwtMlIGAI7sxAv+a3yfefvgdbW2HR/Y7wL612ThLaP7T83cxXWeuMP fSH8QWVH7dR1aCSDS6/Zb/1oIj+YykJcddcH4luqbfFSoebnheerYpEQJowObxg6EM 3fGZh/qBVAy8Q== From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, dxu@dxuuu.xyz, ecree.xilinx@gmail.com, przemyslaw.kitszel@intel.com, donald.hunter@gmail.com, gal.pressman@linux.dev, tariqt@nvidia.com, willemdebruijn.kernel@gmail.com, jdamato@fastly.com, Jakub Kicinski Subject: [PATCH net-next v2 07/12] ethtool: rss: move the device op invocation out of rss_prepare_data() Date: Fri, 2 Aug 2024 21:26:19 -0700 Message-ID: <20240803042624.970352-8-kuba@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240803042624.970352-1-kuba@kernel.org> References: <20240803042624.970352-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 Factor calling device ops out of rss_prepare_data(). Next patch will add alternative path using xarray. No functional changes. Reviewed-by: Joe Damato Signed-off-by: Jakub Kicinski --- net/ethtool/rss.c | 43 +++++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/net/ethtool/rss.c b/net/ethtool/rss.c index cd8100d81919..5c477cc36251 100644 --- a/net/ethtool/rss.c +++ b/net/ethtool/rss.c @@ -43,13 +43,9 @@ rss_parse_request(struct ethnl_req_info *req_info, struct nlattr **tb, } static int -rss_prepare_data(const struct ethnl_req_info *req_base, - struct ethnl_reply_data *reply_base, - const struct genl_info *info) +rss_prepare_get(const struct rss_req_info *request, struct net_device *dev, + struct rss_reply_data *data, const struct genl_info *info) { - struct rss_reply_data *data = RSS_REPDATA(reply_base); - struct rss_req_info *request = RSS_REQINFO(req_base); - struct net_device *dev = reply_base->dev; struct ethtool_rxfh_param rxfh = {}; const struct ethtool_ops *ops; u32 total_size, indir_bytes; @@ -57,16 +53,6 @@ rss_prepare_data(const struct ethnl_req_info *req_base, int ret; ops = dev->ethtool_ops; - if (!ops->get_rxfh) - return -EOPNOTSUPP; - - /* Some drivers don't handle rss_context */ - if (request->rss_context) { - if (!ops->cap_rss_ctx_supported && !ops->create_rxfh_context) - return -EOPNOTSUPP; - - data->no_key_fields = !ops->rxfh_per_ctx_key; - } ret = ethnl_ops_begin(dev); if (ret < 0) @@ -109,6 +95,31 @@ rss_prepare_data(const struct ethnl_req_info *req_base, return ret; } +static int +rss_prepare_data(const struct ethnl_req_info *req_base, + struct ethnl_reply_data *reply_base, + const struct genl_info *info) +{ + struct rss_reply_data *data = RSS_REPDATA(reply_base); + struct rss_req_info *request = RSS_REQINFO(req_base); + struct net_device *dev = reply_base->dev; + const struct ethtool_ops *ops; + + ops = dev->ethtool_ops; + if (!ops->get_rxfh) + return -EOPNOTSUPP; + + /* Some drivers don't handle rss_context */ + if (request->rss_context) { + if (!ops->cap_rss_ctx_supported && !ops->create_rxfh_context) + return -EOPNOTSUPP; + + data->no_key_fields = !ops->rxfh_per_ctx_key; + } + + return rss_prepare_get(request, dev, data, info); +} + static int rss_reply_size(const struct ethnl_req_info *req_base, const struct ethnl_reply_data *reply_base) From patchwork Sat Aug 3 04:26:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 13752155 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 6A6CC13A40D for ; Sat, 3 Aug 2024 04:26:56 +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=1722659216; cv=none; b=hMJaEDV0YgPBsOthyjYEvMJ8q92KJaTJ0nVpXMXe1t2XhFzxPUCoxGnQkbqlZKJJrPhZqQpMVQBC3mz7VDUgE5GKyCb5IrRUmSx1m0NJ3A4t9bgHZGfv2JubZXoO3KiJKQ1xin+1flRpn7qPOu3XplPKrjjLMx3utx65cHB9+4c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722659216; c=relaxed/simple; bh=GibBjpY/o+oprt8Xjb2We0hOv2ayFYDQhCxpFJZvF4U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UCN9cguBJhVDGEYuc/+20sLKNbygss5IF5n6SPAn/7h4m/zm4CSvUfLeOwxllg6Prmtv6dtHJZYzYEVDGkt/ztRvIsqeDAnylLTbFM65ZKb3iHWNZJtkGCq4p57VzHxcBBDaQSx4et/968qvceVpyhMlG1JkOjeEl4Rk54k9tEY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=nVTU+OI2; 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="nVTU+OI2" Received: by smtp.kernel.org (Postfix) with ESMTPSA id AED95C4AF13; Sat, 3 Aug 2024 04:26:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722659216; bh=GibBjpY/o+oprt8Xjb2We0hOv2ayFYDQhCxpFJZvF4U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=nVTU+OI2YgnoasKWQFIkPBhMeAQYfSBwVNUzCdcylnH5/bD/aZjzESSPKCFaz/eej CeJRioTKLXq2MrrsrHHgJwlMVrs8bI11arNOrQYa1JLFxfFS1K1Tz8MBc9QrdQb53F d9AxC1CG6EakQVIw9VEIYFTOw6CwG97q0ofNkPQcC8eKged6FNjVRWlCz3CbbGaItv Fytf9t1j2DeCjKrQSTUDdNckSap2UxiRV2SzS8kxSNkAICqUMbsMAOh2oMeOy0FQUP 6g/OKlgpEH0JBtYdVUnJRyabEuIl8atv7bvp3tet4wA433aJOVvRTX96hsBgl+z6S+ 2p2OZH++Ylg5w== From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, dxu@dxuuu.xyz, ecree.xilinx@gmail.com, przemyslaw.kitszel@intel.com, donald.hunter@gmail.com, gal.pressman@linux.dev, tariqt@nvidia.com, willemdebruijn.kernel@gmail.com, jdamato@fastly.com, Jakub Kicinski Subject: [PATCH net-next v2 08/12] ethtool: rss: report info about additional contexts from XArray Date: Fri, 2 Aug 2024 21:26:20 -0700 Message-ID: <20240803042624.970352-9-kuba@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240803042624.970352-1-kuba@kernel.org> References: <20240803042624.970352-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 IOCTL already uses the XArray when reporting info about additional contexts. Do the same thing in netlink code. Reviewed-by: Joe Damato Signed-off-by: Jakub Kicinski Reviewed-by: Edward Cree --- net/ethtool/rss.c | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/net/ethtool/rss.c b/net/ethtool/rss.c index 5c477cc36251..023782ca1230 100644 --- a/net/ethtool/rss.c +++ b/net/ethtool/rss.c @@ -82,7 +82,6 @@ rss_prepare_get(const struct rss_req_info *request, struct net_device *dev, rxfh.indir = data->indir_table; rxfh.key_size = data->hkey_size; rxfh.key = data->hkey; - rxfh.rss_context = request->rss_context; ret = ops->get_rxfh(dev, &rxfh); if (ret) @@ -95,6 +94,41 @@ rss_prepare_get(const struct rss_req_info *request, struct net_device *dev, return ret; } +static int +rss_prepare_ctx(const struct rss_req_info *request, struct net_device *dev, + struct rss_reply_data *data, const struct genl_info *info) +{ + struct ethtool_rxfh_context *ctx; + u32 total_size, indir_bytes; + u8 *rss_config; + + ctx = xa_load(&dev->ethtool->rss_ctx, request->rss_context); + if (!ctx) + return -ENOENT; + + data->indir_size = ctx->indir_size; + data->hkey_size = ctx->key_size; + data->hfunc = ctx->hfunc; + data->input_xfrm = ctx->input_xfrm; + + indir_bytes = data->indir_size * sizeof(u32); + total_size = indir_bytes + data->hkey_size; + rss_config = kzalloc(total_size, GFP_KERNEL); + if (!rss_config) + return -ENOMEM; + + data->indir_table = (u32 *)rss_config; + memcpy(data->indir_table, ethtool_rxfh_context_indir(ctx), indir_bytes); + + if (data->hkey_size) { + data->hkey = rss_config + indir_bytes; + memcpy(data->hkey, ethtool_rxfh_context_key(ctx), + data->hkey_size); + } + + return 0; +} + static int rss_prepare_data(const struct ethnl_req_info *req_base, struct ethnl_reply_data *reply_base, @@ -115,6 +149,7 @@ rss_prepare_data(const struct ethnl_req_info *req_base, return -EOPNOTSUPP; data->no_key_fields = !ops->rxfh_per_ctx_key; + return rss_prepare_ctx(request, dev, data, info); } return rss_prepare_get(request, dev, data, info); From patchwork Sat Aug 3 04:26:21 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 13752156 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 7A56D13AA27 for ; Sat, 3 Aug 2024 04:26:57 +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=1722659217; cv=none; b=ExlWoWuRHetPIhRHiHn7l463MsjeNzKSU+6T/QSqgshahwZAxfUQaYawxtd23QPgRfTTUQmNkZ7qWEMthiy7r29mE+eDbv0stgQSc1BctHMORARnSTTLyn4cWWbearx8dSsugbqqykCqeTtADqEEnyJqkjfTYASxQTMyOkjCDho= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722659217; c=relaxed/simple; bh=dsI44HnnbM8/pEEg9gFV1THg4aAyCd5fuqN/kU8GyDA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IC+8y9gE54CXjXa6JvlF1AYosUViTPdQE8uhWRQK1HMoNYryQ9E+AZVTC9u8EH/5diwhKiQloqtZZqLo9OFlkRaIwwNCUI5z31FOqpGsoqOuBI/9tO0RNiuZcIGavUrq1WzkQ/zDkYYPsAyp+32tY2oPtiMw3AHFO1Aj2ZJRWcs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=herrzlyu; 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="herrzlyu" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 78093C4AF0A; Sat, 3 Aug 2024 04:26:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722659217; bh=dsI44HnnbM8/pEEg9gFV1THg4aAyCd5fuqN/kU8GyDA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=herrzlyut3i5i9xc0SYCOd4ZMMyHU+tFQyBmRSiCjBfr4AyDaRqkQSPbHgPd/FT2Q PvjmjPQBAviChJ52kpSPO5CZkW/f4eeKCX/LZuYbLDq/Ne/rKkJE0N+z8k1Oq7g5Ri 2ifJ5Tx7V3D78cgd9NHnHfrl8/us902PBrISwuiUKRlXAm17xjNAClLr0pGCfNRfsY bH+6P4n0j6rdO6J1HKMUw1gAgv151vDMMrOYrg6r4T+JD8r36iPHnoZe9M/gONPIk9 MxKsPYLmoVkzkDAixbk/brj4wVqSrm5U6Pv7o2W1G49E5GRBt/oGsmJUHwLoAicOgh x8BJEHtdIWccA== From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, dxu@dxuuu.xyz, ecree.xilinx@gmail.com, przemyslaw.kitszel@intel.com, donald.hunter@gmail.com, gal.pressman@linux.dev, tariqt@nvidia.com, willemdebruijn.kernel@gmail.com, jdamato@fastly.com, Jakub Kicinski Subject: [PATCH net-next v2 09/12] ethtool: rss: support dumping RSS contexts Date: Fri, 2 Aug 2024 21:26:21 -0700 Message-ID: <20240803042624.970352-10-kuba@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240803042624.970352-1-kuba@kernel.org> References: <20240803042624.970352-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 Now that we track RSS contexts in the core we can easily dump them. This is a major introspection improvement, as previously the only way to find all contexts would be to try all ids (of which there may be 2^32 - 1). Signed-off-by: Jakub Kicinski Reviewed-by: Joe Damato --- Documentation/netlink/specs/ethtool.yaml | 9 +- net/ethtool/netlink.c | 2 + net/ethtool/netlink.h | 2 + net/ethtool/rss.c | 133 +++++++++++++++++++++++ 4 files changed, 144 insertions(+), 2 deletions(-) diff --git a/Documentation/netlink/specs/ethtool.yaml b/Documentation/netlink/specs/ethtool.yaml index ea21fe135b97..cf69eedae51d 100644 --- a/Documentation/netlink/specs/ethtool.yaml +++ b/Documentation/netlink/specs/ethtool.yaml @@ -1749,12 +1749,12 @@ doc: Partial family for Ethtool Netlink. attribute-set: rss - do: &rss-get-op + do: request: attributes: - header - context - reply: + reply: &rss-reply attributes: - header - context @@ -1762,6 +1762,11 @@ doc: Partial family for Ethtool Netlink. - indir - hkey - input_xfrm + dump: + request: + attributes: + - header + reply: *rss-reply - name: plca-get-cfg doc: Get PLCA params. diff --git a/net/ethtool/netlink.c b/net/ethtool/netlink.c index cb1eea00e349..041548e5f5e6 100644 --- a/net/ethtool/netlink.c +++ b/net/ethtool/netlink.c @@ -1128,6 +1128,8 @@ static const struct genl_ops ethtool_genl_ops[] = { { .cmd = ETHTOOL_MSG_RSS_GET, .doit = ethnl_default_doit, + .start = ethnl_rss_dump_start, + .dumpit = ethnl_rss_dumpit, .policy = ethnl_rss_get_policy, .maxattr = ARRAY_SIZE(ethnl_rss_get_policy) - 1, }, diff --git a/net/ethtool/netlink.h b/net/ethtool/netlink.h index 46ec273a87c5..919371383b23 100644 --- a/net/ethtool/netlink.h +++ b/net/ethtool/netlink.h @@ -464,6 +464,8 @@ int ethnl_tunnel_info_doit(struct sk_buff *skb, struct genl_info *info); int ethnl_tunnel_info_start(struct netlink_callback *cb); int ethnl_tunnel_info_dumpit(struct sk_buff *skb, struct netlink_callback *cb); int ethnl_act_module_fw_flash(struct sk_buff *skb, struct genl_info *info); +int ethnl_rss_dump_start(struct netlink_callback *cb); +int ethnl_rss_dumpit(struct sk_buff *skb, struct netlink_callback *cb); extern const char stats_std_names[__ETHTOOL_STATS_CNT][ETH_GSTRING_LEN]; extern const char stats_eth_phy_names[__ETHTOOL_A_STATS_ETH_PHY_CNT][ETH_GSTRING_LEN]; diff --git a/net/ethtool/rss.c b/net/ethtool/rss.c index 023782ca1230..62e7b6fe605d 100644 --- a/net/ethtool/rss.c +++ b/net/ethtool/rss.c @@ -208,6 +208,139 @@ static void rss_cleanup_data(struct ethnl_reply_data *reply_base) kfree(data->indir_table); } +struct rss_nl_dump_ctx { + unsigned long ifindex; + unsigned long ctx_idx; + + unsigned int one_ifindex; +}; + +static struct rss_nl_dump_ctx *rss_dump_ctx(struct netlink_callback *cb) +{ + NL_ASSERT_DUMP_CTX_FITS(struct rss_nl_dump_ctx); + + return (struct rss_nl_dump_ctx *)cb->ctx; +} + +int ethnl_rss_dump_start(struct netlink_callback *cb) +{ + const struct genl_info *info = genl_info_dump(cb); + struct rss_nl_dump_ctx *ctx = rss_dump_ctx(cb); + struct ethnl_req_info req_info = {}; + struct nlattr **tb = info->attrs; + int ret; + + /* Filtering by context not supported */ + if (tb[ETHTOOL_A_RSS_CONTEXT]) { + NL_SET_BAD_ATTR(info->extack, tb[ETHTOOL_A_RSS_CONTEXT]); + return -EINVAL; + } + + ret = ethnl_parse_header_dev_get(&req_info, + tb[ETHTOOL_A_RSS_HEADER], + sock_net(cb->skb->sk), cb->extack, + false); + if (req_info.dev) { + ctx->one_ifindex = req_info.dev->ifindex; + ctx->ifindex = ctx->one_ifindex; + ethnl_parse_header_dev_put(&req_info); + req_info.dev = NULL; + } + + return ret; +} + +static int +rss_dump_one_ctx(struct sk_buff *skb, struct netlink_callback *cb, + struct net_device *dev, u32 rss_context) +{ + const struct genl_info *info = genl_info_dump(cb); + struct rss_reply_data data = {}; + struct rss_req_info req = {}; + void *ehdr; + int ret; + + req.rss_context = rss_context; + + ehdr = ethnl_dump_put(skb, cb, ETHTOOL_MSG_RSS_GET_REPLY); + if (!ehdr) + return -EMSGSIZE; + + ret = ethnl_fill_reply_header(skb, dev, ETHTOOL_A_RSS_HEADER); + if (ret < 0) + goto err_cancel; + + if (!rss_context) + ret = rss_prepare_get(&req, dev, &data, info); + else + ret = rss_prepare_ctx(&req, dev, &data, info); + if (ret) + goto err_cancel; + + ret = rss_fill_reply(skb, &req.base, &data.base); + if (ret) + goto err_cleanup; + genlmsg_end(skb, ehdr); + + rss_cleanup_data(&data.base); + return 0; + +err_cleanup: + rss_cleanup_data(&data.base); +err_cancel: + genlmsg_cancel(skb, ehdr); + return ret; +} + +static int +rss_dump_one_dev(struct sk_buff *skb, struct netlink_callback *cb, + struct net_device *dev) +{ + struct rss_nl_dump_ctx *ctx = rss_dump_ctx(cb); + int ret; + + if (!dev->ethtool_ops->get_rxfh) + return 0; + + if (!ctx->ctx_idx) { + ret = rss_dump_one_ctx(skb, cb, dev, 0); + if (ret) + return ret; + ctx->ctx_idx++; + } + + for (; xa_find(&dev->ethtool->rss_ctx, &ctx->ctx_idx, + ULONG_MAX, XA_PRESENT); ctx->ctx_idx++) { + ret = rss_dump_one_ctx(skb, cb, dev, ctx->ctx_idx); + if (ret) + return ret; + } + ctx->ctx_idx = 0; + + return 0; +} + +int ethnl_rss_dumpit(struct sk_buff *skb, struct netlink_callback *cb) +{ + struct rss_nl_dump_ctx *ctx = rss_dump_ctx(cb); + struct net *net = sock_net(skb->sk); + struct net_device *dev; + int ret = 0; + + rtnl_lock(); + for_each_netdev_dump(net, dev, ctx->ifindex) { + if (ctx->one_ifindex && ctx->one_ifindex != ctx->ifindex) + break; + + ret = rss_dump_one_dev(skb, cb, dev); + if (ret) + break; + } + rtnl_unlock(); + + return ret; +} + const struct ethnl_request_ops ethnl_rss_request_ops = { .request_cmd = ETHTOOL_MSG_RSS_GET, .reply_cmd = ETHTOOL_MSG_RSS_GET_REPLY, From patchwork Sat Aug 3 04:26:22 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 13752157 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 3BBA413AA45 for ; Sat, 3 Aug 2024 04:26:57 +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=1722659218; cv=none; b=P24i7fkm8479SRHAEfvnh/2qjiLNBvBCdRM0RTWDeeTQXKF9kiodRMUvyUQRgjAT9xZfsrvQVT4llJHG3y1euBGsjzg15PKMuHkQDv5IBd/+Ss1jcFi00hy/4H+bqsbfjckzzZHD3kzpKWF1wsvslneA/VrkmJHKQPooxlKDVkw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722659218; c=relaxed/simple; bh=cyUTzafVte4Ok26ws+m3VmOISRt34XVwsM/b2oWy5Ds=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XpiAYFQvvNpw1aKfDUQPc6iC9rN0LcPUaksbBSblQLF3shbyVf9I99uoiCI8djZcHRP95iDuMrQqrk0I5zRrbtZldUOeNYSUPVW3+RkDpp7vZYQaGHr68NtX94vrfqMPK0Z5aGJROLW3nfWHP/rTOOL4iNeZncUEKUBDd/hHvQA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=EQrkZD6h; 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="EQrkZD6h" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 35D2AC4AF0B; Sat, 3 Aug 2024 04:26:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722659217; bh=cyUTzafVte4Ok26ws+m3VmOISRt34XVwsM/b2oWy5Ds=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EQrkZD6h2+YJX+cWeiJLFpSoJFBGJ8mw+h/zuAAu/LuuVZVdBPrLQbhI/dsAD5J4Z etM+/4RRgl9/ujCzXlTY6SYPMGh4Flt3c/RrR617zTmHwQBbVvzYd+ySsVQLkP8W3V yQtbpfIWjgsazZNqk1NpCLxFzWqj/Wh9W5hde4EjIpnJxAKtldQMmEBVZzvf5XaQyf UpCWXuqLyRRbygVCIXdP7S0ysTacBVNSq7WEPFv/GcqmfKh8wEu6xWSpLqqCHV9K6w itGiaVSwI9N0XhQJrmhb85EP5afvc9NplV0j+zSwdRat6sZyFtUAEWid7AL5YAoCaB 8oRYBYiwg7Q6Q== From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, dxu@dxuuu.xyz, ecree.xilinx@gmail.com, przemyslaw.kitszel@intel.com, donald.hunter@gmail.com, gal.pressman@linux.dev, tariqt@nvidia.com, willemdebruijn.kernel@gmail.com, jdamato@fastly.com, Jakub Kicinski Subject: [PATCH net-next v2 10/12] ethtool: rss: support skipping contexts during dump Date: Fri, 2 Aug 2024 21:26:22 -0700 Message-ID: <20240803042624.970352-11-kuba@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240803042624.970352-1-kuba@kernel.org> References: <20240803042624.970352-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 Applications may want to deal with dynamic RSS contexts only. So dumping context 0 will be counter-productive for them. Support starting the dump from a given context ID. Alternative would be to implement a dump flag to skip just context 0, not sure which is better... Signed-off-by: Jakub Kicinski Reviewed-by: Edward Cree --- Documentation/netlink/specs/ethtool.yaml | 4 ++++ Documentation/networking/ethtool-netlink.rst | 12 ++++++++++-- include/uapi/linux/ethtool_netlink.h | 1 + net/ethtool/netlink.h | 2 +- net/ethtool/rss.c | 12 +++++++++++- 5 files changed, 27 insertions(+), 4 deletions(-) diff --git a/Documentation/netlink/specs/ethtool.yaml b/Documentation/netlink/specs/ethtool.yaml index cf69eedae51d..4c2334c213b0 100644 --- a/Documentation/netlink/specs/ethtool.yaml +++ b/Documentation/netlink/specs/ethtool.yaml @@ -1028,6 +1028,9 @@ doc: Partial family for Ethtool Netlink. - name: input_xfrm type: u32 + - + name: start-context + type: u32 - name: plca attributes: @@ -1766,6 +1769,7 @@ doc: Partial family for Ethtool Netlink. request: attributes: - header + - start-context reply: *rss-reply - name: plca-get-cfg diff --git a/Documentation/networking/ethtool-netlink.rst b/Documentation/networking/ethtool-netlink.rst index d5f246aceb9f..82c5542c80ce 100644 --- a/Documentation/networking/ethtool-netlink.rst +++ b/Documentation/networking/ethtool-netlink.rst @@ -1866,10 +1866,18 @@ RSS context of an interface similar to ``ETHTOOL_GRSSH`` ioctl request. Request contents: -===================================== ====== ========================== +===================================== ====== ============================ ``ETHTOOL_A_RSS_HEADER`` nested request header ``ETHTOOL_A_RSS_CONTEXT`` u32 context number -===================================== ====== ========================== + ``ETHTOOL_A_RSS_START_CONTEXT`` u32 start context number (dumps) +===================================== ====== ============================ + +``ETHTOOL_A_RSS_CONTEXT`` specifies which RSS context number to query, +if not set context 0 (the main context) is queried. Dumps can be filtered +by device (only listing contexts of a given netdev). Filtering single +context number is not supported but ``ETHTOOL_A_RSS_START_CONTEXT`` +can be used to start dumping context from the given number (primarily +used to ignore context 0s and only dump additional contexts). Kernel response contents: diff --git a/include/uapi/linux/ethtool_netlink.h b/include/uapi/linux/ethtool_netlink.h index 6d5bdcc67631..93c57525a975 100644 --- a/include/uapi/linux/ethtool_netlink.h +++ b/include/uapi/linux/ethtool_netlink.h @@ -965,6 +965,7 @@ enum { ETHTOOL_A_RSS_INDIR, /* binary */ ETHTOOL_A_RSS_HKEY, /* binary */ ETHTOOL_A_RSS_INPUT_XFRM, /* u32 */ + ETHTOOL_A_RSS_START_CONTEXT, /* u32 */ __ETHTOOL_A_RSS_CNT, ETHTOOL_A_RSS_MAX = (__ETHTOOL_A_RSS_CNT - 1), diff --git a/net/ethtool/netlink.h b/net/ethtool/netlink.h index 919371383b23..236c189fc968 100644 --- a/net/ethtool/netlink.h +++ b/net/ethtool/netlink.h @@ -449,7 +449,7 @@ extern const struct nla_policy ethnl_module_get_policy[ETHTOOL_A_MODULE_HEADER + extern const struct nla_policy ethnl_module_set_policy[ETHTOOL_A_MODULE_POWER_MODE_POLICY + 1]; extern const struct nla_policy ethnl_pse_get_policy[ETHTOOL_A_PSE_HEADER + 1]; extern const struct nla_policy ethnl_pse_set_policy[ETHTOOL_A_PSE_MAX + 1]; -extern const struct nla_policy ethnl_rss_get_policy[ETHTOOL_A_RSS_CONTEXT + 1]; +extern const struct nla_policy ethnl_rss_get_policy[ETHTOOL_A_RSS_START_CONTEXT + 1]; extern const struct nla_policy ethnl_plca_get_cfg_policy[ETHTOOL_A_PLCA_HEADER + 1]; extern const struct nla_policy ethnl_plca_set_cfg_policy[ETHTOOL_A_PLCA_MAX + 1]; extern const struct nla_policy ethnl_plca_get_status_policy[ETHTOOL_A_PLCA_HEADER + 1]; diff --git a/net/ethtool/rss.c b/net/ethtool/rss.c index 62e7b6fe605d..659468965de7 100644 --- a/net/ethtool/rss.c +++ b/net/ethtool/rss.c @@ -28,6 +28,7 @@ struct rss_reply_data { const struct nla_policy ethnl_rss_get_policy[] = { [ETHTOOL_A_RSS_HEADER] = NLA_POLICY_NESTED(ethnl_header_policy), [ETHTOOL_A_RSS_CONTEXT] = { .type = NLA_U32 }, + [ETHTOOL_A_RSS_START_CONTEXT] = { .type = NLA_U32 }, }; static int @@ -38,6 +39,10 @@ rss_parse_request(struct ethnl_req_info *req_info, struct nlattr **tb, if (tb[ETHTOOL_A_RSS_CONTEXT]) request->rss_context = nla_get_u32(tb[ETHTOOL_A_RSS_CONTEXT]); + if (tb[ETHTOOL_A_RSS_START_CONTEXT]) { + NL_SET_BAD_ATTR(extack, tb[ETHTOOL_A_RSS_START_CONTEXT]); + return -EINVAL; + } return 0; } @@ -213,6 +218,7 @@ struct rss_nl_dump_ctx { unsigned long ctx_idx; unsigned int one_ifindex; + unsigned int start_ctx; }; static struct rss_nl_dump_ctx *rss_dump_ctx(struct netlink_callback *cb) @@ -235,6 +241,10 @@ int ethnl_rss_dump_start(struct netlink_callback *cb) NL_SET_BAD_ATTR(info->extack, tb[ETHTOOL_A_RSS_CONTEXT]); return -EINVAL; } + if (tb[ETHTOOL_A_RSS_START_CONTEXT]) { + ctx->start_ctx = nla_get_u32(tb[ETHTOOL_A_RSS_START_CONTEXT]); + ctx->ctx_idx = ctx->start_ctx; + } ret = ethnl_parse_header_dev_get(&req_info, tb[ETHTOOL_A_RSS_HEADER], @@ -315,7 +325,7 @@ rss_dump_one_dev(struct sk_buff *skb, struct netlink_callback *cb, if (ret) return ret; } - ctx->ctx_idx = 0; + ctx->ctx_idx = ctx->start_ctx; return 0; } From patchwork Sat Aug 3 04:26:23 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 13752158 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 C96E9762E0 for ; Sat, 3 Aug 2024 04:26:58 +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=1722659218; cv=none; b=pJ0uAkGq+XvgEJke6SZxrsfs+HGlNlWnmLAIBv9HCxAk7VkYhG54vBL6rhXbTzkX1Y5t91YIxVVOKMLLJYCfeoEQ0WgBNLo/wzLp9QpWaR33vVcG1obZ8VsBLrGbUBaPX9qBfD1pGoVEAlY+j9aGzJcK6Ry48YeBnrLJBrrk038= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722659218; c=relaxed/simple; bh=dI7gId/L8B6nMeZZXK6onHZD2A995y4+iTbvKlETJAA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nyD0Yc4zXUsxr1pxa6xxoetYcwBnJgpGbv7p2fH2RCJLsJJzCdqeempwGZgBVn28k3mSh5m6YcpXJYPBYaepuRigUJKXk5svWjEVZhw0X4XFPQTCJAfRDAFmQ8zpRNcDvd2Br59wg38EddTdMZTQIute2bmU7hkwfEOUt1kaik8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=OgdlmrnB; 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="OgdlmrnB" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DDC27C4AF0E; Sat, 3 Aug 2024 04:26:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722659218; bh=dI7gId/L8B6nMeZZXK6onHZD2A995y4+iTbvKlETJAA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OgdlmrnBc1tcIlkL336v31Rf7LSYcGpdDqMm7wfOikaxzMwK7XVx86wUVT9lbtUIv y5RTcwE9zN0PSDEVuGmO0upsBS3Dx+KxxwAdBujri88or2jQxi0nHa2TqKUphSKZsa T4cZPdNIBxdZcPBDWGI+81ny4Xwj+P7tdd3FvzxlL4jjqnIgrLLbgx4Ddlaawerdph n9ekWiHJhPkB+0cH9Q/DhwHA5U/z4PJlHtc3qQuN4luWgdnOIptfwhozONxzo4/+OW IF2ISDkjjSypgLbWFl6HivsKOfI6NxM1PZcLCajEbQa+l1zM4lGZr89JliSTtLpyw1 JmDnJYVWsa+Jg== From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, dxu@dxuuu.xyz, ecree.xilinx@gmail.com, przemyslaw.kitszel@intel.com, donald.hunter@gmail.com, gal.pressman@linux.dev, tariqt@nvidia.com, willemdebruijn.kernel@gmail.com, jdamato@fastly.com, Jakub Kicinski Subject: [PATCH net-next v2 11/12] netlink: specs: decode indirection table as u32 array Date: Fri, 2 Aug 2024 21:26:23 -0700 Message-ID: <20240803042624.970352-12-kuba@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240803042624.970352-1-kuba@kernel.org> References: <20240803042624.970352-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 Indirection table is dumped as a raw u32 array, decode it. It's tempting to decode hash key, too, but it is an actual bitstream, so leave it be for now. Signed-off-by: Jakub Kicinski Reviewed-by: Joe Damato --- Documentation/netlink/specs/ethtool.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/Documentation/netlink/specs/ethtool.yaml b/Documentation/netlink/specs/ethtool.yaml index 4c2334c213b0..1bbeaba5c644 100644 --- a/Documentation/netlink/specs/ethtool.yaml +++ b/Documentation/netlink/specs/ethtool.yaml @@ -1022,6 +1022,7 @@ doc: Partial family for Ethtool Netlink. - name: indir type: binary + sub-type: u32 - name: hkey type: binary From patchwork Sat Aug 3 04:26:24 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 13752159 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 93CB313B298 for ; Sat, 3 Aug 2024 04:26:59 +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=1722659219; cv=none; b=WICx2W9bMXuxkfh/u5tlS6oWJ+IIGMY/BxiAsbQrOA/F5Q8GdNBtePlM+pZMVNRpfi9UYQ+Vu9DKSFa7L7GcYY3VnS80X/ErHDCFLA2ASxm4y6ay7XLlNMSjy2cgV7X57WE849KlWdWb2912fB7lPcaV5KSuuiIvZwGBnAxKZPE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722659219; c=relaxed/simple; bh=R+Vpo+Zoi94kDm1aFXbXMeQIVDFqrqjHP83Dk6AqSfs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uqQFgal5kTbDzNGTgxdwy6CRCmVb1EDu/cBSXFxh3pZQ4TQFQiB+dXKzC8JpVShVLezTJrV06izSlri7xmH9Q25y9dBGm4jAuuWt+T40JNH25eJiQrT2tCct8fsgRtuH8vG+h4eo52RptZrp5W0xPCP6TyqeR7lS1bGr5k6g1HY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=WbDyV4KP; 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="WbDyV4KP" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 98053C4AF10; Sat, 3 Aug 2024 04:26:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722659219; bh=R+Vpo+Zoi94kDm1aFXbXMeQIVDFqrqjHP83Dk6AqSfs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WbDyV4KP6GUUxhZuM2rX+I/q/7UV4VvBedOOxJfNsq5T0Bg9JqbmoPANGmAsAR35K kqH62QM4aWYjpZTL4H+MMBi8izm68kYG1EgSbTDGVskdH8FHu3KtNM4GlMGDjZ4b2a +B4ISERH7kX5XZvl6r5aqU04Wum7jIgWY+ByVHxaHWztI3jXlcjXQ/DbZbXYY0Q1O/ ZZ9oXQeTCqImJLE1RR8hSSzoNwWmoAiYpFt4UmYs7DVLgVs4oVunJEhGCmiRj7k2vh w4QaPH5nimLxPq6pmeEsL6Thpa3vDG0022uQ6za++aC/z6jg0trIyrN16Md/w7lsXG SaKWgEoyKU5Rg== From: Jakub Kicinski To: davem@davemloft.net Cc: netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, dxu@dxuuu.xyz, ecree.xilinx@gmail.com, przemyslaw.kitszel@intel.com, donald.hunter@gmail.com, gal.pressman@linux.dev, tariqt@nvidia.com, willemdebruijn.kernel@gmail.com, jdamato@fastly.com, Jakub Kicinski Subject: [PATCH net-next v2 12/12] selftests: drv-net: rss_ctx: test dumping RSS contexts Date: Fri, 2 Aug 2024 21:26:24 -0700 Message-ID: <20240803042624.970352-13-kuba@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240803042624.970352-1-kuba@kernel.org> References: <20240803042624.970352-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 Add a test for dumping RSS contexts. Make sure indir table and key are sane when contexts are created with various combination of inputs. Test the dump filtering by ifname and start-context. Signed-off-by: Jakub Kicinski Reviewed-by: Joe Damato --- .../selftests/drivers/net/hw/rss_ctx.py | 70 ++++++++++++++++++- tools/testing/selftests/net/lib/py/ksft.py | 6 ++ 2 files changed, 74 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/drivers/net/hw/rss_ctx.py b/tools/testing/selftests/drivers/net/hw/rss_ctx.py index 1da6b214f4fe..cbff3061abd7 100755 --- a/tools/testing/selftests/drivers/net/hw/rss_ctx.py +++ b/tools/testing/selftests/drivers/net/hw/rss_ctx.py @@ -3,7 +3,7 @@ import datetime import random -from lib.py import ksft_run, ksft_pr, ksft_exit, ksft_eq, ksft_ge, ksft_lt +from lib.py import ksft_run, ksft_pr, ksft_exit, ksft_eq, ksft_ne, ksft_ge, ksft_lt from lib.py import NetDrvEpEnv from lib.py import EthtoolFamily, NetdevFamily from lib.py import KsftSkipEx @@ -302,6 +302,72 @@ from lib.py import ethtool, ip, defer, GenerateTraffic, CmdExitFailure ksft_eq(carrier1 - carrier0, 0) +def test_rss_context_dump(cfg): + """ + Test dumping RSS contexts. This tests mostly exercises the kernel APIs. + """ + + # Get a random key of the right size + data = get_rss(cfg) + if 'rss-hash-key' in data: + key_data = _rss_key_rand(len(data['rss-hash-key'])) + key = _rss_key_str(key_data) + else: + key_data = [] + key = "ba:ad" + + ids = [] + try: + ids.append(ethtool_create(cfg, "-X", f"context new")) + defer(ethtool, f"-X {cfg.ifname} context {ids[-1]} delete") + + ids.append(ethtool_create(cfg, "-X", f"context new weight 1 1")) + defer(ethtool, f"-X {cfg.ifname} context {ids[-1]} delete") + + ids.append(ethtool_create(cfg, "-X", f"context new hkey {key}")) + defer(ethtool, f"-X {cfg.ifname} context {ids[-1]} delete") + except CmdExitFailure: + if not ids: + raise KsftSkipEx("Unable to add any contexts") + ksft_pr(f"Added only {len(ids)} out of 3 contexts") + + expect_tuples = set([(cfg.ifname, -1)] + [(cfg.ifname, ctx_id) for ctx_id in ids]) + + # Dump all + ctxs = cfg.ethnl.rss_get({}, dump=True) + ctx_tuples = set([(c['header']['dev-name'], c.get('context', -1)) for c in ctxs]) + ksft_eq(expect_tuples, ctx_tuples) + + # Sanity-check the results + for data in ctxs: + ksft_ne(set(data['indir']), {0}, "indir table is all zero") + ksft_ne(set(data.get('hkey', [1])), {0}, "key is all zero") + + # More specific checks + if len(ids) > 1 and data.get('context') == ids[1]: + ksft_eq(set(data['indir']), {0, 1}, + "ctx1 - indir table mismatch") + if len(ids) > 2 and data.get('context') == ids[2]: + ksft_eq(data['hkey'], bytes(key_data), "ctx2 - key mismatch") + + # Ifindex filter + ctxs = cfg.ethnl.rss_get({'header': {'dev-name': cfg.ifname}}, dump=True) + ctx_tuples = set([(c['header']['dev-name'], c.get('context', -1)) for c in ctxs]) + ksft_eq(expect_tuples, ctx_tuples) + + # Skip ctx 0 + expect_tuples.remove((cfg.ifname, -1)) + + ctxs = cfg.ethnl.rss_get({'start-context': 1}, dump=True) + ctx_tuples = set([(c['header']['dev-name'], c.get('context', -1)) for c in ctxs]) + ksft_eq(expect_tuples, ctx_tuples) + + # And finally both with ifindex and skip main + ctxs = cfg.ethnl.rss_get({'header': {'dev-name': cfg.ifname}, 'start-context': 1}, dump=True) + ctx_tuples = set([(c['header']['dev-name'], c.get('context', -1)) for c in ctxs]) + ksft_eq(expect_tuples, ctx_tuples) + + def test_rss_context(cfg, ctx_cnt=1, create_with_cfg=None): """ Test separating traffic into RSS contexts. @@ -542,7 +608,7 @@ from lib.py import ethtool, ip, defer, GenerateTraffic, CmdExitFailure ksft_run([test_rss_key_indir, test_rss_queue_reconfigure, test_rss_resize, test_hitless_key_update, test_rss_context, test_rss_context4, test_rss_context32, - test_rss_context_queue_reconfigure, + test_rss_context_dump, test_rss_context_queue_reconfigure, test_rss_context_overlap, test_rss_context_overlap2, test_rss_context_out_of_order, test_rss_context4_create_with_cfg], args=(cfg, )) diff --git a/tools/testing/selftests/net/lib/py/ksft.py b/tools/testing/selftests/net/lib/py/ksft.py index f663e0daec0d..477ae76de93d 100644 --- a/tools/testing/selftests/net/lib/py/ksft.py +++ b/tools/testing/selftests/net/lib/py/ksft.py @@ -55,6 +55,12 @@ KSFT_DISRUPTIVE = True _fail("Check failed", a, "!=", b, comment) +def ksft_ne(a, b, comment=""): + global KSFT_RESULT + if a == b: + _fail("Check failed", a, "==", b, comment) + + def ksft_true(a, comment=""): if not a: _fail("Check failed", a, "does not eval to True", comment)