From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ot1-f43.google.com (mail-ot1-f43.google.com [209.85.210.43]) (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 C3D873A257F for ; Tue, 28 Apr 2026 22:42:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.43 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777416146; cv=none; b=oCPv4m8sSswY7vWYOJM//Pyv/cAG7MEZbgVc8A7ywnc8rcAjFoEPX8S9hgYypOOFYHlX+b0R720/aCWPJQ6DRiuGCwoDhAF7hUzoD26IrJYUcS0oULtcHiCSTSrs4GZL3w3s3af+uS46QLELDfBY42M52R8ugbh12cVxxX5ETfM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777416146; c=relaxed/simple; bh=B7FviiHCkzsgZR03A0gxXSp8daeStyvefpiOcjImf0s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PQCTik+JsjJjsAV7cDmUnFIqX6X9G1BEKa/68dVVatveZITRJPDLtRNFcSBI56N0MPBCwiv36e7Eg/Yhc2QJrimDsxp9f9apOgLFi1SSsUTUsLY6WFN37unaf+dJWzAwxr72C1u0ukhVBe3hxzseRA1zz9/R1DvgW3RCX1YeSF4= 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=Tc16mDBI; arc=none smtp.client-ip=209.85.210.43 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="Tc16mDBI" Received: by mail-ot1-f43.google.com with SMTP id 46e09a7af769-7d1872504cbso292789a34.0 for ; Tue, 28 Apr 2026 15:42:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777416143; x=1778020943; 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=S/ULgqetM6dptOIHTaR1lnyYobopylpPKgrCCVux36Y=; b=Tc16mDBIeZiT4j6j2P9GI0aBPlDJl/3NZWnPXrjaLd+bCCVjRl83xgqY8bLHhxPdaT H2M5xAHpjQuH450kzVTF7p/zqanGB2yyQcYTrdpIZXThE3Lx90Ps1EULQCP2Yz56t1dX rF5M5UFs/7jhQvK2pLjuvPO+gAz4lU6uinWw9nBTJ0Pm2IPXh7MQKEVaTyFQq+wXem/G TILed5xkdSWuJndJhD1KnIJj09o6DDezeRaNiuhUYZ3iNnPLqPzMcDlPWCBgqmLxi4XB M7Ybi+TmUOTeDGR4zw+hJKqA1XFu13vfugNMobs1wzjaXBKUtf+xePIIo4cgXgmDzKke wjwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777416143; x=1778020943; 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=S/ULgqetM6dptOIHTaR1lnyYobopylpPKgrCCVux36Y=; b=aU16naxTYypNCUeW5IIa+T9d1kuMG4CTC/FltfOGqUxiddaTXQTQv8iiIy1emfdkbP BHBMy8d3NW1JiBAQ8b0kyYPHvo88UFihsb8bNqCCEdRMlBbQyWX9Kp8KB6AWQhr5Tsnk w5Tgp8E40nGedlSlgzR6APwatFXthxl+LOGX90rqAxgaWYj+SNMu31uy4apMSBsdGkks 7PxxDFdfl/S9cocVn5F4RUC0o2GMiyoQsKqqf4ixKRSEbNhJOeydnluxrIEFXhDO81zj tKwIjTi2CRv5Q/i5ExB/W1lQ/guFK6odBz942IMzhCNV8yB5vHfrqhZr2YhSWLaoH2HU z8Ug== X-Forwarded-Encrypted: i=1; AFNElJ9il1xkuLcRH5HJNYZQRr7GDxitrj0AVORZJJeJ/jPg7pITy2JN+rKSogGM+UZQxDDXylehJfZYoZkkiZU=@vger.kernel.org X-Gm-Message-State: AOJu0YwJeNtJADRwnBEAV0F+syBlK/YWRbwr0KcqDrFxvH2C2sHM8OtM O+NLf2KJ/toT1vt2dRFvPrPsSFDarhUYKaa5nPB5Y0jnR43yInEvZUv4 X-Gm-Gg: AeBDievW4F/fMNP2K7EDjkWoB8fRENxF4AdFgB5Ebz9qjOo96qdZ6zXsDuAc+SPFcM2 nK3YuSCTSj2VSi5kf02jSFGRitPMn9oyfhJ5Q+zPozVtfOAvDW4rtnnpM3HBZvB5qCy+GWLGXz8 TboHp3R2aQQt6OiP3S70fUedX3/OT/vvdmY0KHL2MmEJn4wB6sgOL7v2ogo4V2D4TZqrUTFfOTc q1PyVTElcxHsWp7ZCzkYDcc5f0eFWMFdwXDR29RnzTIJqcBmdcHMWrRosMiTpC7GeXKy+fhUVJb LMpVe5vQn2LxOn0Njk7rhDYytr/RfyBhCUwryEVlwWCAndgb1B1PgxdfSK3Babpvk63AFllfYbK /aXLzoXHfed6ZUhZPeM0keJOFlYeJRCSrxdOMfS9J8lxs0hQ+vYS6OtHve0JjRqB+QmjKGzkL8w IaOOCWI2TFV6XJRp7xqW1MgJoLNQrZx7joZIRyjN9+tqM= X-Received: by 2002:a05:6830:25d6:b0:7d7:ec47:79f6 with SMTP id 46e09a7af769-7dea97ae5e3mr454544a34.13.1777416142670; Tue, 28 Apr 2026 15:42:22 -0700 (PDT) Received: from localhost ([2a03:2880:f812:71::]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7deab839620sm143319a34.12.2026.04.28.15.42.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 15:42:22 -0700 (PDT) From: Bobby Eshleman Date: Tue, 28 Apr 2026 15:42:05 -0700 Subject: [PATCH net-next 08/11] selftests: drv-net: ncdevmem: add -n flag to skip NIC configuration 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: 7bit Message-Id: <20260428-tcp-dm-netkit-v1-8-719280eba4d2@meta.com> References: <20260428-tcp-dm-netkit-v1-0-719280eba4d2@meta.com> In-Reply-To: <20260428-tcp-dm-netkit-v1-0-719280eba4d2@meta.com> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Jonathan Corbet , Shuah Khan , Alex Shi , Yanteng Si , Dongliang Mu , Michael Chan , Pavan Chebbi , Joshua Washington , Harshitha Ramamurthy , Saeed Mahameed , Tariq Toukan , Mark Bloch , Leon Romanovsky , Alexander Duyck , kernel-team@meta.com, Daniel Borkmann , Nikolay Aleksandrov , Shuah Khan Cc: netdev@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org, bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, Stanislav Fomichev , Mina Almasry , Bobby Eshleman X-Mailer: b4 0.14.3 From: Bobby Eshleman Add a -n (skip_config) flag that causes ncdevmem to skip NIC configuration when operating as an RX server. When -n is passed, ncdevmem skips configuring header split, RSS, and flow steering, as well as their teardown on exit. This allows ksft tests to pre-configure the NIC in the host namespace before launching ncdevmem in the guest namespace. This is needed for netkit devmem tests where the test harness namespace has direct access to the NIC and the ncdevmem namespace does not. Assisted-by: Claude Code:claude-sonnet-4-6 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/testing/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 = -1; static int num_queues = -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) static int do_server(struct memory_buffer *mem) { - struct ethtool_rings_get_rsp *ring_config; + struct ethtool_rings_get_rsp *ring_config = NULL; char ctrl_data[sizeof(int) * 20000]; size_t non_page_aligned_frags = 0; struct sockaddr_in6 client_addr; @@ -851,27 +852,29 @@ static int do_server(struct memory_buffer *mem) return -1; } - ring_config = get_ring_config(); - if (!ring_config) { - pr_err("Failed to get current ring configuration"); - return -1; - } + if (!skip_config) { + ring_config = get_ring_config(); + if (!ring_config) { + pr_err("Failed to get current ring configuration"); + return -1; + } - 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; + } - /* 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; + } - /* 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; + } } 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; } @@ -1404,7 +1411,7 @@ int main(int argc, char *argv[]) int is_server = 0, opt; int ret, err = 1; - while ((opt = getopt(argc, argv, "Lls:c:p:v:q:t:f:z:")) != -1) { + while ((opt = getopt(argc, argv, "Lls:c:p:v:q:t:f:z:n")) != -1) { switch (opt) { case 'L': fail_on_linear = true; @@ -1436,6 +1443,9 @@ int main(int argc, char *argv[]) case 'z': max_chunk = atoi(optarg); break; + case 'n': + skip_config = 1; + break; case '?': fprintf(stderr, "unknown option: %c\n", optopt); break; -- 2.52.0