From nobody Tue Apr 7 02:56:18 2026 Received: from mail-yx1-f44.google.com (mail-yx1-f44.google.com [74.125.224.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B34A937269F for ; Mon, 16 Mar 2026 22:29:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773700168; cv=none; b=glKmkj9pN/bCVDqPRP0FFrdDsekt/XEU/Qh9SFEFLxT3mKTaUSDRZosfGRP0TINwvD0xynTvbwZAh3VAE63w1WVxnrObEmm8Z1k9l3/H9P/UQRabq1v9nCGZ1KqRqIsFEIa3yl7upQ2uWE5DVn0qsE5BIa/xcyG8XvCX7uFHTNg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773700168; c=relaxed/simple; bh=/P0d+nw6nfgOf/J+mWp3OvTpE+gexpCsKViZnKl4q1U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YztKFaZ9GFgnuTw3S9sK3A8eMGF56yYutfW/rr7kln9hYXx28AR7WhQZGwlPvmAUETVGfWsQ+LQP58e0yGPDWgqGCDQXegzv+AP+o+XtoKdIPQ0tvf3DI1cCsjzYe0gyTqIKcgiv/ykkUzU5d05RTIdysVaSJxWzKp+tlROSQio= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=QAqOjnGG; arc=none smtp.client-ip=74.125.224.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QAqOjnGG" Received: by mail-yx1-f44.google.com with SMTP id 956f58d0204a3-64ca2b32f46so3924857d50.3 for ; Mon, 16 Mar 2026 15:29:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773700163; x=1774304963; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=S96bHHsurulXmzp5TnD3Oxl/rMQZJqmo/NVotofYdL8=; b=QAqOjnGG0Jv2OURrXwx7PmcDsowNCIK0MRaxWCN6KFwiag+AaCAw1Cf5WGo8N33byL 4s4eHKURikLcxJ9LFDzULH3YOfKLg3LGBAoiKTwrB3rBlBbl5GXU6xmOIjmZOHXozb/R JLWWf5uT+FoUNeLVgMYFl9VgllYkQKjIDJbACYNL+ct2der+FYRYI4+6ywMcusyEYyJT bb6t6TO41s/afoJveIB2x6db6mIqIDT6ouH0whvqw0h9gFGR5InF79IFV2veFr0RsHYY CKXaI1r7LX2d5VxV6xVSyncJgVZAVrBS1slXdF/vYWXInwUGoqD2GVHxzldNBAALQXUx IIrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773700163; x=1774304963; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=S96bHHsurulXmzp5TnD3Oxl/rMQZJqmo/NVotofYdL8=; b=aVWgxiVGMYjv6xkUoqGEXK0oaAbvzrA5I5LT3raAcezIxEEYKoDrBzci4UEJrmkPGm x8pce/JT7veR2PNqC9Q0YQQQNpdzoXzg+d7TJxmpaJU0qbmoyByH2osnoeZpaDn8JqTR 0+qojeO5vUKYY24xEqePIRmkZDX0/mpuOs1ytGqFexvRHczDEhN9GXpQt8Xrmxye17cv mPz4X0eE+NpHVeK0grgaEWFjMy+MZplSgqTnL7RK2AhTHyCeCrWt5QIyoql8Lo2EzC2r yvTfbmwG30Wg4mExd4e4fJ/g/0iyx5PHSxpWkvTXNPfceHNUz1FY9K5JttT/ajTWygln 0Sww== X-Forwarded-Encrypted: i=1; AJvYcCVrAAXmKb/+NnH78NtYa4Iyg9ggy+mkvtt2fVLgZzOkGAz4lu172pcivNeQW42IzLstcMc19LeJmqplZTw=@vger.kernel.org X-Gm-Message-State: AOJu0YymhWG39ULh5prbbxmmQpQn3D+7UvrELjFhdfhjIjbSjsdUnoSH S9bw9kn6cvngjPzqIbGkL4cHWZ2lGUll3lteFbyExAPtkDvx9maQwt9G X-Gm-Gg: ATEYQzxEJrqrhWrFISdC98iRbELCrP4QpKDiBep8/n9jlXV5TatGGlhkDdOtB6mMzYs OuR0XLsoQAv3/3JVyxTcinXyHSoFVQv1xPpunjKvIENZxBuamc8n/fe45jKnFmj+SgXTCNVuAKy 8+uV6G7sP6kFEP3yHBcVr5IhSXm1iLGgBQGrdif1o7jD3dedlsEWt1e5p08A3gqO6gdpY+NZ2cw jlzUloyfk9yQkzonHq7B1z1PtGxBLRqXOt8AMYHde/oTM0vh5wzz45dLy/QeFRKYlijzsb9/iN7 VKMAr6IWHUKEkZGj0bwIow0P2cpm2s7rOQTTJjUHSIXgHzNYbgHUdJvQ7MaoXU6fVZumhEZ07OE 3FBELo4XPnox5ikEa+NbE5rfHGMfPpMBeNyjSQLX32ao/18JxdICweUgwiEmVROmTWH2DhUxtK8 2RKtfITjR3Z03ur7Zxon4aOQ== X-Received: by 2002:a53:7404:0:b0:64c:97ae:2e75 with SMTP id 956f58d0204a3-64e6309ab39mr10701854d50.69.1773700163558; Mon, 16 Mar 2026 15:29:23 -0700 (PDT) Received: from localhost ([2a03:2880:25ff:4a::]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-64e65a3bedcsm6286875d50.1.2026.03.16.15.29.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Mar 2026 15:29:23 -0700 (PDT) From: Bobby Eshleman Date: Mon, 16 Mar 2026 15:29:14 -0700 Subject: [PATCH net-next 3/6] selftests: drv-net: add skip-config flag to ncdevmem Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260316-scratch-bobbyeshleman-tcp-dm-netkit5-v1-3-b53c8cd72b23@meta.com> References: <20260316-scratch-bobbyeshleman-tcp-dm-netkit5-v1-0-b53c8cd72b23@meta.com> In-Reply-To: <20260316-scratch-bobbyeshleman-tcp-dm-netkit5-v1-0-b53c8cd72b23@meta.com> To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Andrew Lunn , Shuah Khan Cc: Stanislav Fomichev , Mina Almasry , Wei Wang , David Wei , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, bpf@vger.kernel.org, Bobby Eshleman X-Mailer: b4 0.14.3 From: Bobby Eshleman Add a -n flag to ncdevmem that skips hardware configuration (header split, RSS, flow steering). This is needed when ncdevmem is run inside a netkit namespace where hardware configuration is managed externally by the test harness. When -n is set, ncdevmem skips configure_headersplit(), configure_rss(), and configure_flow_steering(). The calling environment is expected to perform this setup prior to invoking ncdevmem. This is used in subsequent patches of this series that bring up netkit devmem TX testing. ncdevmem will only have access to the netkit inside the namespace, and not the physical device. Therefore, in those tests, the test harness itself does the physical device setup. Signed-off-by: Bobby Eshleman --- tools/testing/selftests/drivers/net/hw/ncdevmem.c | 58 +++++++++++++------= ---- 1 file changed, 34 insertions(+), 24 deletions(-) diff --git a/tools/testing/selftests/drivers/net/hw/ncdevmem.c b/tools/test= ing/selftests/drivers/net/hw/ncdevmem.c index e098d6534c3c..d96e8a3b5a65 100644 --- a/tools/testing/selftests/drivers/net/hw/ncdevmem.c +++ b/tools/testing/selftests/drivers/net/hw/ncdevmem.c @@ -93,6 +93,7 @@ static char *port; static size_t do_validation; static int start_queue =3D -1; static int num_queues =3D -1; +static int skip_config; static char *ifname; static unsigned int ifindex; static unsigned int dmabuf_id; @@ -828,7 +829,7 @@ static struct netdev_queue_id *create_queues(void) =20 static int do_server(struct memory_buffer *mem) { - struct ethtool_rings_get_rsp *ring_config; + struct ethtool_rings_get_rsp *ring_config =3D NULL; char ctrl_data[sizeof(int) * 20000]; size_t non_page_aligned_frags =3D 0; struct sockaddr_in6 client_addr; @@ -851,27 +852,29 @@ static int do_server(struct memory_buffer *mem) return -1; } =20 - ring_config =3D get_ring_config(); - if (!ring_config) { - pr_err("Failed to get current ring configuration"); - return -1; - } + if (!skip_config) { + ring_config =3D get_ring_config(); + if (!ring_config) { + pr_err("Failed to get current ring configuration"); + return -1; + } =20 - if (configure_headersplit(ring_config, 1)) { - pr_err("Failed to enable TCP header split"); - goto err_free_ring_config; - } + if (configure_headersplit(ring_config, 1)) { + pr_err("Failed to enable TCP header split"); + goto err_free_ring_config; + } =20 - /* Configure RSS to divert all traffic from our devmem queues */ - if (configure_rss()) { - pr_err("Failed to configure rss"); - goto err_reset_headersplit; - } + /* Configure RSS to divert all traffic from our devmem queues */ + if (configure_rss()) { + pr_err("Failed to configure rss"); + goto err_reset_headersplit; + } =20 - /* Flow steer our devmem flows to start_queue */ - if (configure_flow_steering(&server_sin)) { - pr_err("Failed to configure flow steering"); - goto err_reset_rss; + /* Flow steer our devmem flows to start_queue */ + if (configure_flow_steering(&server_sin)) { + pr_err("Failed to configure flow steering"); + goto err_reset_rss; + } } =20 if (bind_rx_queue(ifindex, mem->fd, create_queues(), num_queues, &ys)) { @@ -1052,13 +1055,17 @@ static int do_server(struct memory_buffer *mem) err_unbind: ynl_sock_destroy(ys); err_reset_flow_steering: - reset_flow_steering(); + if (!skip_config) + reset_flow_steering(); err_reset_rss: - reset_rss(); + if (!skip_config) + reset_rss(); err_reset_headersplit: - restore_ring_config(ring_config); + if (!skip_config) + restore_ring_config(ring_config); err_free_ring_config: - ethtool_rings_get_rsp_free(ring_config); + if (!skip_config) + ethtool_rings_get_rsp_free(ring_config); return err; } =20 @@ -1404,7 +1411,7 @@ int main(int argc, char *argv[]) int is_server =3D 0, opt; int ret, err =3D 1; =20 - while ((opt =3D getopt(argc, argv, "Lls:c:p:v:q:t:f:z:")) !=3D -1) { + while ((opt =3D getopt(argc, argv, "Lls:c:p:v:q:t:f:z:n")) !=3D -1) { switch (opt) { case 'L': fail_on_linear =3D true; @@ -1436,6 +1443,9 @@ int main(int argc, char *argv[]) case 'z': max_chunk =3D atoi(optarg); break; + case 'n': + skip_config =3D 1; + break; case '?': fprintf(stderr, "unknown option: %c\n", optopt); break; --=20 2.52.0