From nobody Tue Dec 2 02:18:56 2025 Received: from mail-yw1-f176.google.com (mail-yw1-f176.google.com [209.85.128.176]) (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 E2F6F2F6170 for ; Thu, 20 Nov 2025 03:37:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763609840; cv=none; b=E7e8HBO3Ed69e372L91k8ycQ0OtGrnnZUjkKXLUD0WcM1GzffmbKsDja1l9bQcH8eXUo7zcMqB7zGFMM9BJB+zpNRLhEIMoQLprpmijD1SwRTvRRGvRHYRHdgSDgxQ0KKz3fYK+zCeIRUMLtnomAr5C6/j/v5KPOWqry/HiA3hM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763609840; c=relaxed/simple; bh=o+TnvX8H67E39YgV1VzM4yPneveTtrGVWnzs7PTFEyI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NYe5XJIsM3h0cBiqifxwJk7zDkRlFgcK9OuVWHGaHGwuG1FjrkK/0V8t7/Usg1K0g28wjAclayJhpeB/xyCbUCxGoOyys3W7YsMi0P5SGpYlzj3yLKeXpY5K0SWMSMDOj6fNNDcteB2q/wrfbg8E1gF6s0vuSHeCUmfbmGInXus= 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=c50ijRWD; arc=none smtp.client-ip=209.85.128.176 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="c50ijRWD" Received: by mail-yw1-f176.google.com with SMTP id 00721157ae682-786572c14e3so4135387b3.2 for ; Wed, 19 Nov 2025 19:37:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1763609835; x=1764214635; 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=dB9vGRQKOzD+0FIDq610kWqp5roY5Ews5Rp+LunXhtg=; b=c50ijRWDv6C4+bgjDgEntLElA/090B2lBIWQ/umM7rjkKgvMUfVLaWczs2DEj2Rbyx I2Mgxaiors/DmJAgoAkki5Yp8iYo6qaNIfe18qbZFMlNXnyel4IyEggprq4KIhCUYFh9 Bm+3PjfIENhOZTyXldLtte3+qD4dvFuMMCUGwm1rMUeiij76QlSqlEiCCnnZF7kJ5BZe 4iUe9LHarqM1jVzlwwYg4D8J61TCwd26KZejYV0GYmvc1qplkVnBMWVAlC/3VQ6aEcqF gyMUwQxdOyvxUG+CcLNJhg297RkK9mcREkxV+nLAF8yQJDS0JslUe6HU4TOWOl27kwIR uJlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763609835; x=1764214635; 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=dB9vGRQKOzD+0FIDq610kWqp5roY5Ews5Rp+LunXhtg=; b=VxcXeFB939hG8ZTpXUYZU1+HntcJRHMRMUrgfGmG6i1NOdzpdzS1lgXvVFf3qS6VTP SLa3ne0hrMztsn/XHaUWm+l3U5f69jER94/f3YSVV+RtwIs5V5/GaiBgErGqc3A9M/DX rAb5MBAwHjl34pDIGKrL0GQQtUgo2KFKXOZyxkpowQhADp0cAGJ7E7Ok1SMvD4omef8+ +J3aeg+pUmKUFCa1/MLp//lIoxyAo0zp0gtNWslOpwHGU1ZTTUpnSlpkbcvI8e1nWQ9h 0xTIftj4pzDLYy3ArqEiTmVD52WzV0QicGuRklAejexLo7ThLdSonpb11akIBTPILZhu PefQ== X-Forwarded-Encrypted: i=1; AJvYcCXIrhzcequ6qo807jrole8k3pcvuJlA9DaKKnLcf9rL/mXdsew6FpKWO5h7WOsyDivnUMy4plABIVLGauo=@vger.kernel.org X-Gm-Message-State: AOJu0YyU98zfslODRHWOjoozqdRylo2cV2+Bhz/uJ7A6MAfjGr6bsN+b gZKtBguOZ47HS4rjIRxTJYlBT3Y+Y6pdvf9oprZQlvlwbH9DICfi4ttK X-Gm-Gg: ASbGncvL4i3ql+sxJri+IGOm+4GTE95iQaZtDca0S6rAwWx78gE+2X7p7Tf7RGtShYy +sxrkkXtXpVUH9PQwRem8bjeuZNAubKHVpgx5Ch8L+89J88UZVL4vmxPGpFQCgSH7I0lzudGBiW w5xbq4wyH6uO+GbqCj8b706lLNgjRHhLDLdr9rkU2VmjW4eI3xCX1tEVwMA8ymhTWzj4VgVDx7S kqn7u2H0m7bhRG0+0UeRHgPHvVKu/llgpLBEpYVOQMCxFhXSPZl7VxAJPeRdw+ChMWNyypqEqlw VqFGZCtRpYxJbhWG0gzTbnQh+SJOPGQLn0f6z1Yz8kLUgZWnkzjzzGGH03y8804LNiBLZMxFroL LhtFyvtZ/oMSqksxbUClz1PN4NbeYV1eZN5s0GSNEM+sBfmztdVSD8i9r5lxhpftznYJ9pdqGvL 2tgYYvUYzDm/7lu8xMT0OyGQ== X-Google-Smtp-Source: AGHT+IH+ZvCrkl3kFqXJlHEtVfU0bYPG0c0dzdNLXfeCYjxXFUTZZPthcByghfwOu6Wk5tCc8cKAKg== X-Received: by 2002:a05:690e:12cb:b0:63f:a324:bbf3 with SMTP id 956f58d0204a3-642f79d694dmr1177865d50.42.1763609835427; Wed, 19 Nov 2025 19:37:15 -0800 (PST) Received: from localhost ([2a03:2880:25ff:52::]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-642f718bbbesm456461d50.21.2025.11.19.19.37.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Nov 2025 19:37:15 -0800 (PST) From: Bobby Eshleman Date: Wed, 19 Nov 2025 19:37:12 -0800 Subject: [PATCH net-next v7 5/5] selftests: drv-net: devmem: add autorelease tests 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: <20251119-scratch-bobbyeshleman-devmem-tcp-token-upstream-v7-5-1abc8467354c@meta.com> References: <20251119-scratch-bobbyeshleman-devmem-tcp-token-upstream-v7-0-1abc8467354c@meta.com> In-Reply-To: <20251119-scratch-bobbyeshleman-devmem-tcp-token-upstream-v7-0-1abc8467354c@meta.com> To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Kuniyuki Iwashima , Willem de Bruijn , Neal Cardwell , David Ahern , Arnd Bergmann , Jonathan Corbet , Andrew Lunn , Shuah Khan , Donald Hunter , Mina Almasry Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, Stanislav Fomichev , Bobby Eshleman X-Mailer: b4 0.14.3 From: Bobby Eshleman Add tests cases that check the autorelease modes (on and off). The new tests are the same as the old ones, but just pass a flag to ncdevmem to select the autorelease mode. Only for RX tests is autorelease checked, as the autorelease ncdevmem flag is unused in the TX case and doesn't apply to TX bind operations. Signed-off-by: Bobby Eshleman --- Note: I tested successfully with kperf, but I'm troubleshooting some mlx5 issues with ncdevmem so this patch, though simple, is not fully validated. Will respond to this thread when solve the issue. Changes in v7: - use autorelease netlink - remove sockopt tests --- tools/testing/selftests/drivers/net/hw/devmem.py | 22 +++++++++++++++++++= +-- tools/testing/selftests/drivers/net/hw/ncdevmem.c | 19 +++++++++++++------ 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/tools/testing/selftests/drivers/net/hw/devmem.py b/tools/testi= ng/selftests/drivers/net/hw/devmem.py index 45c2d49d55b6..dddb9d77cb28 100755 --- a/tools/testing/selftests/drivers/net/hw/devmem.py +++ b/tools/testing/selftests/drivers/net/hw/devmem.py @@ -25,7 +25,23 @@ def check_rx(cfg) -> None: =20 port =3D rand_port() socat =3D f"socat -u - TCP{cfg.addr_ipver}:{cfg.baddr}:{port},bind=3D{= cfg.remote_baddr}:{port}" - listen_cmd =3D f"{cfg.bin_local} -l -f {cfg.ifname} -s {cfg.addr} -p {= port} -c {cfg.remote_addr} -v 7" + listen_cmd =3D f"{cfg.bin_local} -l -f {cfg.ifname} -s {cfg.addr} -p {= port} -c {cfg.remote_addr} -v 7 -a 0" + + with bkg(listen_cmd, exit_wait=3DTrue) as ncdevmem: + wait_port_listen(port) + cmd(f"yes $(echo -e \x01\x02\x03\x04\x05\x06) | \ + head -c 1K | {socat}", host=3Dcfg.remote, shell=3DTrue) + + ksft_eq(ncdevmem.ret, 0) + + +@ksft_disruptive +def check_rx_autorelease(cfg) -> None: + require_devmem(cfg) + + port =3D rand_port() + socat =3D f"socat -u - TCP{cfg.addr_ipver}:{cfg.baddr}:{port},bind=3D{= cfg.remote_baddr}:{port}" + listen_cmd =3D f"{cfg.bin_local} -l -f {cfg.ifname} -s {cfg.addr} -p {= port} -c {cfg.remote_addr} -v 7 -a 1" =20 with bkg(listen_cmd, exit_wait=3DTrue) as ncdevmem: wait_port_listen(port) @@ -68,7 +84,9 @@ def main() -> None: cfg.bin_local =3D path.abspath(path.dirname(__file__) + "/ncdevmem= ") cfg.bin_remote =3D cfg.remote.deploy(cfg.bin_local) =20 - ksft_run([check_rx, check_tx, check_tx_chunks], + ksft_run([check_rx, check_rx_autorelease, + check_tx, check_tx_autorelease, + check_tx_chunks, check_tx_chunks_autorelease], args=3D(cfg, )) ksft_exit() =20 diff --git a/tools/testing/selftests/drivers/net/hw/ncdevmem.c b/tools/test= ing/selftests/drivers/net/hw/ncdevmem.c index 3288ed04ce08..406f1771d9ec 100644 --- a/tools/testing/selftests/drivers/net/hw/ncdevmem.c +++ b/tools/testing/selftests/drivers/net/hw/ncdevmem.c @@ -92,6 +92,7 @@ static char *port; static size_t do_validation; static int start_queue =3D -1; static int num_queues =3D -1; +static int devmem_autorelease; static char *ifname; static unsigned int ifindex; static unsigned int dmabuf_id; @@ -679,7 +680,8 @@ static int configure_flow_steering(struct sockaddr_in6 = *server_sin) =20 static int bind_rx_queue(unsigned int ifindex, unsigned int dmabuf_fd, struct netdev_queue_id *queues, - unsigned int n_queue_index, struct ynl_sock **ys) + unsigned int n_queue_index, struct ynl_sock **ys, + int autorelease) { struct netdev_bind_rx_req *req =3D NULL; struct netdev_bind_rx_rsp *rsp =3D NULL; @@ -695,6 +697,7 @@ static int bind_rx_queue(unsigned int ifindex, unsigned= int dmabuf_fd, req =3D netdev_bind_rx_req_alloc(); netdev_bind_rx_req_set_ifindex(req, ifindex); netdev_bind_rx_req_set_fd(req, dmabuf_fd); + netdev_bind_rx_req_set_autorelease(req, autorelease); __netdev_bind_rx_req_set_queues(req, queues, n_queue_index); =20 rsp =3D netdev_bind_rx(*ys, req); @@ -872,7 +875,8 @@ static int do_server(struct memory_buffer *mem) goto err_reset_rss; } =20 - if (bind_rx_queue(ifindex, mem->fd, create_queues(), num_queues, &ys)) { + if (bind_rx_queue(ifindex, mem->fd, create_queues(), num_queues, &ys, + devmem_autorelease)) { pr_err("Failed to bind"); goto err_reset_flow_steering; } @@ -1092,7 +1096,7 @@ int run_devmem_tests(void) goto err_reset_headersplit; } =20 - if (!bind_rx_queue(ifindex, mem->fd, queues, num_queues, &ys)) { + if (!bind_rx_queue(ifindex, mem->fd, queues, num_queues, &ys, 0)) { pr_err("Binding empty queues array should have failed"); goto err_unbind; } @@ -1108,7 +1112,7 @@ int run_devmem_tests(void) goto err_reset_headersplit; } =20 - if (!bind_rx_queue(ifindex, mem->fd, queues, num_queues, &ys)) { + if (!bind_rx_queue(ifindex, mem->fd, queues, num_queues, &ys, 0)) { pr_err("Configure dmabuf with header split off should have failed"); goto err_unbind; } @@ -1124,7 +1128,7 @@ int run_devmem_tests(void) goto err_reset_headersplit; } =20 - if (bind_rx_queue(ifindex, mem->fd, queues, num_queues, &ys)) { + if (bind_rx_queue(ifindex, mem->fd, queues, num_queues, &ys, 0)) { pr_err("Failed to bind"); goto err_reset_headersplit; } @@ -1397,7 +1401,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, "ls:c:p:v:q:t:f:z:")) !=3D -1) { + while ((opt =3D getopt(argc, argv, "ls:c:p:v:q:t:f:z:a:")) !=3D -1) { switch (opt) { case 'l': is_server =3D 1; @@ -1426,6 +1430,9 @@ int main(int argc, char *argv[]) case 'z': max_chunk =3D atoi(optarg); break; + case 'a': + devmem_autorelease =3D atoi(optarg); + break; case '?': fprintf(stderr, "unknown option: %c\n", optopt); break; --=20 2.47.3