From nobody Wed Jun 17 01:42:10 2026 Received: from mail-yw1-f177.google.com (mail-yw1-f177.google.com [209.85.128.177]) (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 9522B3815C5 for ; Tue, 28 Apr 2026 22:42:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777416135; cv=none; b=ssLVwY8WpTPyRqlVaCmZ8U+p0960bPbDMtErNDBrucz2JxfXHRUlLyllB/y6m1X08svdgTLqXFyDR+ieSdTYLYuogUMsCFamP4Dlj4eoPYjN1+zHyEicxV4yJK2nMzS1CKpaBsBiR9lC/NO5ix0Q7C9dLN93JkR4MgMTA6K8zKk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777416135; c=relaxed/simple; bh=aKUYZj3dKoRf2r8cTorj5veYi8EvMq/P59Mop727o3Y=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=s8QOm3iIenBLzalDZX8PoQ87trLehFl6lDAh/0VDtadMscsREzmnZl0DkNzTQN8OY2PWs9ANzzPbVmmCaujk+6C1Bbz1wZ8txvAFCfbGkAbjfSgsuhGv2GIfc9ezt+Ar/pwGVMZk0XeH+DyY9/sAqB6a60tzvtLFwFGaGganG8A= 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=ceaYSdQo; arc=none smtp.client-ip=209.85.128.177 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="ceaYSdQo" Received: by mail-yw1-f177.google.com with SMTP id 00721157ae682-79a46ebe2beso124926357b3.2 for ; Tue, 28 Apr 2026 15:42:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777416132; x=1778020932; 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=cpsYT+KuyZIiwZWdP0lM/x4OtgL97fY3WCk6CAMYDUs=; b=ceaYSdQoRCa5WcPhevMa4RnDA4mD4/xxjtQDRSCG7GZoJyMjBs7T37+GTQoMbHx4yc XCmY7UmLu4i+YTw5NCnuEZsy45wD54vZoTjh/JZpcJip8SsvWSi9aN0mXAyj9Y7iCsP8 jFSo+yLnZCsXH7a4MC1SdlBBvtR1ujhTPLawHgP0R659e8afLJxCYv9mxJeZ9L9/5Foy XM28JbfljSt+4JavYo15tdCMBQMgirHmoETh7nUEQC1ivLOpiouXgDZ0g+G+aEXDm3C1 FaRX/re1OYGtbIQMyiNwyrxwQvCZzEIoNL3xGdnANJamY5kC82AFRAEBJHUXuzDk5JR7 5GYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777416132; x=1778020932; 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=cpsYT+KuyZIiwZWdP0lM/x4OtgL97fY3WCk6CAMYDUs=; b=hbxxZexxfcADWXs6G/BPJsmR5QNY5gOlSvWM7pXvhaS4/VNpM76zXxNGMyOZ7EwTpw 6mZ10RAjJmUZzPuhSdRg/TuSnmwF/y1lRm68IfFkyV7lWuEMAkGJM21i5kYPFFVgGaMx 2CEhp6JUJhmRtjyFZRmJjNWvKGVKHOTv5V0YnTw1HzuH14Ou7DpgTq5wocW3Q13AAdPw yz1V89w6kYlUwzMuIebSb61gsnEE1E41W3Qz69cujU2j1Wly+/3lYCoKrRe5zUKT1gtd mPwvNc3APTp5qE/cdiuChDT3CC86lGLs5/dPPg8CbeezmJ6BBmQtTmYad0d6/Ze9SrXM XMcw== X-Forwarded-Encrypted: i=1; AFNElJ8O2ozfNpsHiaacZzOIyJ89nqPnd3q8eV7aCglvDsLZ4TSKZYNfguuLtMVxcjm7nAw98mBZNevbEO3FBTM=@vger.kernel.org X-Gm-Message-State: AOJu0YwXzeQZ3D2koXAd1PBd0t4VMEKNkkdEPb1rdwyJsR62tsBc7v2q mZ+OUHPvWRpQfNmeZYhLR0Y/Oj/d+VftE6zZS9oinvVKNOo0YctrZQ7N X-Gm-Gg: AeBDievQUttIxEo/gO4TtL803md+526+xgRS5aHeuWUcyFQmh2SevHade2CdEmBOeNc MiGo5cOF4jqtXSucsH3HjasMpwaup1Bh+E/DIpEioWjVMyBebaj01zvRm0LLVMrFFM8lKAKYeDk bsvZ9HG6y4Pu0k2w4FYsRZ1EcjMzvJpB5PfP2fGhiHcYmAh+1OLc2QqTVfb2DAQ1ymEQV4KM/P2 o2UbIN5HgQYSrwSQp5rtYJxC9U2RMPa7S4Y/Hz/sr9wTe51piFzErdq8k6J4G7JVt2y3Ikyq4Xw wphq+nFW9awWAa8igxsxdiRuNyIBnik8Q4nUUOdZfQy2fyAqH9BIaPgbJjVY+7CuCV/g0kNfrIU pjqcWtqL00m4bg+4QQH/cDRwtj8ZTyCc1PrVJhMbag9TZw0EZb1rXx1BbbHAQ/+tKiyy4OPzPKC o63AQNhqwWnJlMg7Yv98aeCvzFEsNFpWhE X-Received: by 2002:a05:690c:b17:b0:7b9:d6b8:b9ac with SMTP id 00721157ae682-7bcf558efe6mr52968327b3.26.1777416131438; Tue, 28 Apr 2026 15:42:11 -0700 (PDT) Received: from localhost ([2a03:2880:f806:45::]) by smtp.gmail.com with ESMTPSA id 00721157ae682-7bd258a2eafsm4650877b3.29.2026.04.28.15.42.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 15:42:11 -0700 (PDT) From: Bobby Eshleman Date: Tue, 28 Apr 2026 15:41:58 -0700 Subject: [PATCH net-next 01/11] net: add netmem_tx modes that indicate dma capability 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: <20260428-tcp-dm-netkit-v1-1-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 Devices that support netmem TX previously set dev->netmem_tx =3D true. This was checked in validate_xmit_unreadable_skb() to drop unreadable skbs (skbs with dmabuf-backed frags) before they reach drivers that would mishandle them or devices that would not have the iommu mappings for them. Some virtual devices like netkit (or ifb) never DMA and never touch frag contents, as they essentially just forward the skb to another device. They are unable to forward unreadable skbs, however, because they fail to pass TX validation checks on dev->netmem_tx. This single bit flag doesn't give the TX validator enough information to differentiate devices that will attempt DMA on the unreadable skb and those that will simply route it untouched. This patch fixes this issue by adding an additional bit to netmem_tx, so that drivers can indicate 1) if they have netmem support, and 2) if they do, are they DMA-capable or not? Replace the boolean with a 2-bit enum: NETMEM_TX_NONE - no netmem TX support (drop unreadable skbs) NETMEM_TX_DMA - full support, device does DMA NETMEM_TX_NO_DMA - pass-through, device never DMAs Subsequent patches update netmem drivers to the new flags. Assisted-by: Claude Code:claude-sonnet-4-6 Signed-off-by: Bobby Eshleman --- Documentation/networking/net_cachelines/net_device.rst | 2 +- Documentation/networking/netmem.rst | 8 +++++++- Documentation/translations/zh_CN/networking/netmem.rst | 7 ++++++- include/linux/netdevice.h | 11 +++++++++-- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/Documentation/networking/net_cachelines/net_device.rst b/Docum= entation/networking/net_cachelines/net_device.rst index 1c19bb7705df..c85784259544 100644 --- a/Documentation/networking/net_cachelines/net_device.rst +++ b/Documentation/networking/net_cachelines/net_device.rst @@ -10,7 +10,7 @@ Type Name = fastpath_tx_acce =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D unsigned_long:32 priv_flags read_mostl= y __dev_queue_xmit(tx) unsigned_long:1 lltx read_mostl= y HARD_TX_LOCK,HARD_TX_TRYLOCK,HARD_TX_UNLOCK(t= x) -unsigned long:1 netmem_tx:1; read_mostly +unsigned long:2 netmem_tx:2; read_mostly char name[16] struct netdev_name_node* name_node struct dev_ifalias* ifalias diff --git a/Documentation/networking/netmem.rst b/Documentation/networking= /netmem.rst index b63aded46337..217869d1108d 100644 --- a/Documentation/networking/netmem.rst +++ b/Documentation/networking/netmem.rst @@ -95,4 +95,10 @@ Driver TX Requirements netdev@, or reach out to the maintainers and/or almasrymina@google.com = for help adding the netmem API. =20 -2. Driver should declare support by setting `netdev->netmem_tx =3D true` +2. Driver should declare support by setting `netdev->netmem_tx` to the + appropriate mode: + + - `NETMEM_TX_DMA`: for physical devices that perform DMA. + + - `NETMEM_TX_NO_DMA`: for virtual or passthrough devices that do + not DMA, but still support handling of netmem-backed skbs. diff --git a/Documentation/translations/zh_CN/networking/netmem.rst b/Docum= entation/translations/zh_CN/networking/netmem.rst index fe351a240f02..320f3eacf51b 100644 --- a/Documentation/translations/zh_CN/networking/netmem.rst +++ b/Documentation/translations/zh_CN/networking/netmem.rst @@ -89,4 +89,9 @@ dma-mapping API =E5=8E=BB=E5=A4=84=E7=90=86=E3=80=82 =E4=BD=BF=E7=94=A8=E6=9F=90=E4=B8=AA=E8=BF=98=E4=B8=8D=E5=AD=98=E5=9C=A8= =E7=9A=84 netmem API=EF=BC=8C=E4=BD=A0=E5=8F=AF=E4=BB=A5=E8=87=AA=E8=A1=8C= =E6=B7=BB=E5=8A=A0=E5=B9=B6=E6=8F=90=E4=BA=A4=E5=88=B0 netdev@=EF=BC=8C=E4= =B9=9F=E5=8F=AF=E4=BB=A5=E8=81=94=E7=B3=BB=E7=BB=B4=E6=8A=A4 =E4=BA=BA=E5=91=98=E6=88=96=E8=80=85=E5=8F=91=E9=80=81=E9=82=AE=E4=BB=B6= =E8=87=B3 almasrymina@google.com =E5=AF=BB=E6=B1=82=E5=B8=AE=E5=8A=A9=E3=80= =82 =20 -2. =E9=A9=B1=E5=8A=A8=E7=A8=8B=E5=BA=8F=E5=BA=94=E9=80=9A=E8=BF=87=E8=AE= =BE=E7=BD=AE netdev->netmem_tx =3D true =E6=9D=A5=E8=A1=A8=E6=98=8E=E8=87= =AA=E8=BA=AB=E6=94=AF=E6=8C=81 netmem =E5=8A=9F=E8=83=BD=E3=80=82 +2. =E9=A9=B1=E5=8A=A8=E7=A8=8B=E5=BA=8F=E5=BA=94=E5=B0=86 `netdev->netmem_= tx` =E8=AE=BE=E7=BD=AE=E4=B8=BA=E9=80=82=E5=BD=93=E7=9A=84=E6=A8=A1=E5=BC= =8F=EF=BC=9A + + - `NETMEM_TX_DMA`=EF=BC=9A=E9=80=82=E7=94=A8=E4=BA=8E=E6=89=A7=E8=A1=8C= DMA =E7=9A=84=E7=89=A9=E7=90=86=E8=AE=BE=E5=A4=87=E3=80=82 + + - `NETMEM_TX_NO_DMA`=EF=BC=9A=E9=80=82=E7=94=A8=E4=BA=8E=E4=B8=8D=E6=89= =A7=E8=A1=8C DMA =E7=9A=84=E8=99=9A=E6=8B=9F=E6=88=96=E9=80=8F=E4=BC=A0=E8= =AE=BE=E5=A4=87=EF=BC=8C=E4=BD=86=E4=BB=8D=E6=94=AF=E6=8C=81 + =E5=A4=84=E7=90=86 netmem =E6=94=AF=E6=8C=81=E7=9A=84 skb=E3=80=82 diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 0e1e581efc5a..11d68e75eb4f 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -1788,6 +1788,12 @@ enum netdev_stat_type { NETDEV_PCPU_STAT_DSTATS, /* struct pcpu_dstats */ }; =20 +enum netmem_tx_mode { + NETMEM_TX_NONE, /* no netmem TX support */ + NETMEM_TX_DMA, /* DMA-capable netmem TX (real HW) */ + NETMEM_TX_NO_DMA, /* no DMA, e.g. passthrough for virtual devs */ +}; + enum netdev_reg_state { NETREG_UNINITIALIZED =3D 0, NETREG_REGISTERED, /* completed register_netdevice */ @@ -1809,7 +1815,8 @@ enum netdev_reg_state { * @lltx: device supports lockless Tx. Deprecated for real HW * drivers. Mainly used by logical interfaces, such as * bonding and tunnels - * @netmem_tx: device support netmem_tx. + * @netmem_tx: device netmem TX mode (NETMEM_TX_NONE, NETMEM_TX_DMA, + * or NETMEM_TX_NO_DMA). * * @name: This is the first field of the "visible" part of this structure * (i.e. as seen by users in the "Space.c" file). It is the name @@ -2132,7 +2139,7 @@ struct net_device { struct_group(priv_flags_fast, unsigned long priv_flags:32; unsigned long lltx:1; - unsigned long netmem_tx:1; + unsigned long netmem_tx:2; ); const struct net_device_ops *netdev_ops; const struct header_ops *header_ops; --=20 2.52.0 From nobody Wed Jun 17 01:42:10 2026 Received: from mail-yw1-f181.google.com (mail-yw1-f181.google.com [209.85.128.181]) (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 0E454388E62 for ; Tue, 28 Apr 2026 22:42:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777416135; cv=none; b=Pe9jvNr2wPeP3yVaD3kNcvB2+bajD6QsX9AakF7dsp+PAl6KszDuBKVeexGoVHY5sJtZQBcGUbEq+oyEGgiO4cA1k471roLJe2NIPKecxQhzeqFlA9VOlLaogeKXF9aZ4jp3PL7hZHgAMNHSdNMZCRiY5AmxRZ46KuWC3gnwuqo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777416135; c=relaxed/simple; bh=yr6AoTDFdh4MqEMxnu13OdxlbpWzGzc+BNKVis4NGcE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=fSRNhrmEH5uI8UzpWCHXrZ/Xm21q0VSeufmXTnD/NCv2j9XcOyer+k2QghL3kOMcBy4b5i0e4HKUh/A0LFpPLghIACjR7u+337r3xd6J9oyTw5a6L0cOSeyOULvEjwTDpOKInENXcDoUDsPo2xNRAi7XiAFG/QDR+wLe8FZGd9k= 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=MaJDSLxa; arc=none smtp.client-ip=209.85.128.181 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="MaJDSLxa" Received: by mail-yw1-f181.google.com with SMTP id 00721157ae682-7b6ae2ea4a1so120928717b3.2 for ; Tue, 28 Apr 2026 15:42:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777416133; x=1778020933; 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=2u+rkDBVuW0DwLrX33JN+GmAXBBEhpi2PB6tf5nm73I=; b=MaJDSLxavajfyTAEJdCYLscgPlaC+Dwf52Se1w0ySLkONCRh3lvD0nvWTqcSgKT5N/ clsbq79Yt6nnYgqYiOL42WNO4gWNgtpTOPi1lAEB2TQlqhxVqPaTiF+9Ng/1t75R+4Da okaMGdldIL2/B7Cgr6hBux+zeGp7IK/rkemNH0pO46Wwgxw4nptWtU3AhUEoq3ZB+sS4 Uz38CJlekYWJzp6I1yaBbe3XzEcYWNTkVGK04Ta1ngfbTDhXupGicOdbNnBMtynMT+P0 AnCpNI7xwvekjyUDsV53iUOG6/dg/N4KUQnA0E7O4qHMC5CJyCBKOxGaS+MwXivXE3yX SVaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777416133; x=1778020933; 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=2u+rkDBVuW0DwLrX33JN+GmAXBBEhpi2PB6tf5nm73I=; b=JERxowJN/fyPRpwm+/2xOqQaUSiPWu74mmmQR+9jUzMKgBDC1wi8f4qRQI52abvnrJ kOQCPYsgfWvjgcWHcPx28QUcbrdboDaGs8ZGaLVby5PwcibOQ1HjWL1c4/nJUlGxJXib wXOgt6TP99ewgW+fPKEcLbqwc8Dw2NShUvUlY4qLrXMJV10Y9hJTbGD9IHODfN/ZFe+g d6lmuZW6tF5nHuNxNI+hkw7a2lCO+6UktQF5ZIn4TZlJ1e5BMZOokz3tFHXILK9xCtfP Al9ejRrb4QBaDZiAT1Sdeir3OKTclFCCPIH5+10nxf1pvSQxlwv05uPzVBwtqKHHgKhQ 120g== X-Forwarded-Encrypted: i=1; AFNElJ/pZ2hdYu10jlJF2VWTGXps9OQOVK3Xpo2CsCafTwI6iN2j9GLW8JZ8AGVIbig3gWJkcVg8o8MAJNghrXs=@vger.kernel.org X-Gm-Message-State: AOJu0Yzor3q+Fr1WQ5N9sGnCiv1d97iT7o4dXYDacdGpON4zC8O9MS6M M9TyRNl2yEN4KS9QVMUJ51G9bf7+Jc5SXZEKF/6eyi+LaThUoUN0KtHB X-Gm-Gg: AeBDietCLEHAZiQ0qqwjwpttLaZh+eJRZEI7URvyAFCcXsJTaTwwElMFnJdDr+aKpXe a2DSfFOgOii/1lVNSFFcVyT/9OzQD8y8CcWcTG9SC3A4jOYvFWxEBRXLXw8vecmvkznNiAV00X/ ILnbX5bc7VQ4kdiDDAObgmMkf9rfMw9PMh4a/IklUgHH7FL3frV7SYIhnqQuCzLH76TkdFvIN3O tZipSukIipDFV0fzDnZI3TB7yVO78IOfCgmPDT9IN+bhGlLFVhDqMQ9QUGAG91zdfvjGv0fPo8h edBQTBnPOgpmqfwIBV8hHh12pSyFX1W6SMOJwunA0sQAyVTvA+UsXae4Db7SOXW8B48ukXPWqQV fLQxggV8SWzVpjCSg+DGJeFObF4WyDMnk5EzAdNUJ4NQBLga2f6rW9oxmNcbmpyDMROsguW6MxV ec3u/NcEgqYvInDDKgl58CElOEhxZFwUDe X-Received: by 2002:a05:690c:660c:b0:7b3:9f53:9374 with SMTP id 00721157ae682-7bd1d378604mr17118827b3.3.1777416133033; Tue, 28 Apr 2026 15:42:13 -0700 (PDT) Received: from localhost ([2a03:2880:f806:4f::]) by smtp.gmail.com with ESMTPSA id 00721157ae682-7bd258cc768sm4466607b3.35.2026.04.28.15.42.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 15:42:12 -0700 (PDT) From: Bobby Eshleman Date: Tue, 28 Apr 2026 15:41:59 -0700 Subject: [PATCH net-next 02/11] net: bnxt: convert netmem_tx from bool to NETMEM_TX_DMA enum 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: <20260428-tcp-dm-netkit-v1-2-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 Now that netmem_tx is a multi-mode enum (NETMEM_TX_NONE, NETMEM_TX_DMA, NETMEM_TX_NO_DMA), set it to NETMEM_TX_DMA to indicate this driver supports DMA-capable netmem TX. No functional change. Assisted-by: Claude Code:claude-sonnet-4-6 Signed-off-by: Bobby Eshleman --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethern= et/broadcom/bnxt/bnxt.c index 8c55874f44ca..ed9c22dc4a5a 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -17120,7 +17120,7 @@ static int bnxt_init_one(struct pci_dev *pdev, cons= t struct pci_device_id *ent) dev->queue_mgmt_ops =3D &bnxt_queue_mgmt_ops_unsupp; if (BNXT_SUPPORTS_QUEUE_API(bp)) dev->queue_mgmt_ops =3D &bnxt_queue_mgmt_ops; - dev->netmem_tx =3D true; + dev->netmem_tx =3D NETMEM_TX_DMA; =20 rc =3D register_netdev(dev); if (rc) --=20 2.52.0 From nobody Wed Jun 17 01:42:10 2026 Received: from mail-yw1-f178.google.com (mail-yw1-f178.google.com [209.85.128.178]) (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 81D9B38B123 for ; Tue, 28 Apr 2026 22:42:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777416137; cv=none; b=o1qwJ9KZ+aqqrYZmpySHcsCjbmJDOJig3RBGUkzBKwxkEQ8NW23UVmoxBcg/ziCsBHeFQZqe8/X4j99Y9MaQSDm227DumvVcxNq3BdOIEalFQZFglXbkt1m038i3S+hPv6wvoZ+vCymvJBq565JmF6SBEulzjupD61L0nOY8JOQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777416137; c=relaxed/simple; bh=vzUUg5dUyzpvG2rKRSov0XZCUJEJWBan5Kd7XHmSVMY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=p0tZr8iLae123pSSHWOF3CefwHpyQ4KbEc83KSkbxguRc+CiG+PKz68n4+0c48MO+0QyWxE7oNGMn62UkdDAWtyCniPrxkw08X4Kf3V7DDw6A0Y7CtWL3IwJumHSdymvoYnZ3p3IuhetOue6ylmI+PEFWjCKPRzRrABTl+C2OPM= 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=i9zpQ80s; arc=none smtp.client-ip=209.85.128.178 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="i9zpQ80s" Received: by mail-yw1-f178.google.com with SMTP id 00721157ae682-7b186dfc1d0so5639857b3.1 for ; Tue, 28 Apr 2026 15:42:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777416134; x=1778020934; 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=7LWnUfnbOgtmJXE6gI2zxE0u23Zp9z86buEnIjkZCpw=; b=i9zpQ80se0Jlxr9Ek7vx74wnKI3t49CkgH9GRtaRn61bW/xP4d0r3b8BP0dtNHh9UJ 0t1ZLXuzCeY/o/6tIKtYh6BJfydOT9oHLHeJMhTkERl14A7yZ1oiRKbzUtdlFAYY6oD2 7CGfmY9EP+PxdfnX4SBNfc2EmprinvWNN7sZzWKAg7EeDGI2nlMoLhKLH2K9XxweuLSo O0zusU2GY+Xh+xDyR3qdLwA/MFuYGT6OLH+P6QcS7XVfVIdiqjteEYX6HpDAX+7nBAgC 2GLsscizSa53j1jAZ9GcVwvOdAR9AGW2sBQgkoUUdeoLHjEgOeXidFuSW88JOxZir5NF i3vg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777416134; x=1778020934; 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=7LWnUfnbOgtmJXE6gI2zxE0u23Zp9z86buEnIjkZCpw=; b=lZxoXEf4xt1ik3U7t0xzgfUEYE7eo7V/BejNMN0Vz8jpsdtoyymFElHaSh/f5V9nU1 vTM6BksPgjFov7kibkk0uvKoPtCf2mMnYxCab6bBDfOcpG+auBBJG5IaT1bdDH5hBSN0 K3iC6JvceBF2bRkXhGJgEFZaiC3Ee9GnLxEFcNUkfjXyjSKsiQz6CYeQ/pNRViTIw+3H 0I1v0NEjAT6IETBfu6bcQqp0aAtXDZUA2lqPZ4aat8FeUX8yxlIYURLIOkzgozHS0ccR qe9BnOIQ9r4i01Ja9UdiVYUSOPiComLkFIJBvXnpxZ+NbrqATBB7y5W784nbUbfbxI3T s4Ng== X-Forwarded-Encrypted: i=1; AFNElJ+Wx2n+l6QQ5XNiP35xqCkE/KPQfCs1f9qnAx9sDc75huVY6MC4Hr2uvZWTE1yt6YDJhf33Jnukfvp35lI=@vger.kernel.org X-Gm-Message-State: AOJu0Yytx8g4jl63GHNYBcrzSYHQmCCyTLxffSNpdM4nm6ctLPwA6fDB e2sBfOjoKXj2x4dvalizEu4FJzs4Fj1sZiiZU4od7OYak++M873muH0n X-Gm-Gg: AeBDiev9BEze4P3k0a3L8dvnnfIwrjKg0JyDZyIBdlTOoB0Ex3ZtP8wd0j2OdMgJ3NK TeSGknU/Oun9BDhxzFa/kzO52t2KJrF8f2MzNeklV/uqpwLNQQziu9w71ANokuCYCaqS2wWY1PC nby52leOEFWR2Ke0ivwdqUXM/UuGH3ZGkagnVcyrEw3c7dJJnwKKDUp+z0OEU5sDemFDa8uVz0N WK9RZVREc29KKq2qlklyJfXuR9s4nRXHxgILst583Mgv2mD9G2jaHblVPCOrqlp19AR9lbZdfK3 6rTJw3rWtkGg3Ic3rFK2RJLkL61zbALGmvwnQEH6pIu7g0oXUUqoH75ZxNiO3SaUCho8itc8He3 uxJJJFc4R4ZGG967/+q101PhN8JO+ecV54MG3srcvfJiYmNLzUMy9LCVgqXkwbZxM8EHHtBkuyg RuiGdYyq86ogHCe7FLkUxUbTJ4/shnBXIF X-Received: by 2002:a05:690c:6d84:b0:7b3:b0a6:2c6b with SMTP id 00721157ae682-7bd241aec69mr6798867b3.20.1777416134516; Tue, 28 Apr 2026 15:42:14 -0700 (PDT) Received: from localhost ([2a03:2880:f806:19::]) by smtp.gmail.com with ESMTPSA id 00721157ae682-7bd252ca6b9sm4764757b3.19.2026.04.28.15.42.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 15:42:14 -0700 (PDT) From: Bobby Eshleman Date: Tue, 28 Apr 2026 15:42:00 -0700 Subject: [PATCH net-next 03/11] gve: convert netmem_tx from bool to NETMEM_TX_DMA enum 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: <20260428-tcp-dm-netkit-v1-3-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 Now that netmem_tx is a multi-mode enum (NETMEM_TX_NONE, NETMEM_TX_DMA, NETMEM_TX_NO_DMA), set it to NETMEM_TX_DMA to indicate this driver supports DMA-capable netmem TX. No functional change. Assisted-by: Claude Code:claude-sonnet-4-6 Signed-off-by: Bobby Eshleman --- drivers/net/ethernet/google/gve/gve_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ether= net/google/gve/gve_main.c index 424d973c97f2..dd2b8f087163 100644 --- a/drivers/net/ethernet/google/gve/gve_main.c +++ b/drivers/net/ethernet/google/gve/gve_main.c @@ -2894,7 +2894,7 @@ static int gve_probe(struct pci_dev *pdev, const stru= ct pci_device_id *ent) goto abort_with_wq; =20 if (!gve_is_gqi(priv) && !gve_is_qpl(priv)) - dev->netmem_tx =3D true; + dev->netmem_tx =3D NETMEM_TX_DMA; =20 err =3D register_netdev(dev); if (err) --=20 2.52.0 From nobody Wed Jun 17 01:42:10 2026 Received: from mail-yw1-f171.google.com (mail-yw1-f171.google.com [209.85.128.171]) (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 2D5803845A8 for ; Tue, 28 Apr 2026 22:42:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777416138; cv=none; b=kA/XCIczip5PLNsO/wHnlp8vmQwE5qCS9xVVL0gxZq4GKLqZhKeXVovJJXoXn4MN/hPrvu8qY2cKdInurlB9SeQYIjrBG4RP9SKKkprIRyrda+PVvBOjqkpVGhl5nuUYX/xIttDVqBvcfAKjPNMdFsPRJuBNFM+ukVpqvjqxjPs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777416138; c=relaxed/simple; bh=KFECSS4aB7ebsKhc9cQ+oy1mgcCmosbiDCQwtAwfgmA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ac2HDiKPnAgi31+h4ulc/ihgrerr69g8wE30D+iVhOrODFTerAKnpRM9+zM0GVlK3nuU61R9YCaMXI3ytcuZil89fq22kH1LYtiqTCbPkxStfXeTnzUgKQWm2LgfVVcXu3yvJ2/sHfRaDeNLxuT+DwsxGLwmbKr7lalCGr8vU0A= 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=oeNEkbSt; arc=none smtp.client-ip=209.85.128.171 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="oeNEkbSt" Received: by mail-yw1-f171.google.com with SMTP id 00721157ae682-794719afcd4so127549837b3.1 for ; Tue, 28 Apr 2026 15:42:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777416136; x=1778020936; 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=ecnzl0rAEZ1GRn0EllrW0hRzekmmc0UPEYdKJcAYG5Y=; b=oeNEkbStlmLUtV+R1Lb0dnvKyG3mYrR68OwGidORtt/N/kbaWolnqjT7+XPgPKPKUI iiKDBigsqLDbvI6K8vt3weq05Pw1JAWlKOgrDsybRs/Ges7lV0lTxOObUWBebGxDzLQT AI6vHZmcqH63UOukMICr/4BaB7IP/dRDkcekfYwAmQNxAFP94lyKJ2QCxdFIE6A4kOtw NUdA25YMiuzmZ2BUEglA8vm4HQqjnqrNFOhYAU6pGlZ3bbDPlNfKpqLLd5Glxt5dNWQo 3Z1/GL0c3wkXEBY4b07wQML3Yi0XIzEJu6t1if5fn55y2DSF98evS8114FIyJktkaGD3 8EOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777416136; x=1778020936; 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=ecnzl0rAEZ1GRn0EllrW0hRzekmmc0UPEYdKJcAYG5Y=; b=rovgvEAB8heSP1M4FisIp17aDu7byIpCuOYH0er1RRHYNwN7mjdedjegBr8Q3I5xeT Sm1MdliCtRyLVya0Olx8cqG9EZo7e0X9dvxwrguXsN8tsIjGlv9/6fnR5cYl6YoaJAJ0 6exqfLeyfN2kgDICfBAOABwHF5gdME0Vp9267THVJAyT59EldGQr+SijCAbEYcHV0JFE yOK3Qrqy1+6ot2BOu2+G7wIQOdjtW/69J/29SGVAX1NL/haS/gZaz3jsa0P848RBCUHz YmevG2fGBY+hqzPscUnVqbTyXhKxtDyZfd+TUoS1clqcNg9Rz7TP+kC+Ah/FPt4sk82N i7yg== X-Forwarded-Encrypted: i=1; AFNElJ/0yKxQ9tzYuqDSHvc3uLEJvCvaBx9biMk2XmTKtipDga3PQyAeSg4Q7gAiFW5+jw+sU+j0Kc8YeWeADZg=@vger.kernel.org X-Gm-Message-State: AOJu0YyX4S2U43TW2Nn+BJ9GZa1SzqdiZl6aQdcE9QEl+ixtIoxYLXI/ EdOI4iVK72vdO85sWIib2sJP71Z82jkwm5PrxPhoulOFzfC5rnJzJ+gB X-Gm-Gg: AeBDiesI7ImVP0zjAuAoxF4fiUcL2z3q5UstrHabmBEnl+CU1eI1t46qw0ADmCuZnRN /KilcmMupO8NPGiLZ6afXiflJdUXa2SPpSOYpKY8r36rjoLZ+pm6KRwOu+oAwEaKqXRj9jsTfkT Jp36Mnn+Xa/su+H9LSA8WqwxeGqNKYeqMvkwlP1KdXKRH02Y2MnHFt9Um65MUWRCQYMmriW8Bsi +n3XYWD/OjnRHVbHLkg1YVsQ1W9m39Uz9JoJPE2HeV/Qn/Gc69hAg5YB3xfstVGGiYfKMj7YRPQ 115nqqSRKm76Pv559wpk3ZCv6PIc/5PdQ70OaDUrW1QJk/ls5UpiV69RmYS7TPxJ0NOOx7ctpca OkS+RUQ/jMNQcrl/yiqWKfNf6/LYtUpe6AQ4sNU/2Ki3L9ZWnQAD6GsxhepNoWhUGCXs4FvbTs7 ivhR0V0wMCnVq/HudsYGB93ct9mGMbIFGL X-Received: by 2002:a05:690c:6987:b0:79b:cd3a:a5c7 with SMTP id 00721157ae682-7bcf50cba57mr49522287b3.11.1777416136081; Tue, 28 Apr 2026 15:42:16 -0700 (PDT) Received: from localhost ([2a03:2880:f806:12::]) by smtp.gmail.com with ESMTPSA id 00721157ae682-7bd25183ff8sm4798037b3.10.2026.04.28.15.42.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 15:42:15 -0700 (PDT) From: Bobby Eshleman Date: Tue, 28 Apr 2026 15:42:01 -0700 Subject: [PATCH net-next 04/11] net/mlx5e: convert netmem_tx from bool to NETMEM_TX_DMA enum 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: <20260428-tcp-dm-netkit-v1-4-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 Now that netmem_tx is a multi-mode enum (NETMEM_TX_NONE, NETMEM_TX_DMA, NETMEM_TX_NO_DMA), set it to NETMEM_TX_DMA to indicate this driver supports DMA-capable netmem TX. No functional change. Assisted-by: Claude Code:claude-sonnet-4-6 Signed-off-by: Bobby Eshleman --- drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/ne= t/ethernet/mellanox/mlx5/core/en_main.c index 5a46870c4b74..fc49aae38807 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c @@ -5924,7 +5924,7 @@ static void mlx5e_build_nic_netdev(struct net_device = *netdev) =20 netdev->priv_flags |=3D IFF_UNICAST_FLT; =20 - netdev->netmem_tx =3D true; + netdev->netmem_tx =3D NETMEM_TX_DMA; =20 netif_set_tso_max_size(netdev, GSO_MAX_SIZE); mlx5e_set_xdp_feature(priv); --=20 2.52.0 From nobody Wed Jun 17 01:42:10 2026 Received: from mail-yw1-f178.google.com (mail-yw1-f178.google.com [209.85.128.178]) (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 A3FF9397682 for ; Tue, 28 Apr 2026 22:42:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777416140; cv=none; b=MDkg0+99OeAyFMHLV5gCPwZA4y6oGA+F477Dqyk9Gc7nkaudzoDbx9yBN4jbGK6yHNAeNq86v62jUBdskVUyR494SDxvfUWVlGlDCLcmt152E/aZCZxY7olnBWZ2TN2T0DQzz1ffqv5o8xmdYaZHrzmFAy6QxJRZJpu/VbCBMyQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777416140; c=relaxed/simple; bh=w8Q7fwzhxuNDsmhOs8CU1x0IUrDfpFLHCoe3mI0Gkkk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Cc49USMYV6vuhh28EM0EzrFNmrljsYgGle2FToFlLrB48Py0f9mNJ9MoT5o5Qg2CFkzJKpObOOxTb8ejhCQxUEjOttjCik5fNONWutlRzIYtyl4uFkXEiW2eyGcmw9C5mIfeaouXaVJD6F7LJeQsdmC2LBdLE914zoMyam7RcLQ= 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=ZbVIyxpM; arc=none smtp.client-ip=209.85.128.178 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="ZbVIyxpM" Received: by mail-yw1-f178.google.com with SMTP id 00721157ae682-7927261a3acso108473627b3.0 for ; Tue, 28 Apr 2026 15:42:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777416138; x=1778020938; 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=Yf9C9Vs78X6Tori5C+6AMAUG6Jc3jDAPqdDnnefTEsY=; b=ZbVIyxpMWHXCvIrzJgV9mWyOvTaIOnoNxuTsNhnHC1iCMZzlOc7dDg7p817Hl4FHQM xFjWwCuJg7TPW6uQrJ8S6INB3wj7NwfhuCwyuVaXu5tJ4x8Gt0iSiiepFaSOY9pqS1HJ clIsEXhAZa7t5C6o7WWyaMppBRkUYtE9JaSGxz67lMgvXOOpqPmzfQkKrgcEcCHqckVx oPwNbFsY5GAkerbDc7GwNF3cT8PbV3TC+bEFEa1Dp7y7PldcbLlAk5w0SEFTdfKCrHNP xwqHwR8t07skJuRzFtJrlVTeiLLGgnBsizsHNM0/d5pPhVgD8qr80f7VPRoKuhjybJ6D SI8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777416138; x=1778020938; 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=Yf9C9Vs78X6Tori5C+6AMAUG6Jc3jDAPqdDnnefTEsY=; b=dkD/SECHuppev4Mzf3qY4Z45kBveQHxfzGgo057vAKqxRr8E1FOu120/ulK8uxGPII ZnKhiQm8SWL9Ihn43iGP8SxZqbFdLfdBvG1vi9MyN8wEHF2MlMocrRbR8f+ojlvqibdJ jpwCfB/hUzfOYMClTKM2YMmgBUKxUb7QJw4WdkYA2pzwrSiq3W+W14+A6q2V2Bp7YBEK PZ8SmQA3qGGlG98AVNmrGNZ2SJTn4+xLckelvdok83cczOg+k0Bkq5UpmVeJlkfAd4kR 3JizLGURsbm2ABJIl+bkGFzOxK+sX17Q854210jFBr9b5NR9yxx9fUK/f/9b9+fnGVOt bbSg== X-Forwarded-Encrypted: i=1; AFNElJ99z9nDgTL9wnV19HFdf595di2p25UNvwR0Qnykhpuodq5VoIf3wlS6txAzvZCxl54S7qEei/2Z96CvbEU=@vger.kernel.org X-Gm-Message-State: AOJu0YzfJGuT9moAVXPzTI4MEDLVnT/qRu6JA1I7DMgP5db7H0sqhKAg kWtoh1vXluqQPRBs2r/XVGgM7SXIb9Zc7jQuyyAomWPlLmWTJ9I741P+ X-Gm-Gg: AeBDietW8aDjZXupI183oLibLaiMUh+83wlt1f145OB0Iuf9jap4kxSjSz+tSERQQf1 JNr36z6sf+9UF/E1CQvWz+SZDuVO644bteusK5HvJFQGmkW7DZ4oXQDepq1gks68TuTh1lDlQXv b6ea+J25dt6vPaPksY1uiWhqCVwwHmAqrvEAFxZYAZ5sk2GZJj+Dh1UH1ZGNifRQqKPR/9vpFg9 cUB2F/P3vDo5c/H3+ZBhzyNuUcOOY0PCKjMXVThWdyIrvY1nDa4O69SIhMq7Ma5jeTPdpNuWLVP 6y6DY+1slrWzdqATlgXVmwSAehgd4UJzObwZgrI1Prsl2BpUzXDU/yrHR4LHl+DdsEwPujLMR6b uGqNpPCRYiCzkeVAqoIaj/vnvRvKChWoIPrOZnXD9AG/Z1wx0hzOzs0/6o79LjQHK9Qtdkpjru3 21OLTaBuOI55BshZNIio3Z5g9BxMAlK0Q= X-Received: by 2002:a05:690c:6:b0:7b8:338d:7d78 with SMTP id 00721157ae682-7bcf579a631mr48995027b3.41.1777416137774; Tue, 28 Apr 2026 15:42:17 -0700 (PDT) Received: from localhost ([2a03:2880:f806:f::]) by smtp.gmail.com with ESMTPSA id 00721157ae682-7bd24b8a86dsm5096607b3.0.2026.04.28.15.42.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 15:42:17 -0700 (PDT) From: Bobby Eshleman Date: Tue, 28 Apr 2026 15:42:02 -0700 Subject: [PATCH net-next 05/11] eth: fbnic: convert netmem_tx from bool to NETMEM_TX_DMA enum 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: <20260428-tcp-dm-netkit-v1-5-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 Now that netmem_tx is a multi-mode enum (NETMEM_TX_NONE, NETMEM_TX_DMA, NETMEM_TX_NO_DMA), set it to NETMEM_TX_DMA to indicate this driver supports DMA-capable netmem TX. No functional change. Assisted-by: Claude Code:claude-sonnet-4-6 Signed-off-by: Bobby Eshleman --- drivers/net/ethernet/meta/fbnic/fbnic_netdev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_netdev.c b/drivers/net/e= thernet/meta/fbnic/fbnic_netdev.c index c406a3b56b37..138e522ef9b9 100644 --- a/drivers/net/ethernet/meta/fbnic/fbnic_netdev.c +++ b/drivers/net/ethernet/meta/fbnic/fbnic_netdev.c @@ -752,7 +752,7 @@ struct net_device *fbnic_netdev_alloc(struct fbnic_dev = *fbd) netdev->netdev_ops =3D &fbnic_netdev_ops; netdev->stat_ops =3D &fbnic_stat_ops; netdev->queue_mgmt_ops =3D &fbnic_queue_mgmt_ops; - netdev->netmem_tx =3D true; + netdev->netmem_tx =3D NETMEM_TX_DMA; =20 fbnic_set_ethtool_ops(netdev); =20 --=20 2.52.0 From nobody Wed Jun 17 01:42:10 2026 Received: from mail-yw1-f178.google.com (mail-yw1-f178.google.com [209.85.128.178]) (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 4D88239D6D5 for ; Tue, 28 Apr 2026 22:42:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777416142; cv=none; b=hWiRe4bwK6rtO9wT1Zal3kl0hUAht1cbe662rYBRjyYusB7tOLL3oVBnSqlEhLzYvT6IvP1ZcAG2g+La08rYacZr44yw3qOa+sbfZ50lA0Rg1pOMp2p/oSv64Rb5tfQ+Jm3DY3rmI628BPyZSSFqN7d7stH2T1XhBt6eCbZa9q0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777416142; c=relaxed/simple; bh=9rMrowd4DVlTSZTRzu+MOaL2ai5oyk/Qc8U11XRdSsI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=b35ERszs1VMFkHlU01bUPCrOu5+GEnE2dD4dKLsiMiCejAu/FVA1C6bJD77IwE/GdR+8yUd2G5dLhmJfJDPQJMAiEq3ZTEwjdiO4HTUQFGklyCIHu4DcBofPZb7ZNDAykFGCCcRDv3lspfJgxYK9e7sYZvYznbwIjc7pKSdAWq0= 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=ZLUW9mg1; arc=none smtp.client-ip=209.85.128.178 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="ZLUW9mg1" Received: by mail-yw1-f178.google.com with SMTP id 00721157ae682-7b37d84a6b3so125741767b3.2 for ; Tue, 28 Apr 2026 15:42:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777416139; x=1778020939; 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=swVw0BUMWcHYIT0edkHEsupdygicB+ZrJq18bYWTlfU=; b=ZLUW9mg1U/HHKV2/DFvHg0X72OJiuhxv/slw72/cdBmQxGv+Lqnf5MBSE3aUxfsgyS iDGocZMHgqBNxH0GpXFniByUA2gPoPdsrwRgWq16ZJWYw9/n1NVJY17Da5vMgY4k33kF Pe2EkVcso0St6nOv6akONh4gR+f5MHFzwtCbNck7Kv+GM6VLfBir1+9SaDIU1/9uifz7 TahPTcPjm9V4yxBkVdCvKIqhN/VyPEz2GdNk0+5ef3RDEMSpPYiUvdoD/6S/gwE/g41e rsI+NwiOJYX8sbozFo8rUOfqId8pSAUFtEXhc9g2qxGLA7/ZHDidRqKdRHZSw8AZQv4R 50hA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777416139; x=1778020939; 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=swVw0BUMWcHYIT0edkHEsupdygicB+ZrJq18bYWTlfU=; b=rKZZ0c4C3nOsnhDaBeGOur8QS9Lxr6ro9sIjPZi31kum6WvHDCSPOPegjJzoSPauRm IlxprvkrCJhiZTRt1Ns6T0PgLOPKJHWCBuZeVdKrZoSdlgWQJ8JOb+6cQuwwHBgE+pwO FZPpXFbG79O664v2jZUEJjQiCZu9RVO1tIcIIacy8yq7cg7/m8x0DxXaLbSR29DSNN3w bMAkQIA+OErCVodd5CEiXV3A1nb7g9YIP/bywAq4jg2S/XDZ+7KdkXYeSwz/numXe29N V29cAyBUYY38ep6NMScPFaOyuJTa0t4y3onTWgX6EbZhbw+KWCLSGTwdKSFe/hlQkvL+ C0Mg== X-Forwarded-Encrypted: i=1; AFNElJ/nPsEx4PSsB3J6VvLYUHy7Ma5v1JYWCxL4TnBk5MSLHtcSwJytSkGYrzjXTRCZ5N8F6W/ROGYK0QhrJyE=@vger.kernel.org X-Gm-Message-State: AOJu0YykKyxX8I0bLEAoWxqxna2ITCSOm6CRno2TTovhhy+CgzceoaOT FHF8pQKW769ljVk+AoS4ZTSw/DCn1lMDDdhpWPaG5cUPCIT+0R21osQl X-Gm-Gg: AeBDietCn/NcHx/NLR4pHk5XAbiPnXr6fltZ0fhdRs7ofIKvo9JeWOFN4vH5JZrQI0a iVDpg1PiWXIOqXtMlfhn01cfReo56C6BAepQ47VSG1YMi7yDaiF0XZHOl06zpB/G13UFSvvMI+/ GxzYxh5RLyP6HTD37XV9kvbG0VoCqCTG82kaQ8hpk0+GsHpcoSstuLTU/ZPRmwHqHIQdBJ0cPUW m77ZnrRi2B7JCPL47DLKRkSUHqakPEyfVlUDCxew0QdXj7N77Tss7iCpj8LilCYr4sdZfc0pKbE SFMBnmpTjLrxlsQVfsIDOoBxanKf7qh4DyntxoOZqm1S+flgyjo/x0+uZkvLPJaXEWi0Ju37S1m 9K4jL21LhhRPscSlaVRXaizCCJhtXfOqcfM3EnAUnYDxuGcIzlJLn2KJkUHv7Of3aWhWaoojeNO q2Da91h3GLUE8xQCwABzhXH3+f3SQuJhgm X-Received: by 2002:a05:690c:7301:b0:79a:8f2f:cb3 with SMTP id 00721157ae682-7bcf57a4bfdmr54296357b3.44.1777416139391; Tue, 28 Apr 2026 15:42:19 -0700 (PDT) Received: from localhost ([2a03:2880:f806:16::]) by smtp.gmail.com with ESMTPSA id 00721157ae682-7bd258a2761sm4454877b3.30.2026.04.28.15.42.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 15:42:19 -0700 (PDT) From: Bobby Eshleman Date: Tue, 28 Apr 2026 15:42:03 -0700 Subject: [PATCH net-next 06/11] netkit: set NETMEM_TX_NO_DMA for unreadable skb passthrough 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: <20260428-tcp-dm-netkit-v1-6-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 Netkit never DMAs and it does not break netmem (it never touches frag contents, it just forwards skbs between peers). Mark it as NETMEM_TX_NO_DMA so unreadable (dmabuf-backed) skbs can pass through without being dropped by validate_xmit_unreadable_skb(). Assisted-by: Claude Code:claude-sonnet-4-6 Signed-off-by: Bobby Eshleman --- drivers/net/netkit.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/net/netkit.c b/drivers/net/netkit.c index 5e2eecc3165d..0ad6a806d7d5 100644 --- a/drivers/net/netkit.c +++ b/drivers/net/netkit.c @@ -466,6 +466,7 @@ static void netkit_setup(struct net_device *dev) dev->priv_flags |=3D IFF_NO_QUEUE; dev->priv_flags |=3D IFF_DISABLE_NETPOLL; dev->lltx =3D true; + dev->netmem_tx =3D NETMEM_TX_NO_DMA; =20 dev->netdev_ops =3D &netkit_netdev_ops; dev->ethtool_ops =3D &netkit_ethtool_ops; --=20 2.52.0 From nobody Wed Jun 17 01:42:10 2026 Received: from mail-oa1-f54.google.com (mail-oa1-f54.google.com [209.85.160.54]) (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 315CD39EF21 for ; Tue, 28 Apr 2026 22:42:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777416144; cv=none; b=gQwiCN/kgRmECiuB/8Wzb8/1yFTlztbH3BoQvg51eQkayXeqzORQXC6soWYofKQBmeW+KdlN8Vz6+CtUOmg7RAPI2EDLzDTFBEjz/n4DQqZLi9G4+XMWYV6o3yU9zILlQvS0LjV80X9gTswPExqvWOLiR/1GetWBxcQSG68LVK0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777416144; c=relaxed/simple; bh=zYSlCV11KjpG4V7rBJ4YDIrmSJ+VzUpMc8q4YN/iHxI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=X00QyBrxzA1h5m4SQzHEykpbdr1r4bnxTppTLbL7V7ulixXl1f4dsnCBb2BpZx6GbAOtE+6OKOp9XczFautIMaWbxADCiE3UmDZBRF6DUm29e9/nSeJQpF/B24e7H+HGrUYi5CKv8crioFGBqNcOigQQ0D47jv3qy+J45wmwdTM= 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=agfP/yo+; arc=none smtp.client-ip=209.85.160.54 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="agfP/yo+" Received: by mail-oa1-f54.google.com with SMTP id 586e51a60fabf-4232323a7daso5326645fac.1 for ; Tue, 28 Apr 2026 15:42:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777416141; x=1778020941; 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=keNbfrUPGw0zb/nvkdVaa+m9kY/292t4JsgfRNz/uIE=; b=agfP/yo+IIR8zY+emHNrrqmTKLNzmz7UvzMFONKZ+j+Tx3E+/rGSdT37nxLqkDpa0G F8z9dwiedtTn9aa3zjSC5NNv497bXYM63FwXPWF0PTy6gC5KOD4E6BDsFiihD7/KNmcI UDrRZ9AIiM4/CMkvF5m4zeIB3l1PfJSRQCFZPevh7v+R2uyIs1Id0hSBPwjT07fiOZY5 jxiacjMXB8LYBkwLISRqWKZkKMOEL3yBj2Uff4a+9m7gHcUqfOkeZ2zLgocV6eOGJ42z 49Y04PQmyHJj/ifiERs1SbS37VEtZmmqgCufMcFQOZbs5EJbJv8tp9lQXifRw832scsT 2/0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777416141; x=1778020941; 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=keNbfrUPGw0zb/nvkdVaa+m9kY/292t4JsgfRNz/uIE=; b=pe2hywjEZpWSDA3pngHFhwFiY8j/z9Id3vI+JlCQqEKFO4XznmPHWbs46+y2F9/SFa tV1hZe5i+bG68GMGWZt04k1q9RCUIYCQyXI8CTf5FsJcZHnRzufmfASUm6fuky56ZAmo Z8Q/InTc2NhuuaNJycPVDtOtcljtUvE30saVwEHzktrjBNrpuzA8ffpCsvYzNjinC7nh 09+a2TcetWNlD3d0X7p6j7FQ6N8ogV2IzPkYuKNXF27amk3u5VWarnw2bz0UlA3jjgkL 6s1jU7OJ6EOCswpTVBd4xBQULC8b3tgl5liqM4DkYB3LbfoLildkUN4CtKGT7te5vP6I 5rPQ== X-Forwarded-Encrypted: i=1; AFNElJ9rPI1gqdiA4BLJXy7p2i5BHcBe1As1dik3Z9KQGYG8mvB6pQm55NgSC/zi9WaJvEnPUKY1gCkJQi1Ugf4=@vger.kernel.org X-Gm-Message-State: AOJu0Yw4zAG4yEl5o8Qk3UYyPXvyJmEPZYWka1A12ZnlyRJPOON6OOfp sx/gKzi0yp7gitDffpHH5AaA05FOZtBPDCrI/AlzXG1mTyjENr7OFQrE X-Gm-Gg: AeBDieuGtTdZ4cpacykAea46n5I9QUMakQJbR3kfPU9aCe+epsH4mDVyoLSkZyqTorR noxOFEksDbxn0wLecLr4DA+vf6D45vBCnWmwoEZVHA4Exe9xfOdH/QPyCYWMbswY4m3qS9LTXEl TCAU3+LsPoMUVRnK/R4TO5SDfH9yrt4nsMqPnkYUnzR7VIcSlJRysm2SSlKSTU3x5D+5qdEpeo7 lfrsPWgM9Wj4IPBt1Z4xLfiZEjmhWoakFo6TWJ7SsdL5trcEW/yohisE2gNKLqFwzyk+T/Xt5a4 ss4ivsxC+jQ+bXl+mW7WlbUd8cWTwPVt8x3Ql0moYOhAeIHLFrPK3S3iBRWkHG1kZe5Si/XXPaE wqEvgn5wQ5edPc0VhDKsBk/l4FXi+wDt9t9/DLYuCzoOGHhYeznSQLKNI/PoleEWnIUaCRBuXYl ouMu8jaUp/MBU9g0C2Io4RY1yovN7TTF5b9fw/pgNSqlc= X-Received: by 2002:a05:6870:b202:b0:42c:5ca:e7f8 with SMTP id 586e51a60fabf-433f3affc8fmr3047588fac.26.1777416141010; Tue, 28 Apr 2026 15:42:21 -0700 (PDT) Received: from localhost ([2a03:2880:f812:32::]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-4340e6b1441sm474082fac.3.2026.04.28.15.42.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 15:42:20 -0700 (PDT) From: Bobby Eshleman Date: Tue, 28 Apr 2026 15:42:04 -0700 Subject: [PATCH net-next 07/11] net: devmem: support TX over NETMEM_TX_NO_DMA devices 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: <20260428-tcp-dm-netkit-v1-7-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 When a netkit virtual device leases queues from a physical NIC, devmem TX bindings created on the netkit device must still result in the dmabuf being mapped for dma by the physical device. This patch accomplishes this by teaching the bind handler to search for the underlying DMA-capable device by looking it up via leased rx queues. The function netdev_find_netmem_tx_dev(), used for finding the underlying DMA-capable device, can be extended to support other non-netkit NETMEM_TX_NO_DMA devices in the future if needed. Additionally, this patch extends validate_xmit_unreadable_skb() to support the netkit case, where the skb is validated twice: once on the netkit guest device and again on the physical NIC after BPF redirect or ip forwarding. Assisted-by: Claude Code:claude-sonnet-4-6 Signed-off-by: Bobby Eshleman --- net/core/dev.c | 24 ++++++++++++++++------- net/core/devmem.c | 6 ++++-- net/core/devmem.h | 9 +++++++-- net/core/netdev-genl.c | 53 +++++++++++++++++++++++++++++++++++++++++++++-= ---- 4 files changed, 76 insertions(+), 16 deletions(-) diff --git a/net/core/dev.c b/net/core/dev.c index 06c195906231..f6575cf48287 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -3990,22 +3990,32 @@ static struct sk_buff *sk_validate_xmit_skb(struct = sk_buff *skb, static struct sk_buff *validate_xmit_unreadable_skb(struct sk_buff *skb, struct net_device *dev) { + struct net_devmem_dmabuf_binding *binding; struct skb_shared_info *shinfo; struct net_iov *niov; =20 if (likely(skb_frags_readable(skb))) goto out; =20 - if (!dev->netmem_tx) - goto out_free; - shinfo =3D skb_shinfo(skb); + if (shinfo->nr_frags =3D=3D 0) + goto out; =20 - if (shinfo->nr_frags > 0) { - niov =3D netmem_to_net_iov(skb_frag_netmem(&shinfo->frags[0])); - if (net_is_devmem_iov(niov) && - READ_ONCE(net_devmem_iov_binding(niov)->dev) !=3D dev) + niov =3D netmem_to_net_iov(skb_frag_netmem(&shinfo->frags[0])); + if (!net_is_devmem_iov(niov)) + goto out; + + binding =3D net_devmem_iov_binding(niov); + + switch (dev->netmem_tx) { + case NETMEM_TX_DMA: + if (READ_ONCE(binding->dev) !=3D dev) goto out_free; + break; + case NETMEM_TX_NO_DMA: + break; + default: /* NETMEM_TX_NONE */ + goto out_free; } =20 out: diff --git a/net/core/devmem.c b/net/core/devmem.c index cde4c89bc146..644c286b778f 100644 --- a/net/core/devmem.c +++ b/net/core/devmem.c @@ -181,7 +181,7 @@ int net_devmem_bind_dmabuf_to_queue(struct net_device *= dev, u32 rxq_idx, } =20 struct net_devmem_dmabuf_binding * -net_devmem_bind_dmabuf(struct net_device *dev, +net_devmem_bind_dmabuf(struct net_device *dev, struct net_device *vdev, struct device *dma_dev, enum dma_data_direction direction, unsigned int dmabuf_fd, struct netdev_nl_sock *priv, @@ -212,6 +212,7 @@ net_devmem_bind_dmabuf(struct net_device *dev, } =20 binding->dev =3D dev; + binding->vdev =3D vdev; xa_init_flags(&binding->bound_rxqs, XA_FLAGS_ALLOC); =20 err =3D percpu_ref_init(&binding->ref, @@ -397,7 +398,8 @@ struct net_devmem_dmabuf_binding *net_devmem_get_bindin= g(struct sock *sk, */ dst_dev =3D dst_dev_rcu(dst); if (unlikely(!dst_dev) || - unlikely(dst_dev !=3D READ_ONCE(binding->dev))) { + unlikely(dst_dev !=3D READ_ONCE(binding->dev) && + dst_dev !=3D READ_ONCE(binding->vdev))) { err =3D -ENODEV; goto out_unlock; } diff --git a/net/core/devmem.h b/net/core/devmem.h index 1c5c18581fcb..f399632b3c4b 100644 --- a/net/core/devmem.h +++ b/net/core/devmem.h @@ -19,7 +19,12 @@ struct net_devmem_dmabuf_binding { struct dma_buf *dmabuf; struct dma_buf_attachment *attachment; struct sg_table *sgt; + /* Physical NIC that does the actual DMA for this binding. */ struct net_device *dev; + /* Virtual device (e.g. netkit) the user called bind-tx on. Must be + * NETMEM_TX_NO_DMA. + */ + struct net_device *vdev; struct gen_pool *chunk_pool; /* Protect dev */ struct mutex lock; @@ -84,7 +89,7 @@ struct dmabuf_genpool_chunk_owner { =20 void __net_devmem_dmabuf_binding_free(struct work_struct *wq); struct net_devmem_dmabuf_binding * -net_devmem_bind_dmabuf(struct net_device *dev, +net_devmem_bind_dmabuf(struct net_device *dev, struct net_device *vdev, struct device *dma_dev, enum dma_data_direction direction, unsigned int dmabuf_fd, struct netdev_nl_sock *priv, @@ -165,7 +170,7 @@ static inline void net_devmem_put_net_iov(struct net_io= v *niov) } =20 static inline struct net_devmem_dmabuf_binding * -net_devmem_bind_dmabuf(struct net_device *dev, +net_devmem_bind_dmabuf(struct net_device *dev, struct net_device *vdev, struct device *dma_dev, enum dma_data_direction direction, unsigned int dmabuf_fd, diff --git a/net/core/netdev-genl.c b/net/core/netdev-genl.c index b8f6076d8007..bc6057aee98e 100644 --- a/net/core/netdev-genl.c +++ b/net/core/netdev-genl.c @@ -1077,7 +1077,7 @@ int netdev_nl_bind_rx_doit(struct sk_buff *skb, struc= t genl_info *info) goto err_rxq_bitmap; } =20 - binding =3D net_devmem_bind_dmabuf(netdev, dma_dev, DMA_FROM_DEVICE, + binding =3D net_devmem_bind_dmabuf(netdev, NULL, dma_dev, DMA_FROM_DEVICE, dmabuf_fd, priv, info->extack); if (IS_ERR(binding)) { err =3D PTR_ERR(binding); @@ -1119,9 +1119,42 @@ int netdev_nl_bind_rx_doit(struct sk_buff *skb, stru= ct genl_info *info) return err; } =20 +/* Find the DMA-capable device for netmem TX binding. + * For NETMEM_TX_DMA devices, returns the device itself. + * For NETMEM_TX_NO_DMA devices (e.g. netkit), walks leased queues + * to find the underlying physical device. + * Returns NULL if no suitable device is found. + */ +static struct net_device *netdev_find_netmem_tx_dev(struct net_device *dev) +{ + struct netdev_rx_queue *lease_rxq; + struct net_device *phys_dev; + int i; + + if (dev->netmem_tx =3D=3D NETMEM_TX_DMA) + return dev; + + if (dev->netmem_tx !=3D NETMEM_TX_NO_DMA) + return NULL; + + for (i =3D 0; i < dev->real_num_rx_queues; i++) { + lease_rxq =3D READ_ONCE(__netif_get_rx_queue(dev, i)->lease); + if (!lease_rxq) + continue; + + phys_dev =3D lease_rxq->dev; + if (netif_device_present(phys_dev) && + phys_dev->netmem_tx =3D=3D NETMEM_TX_DMA) + return phys_dev; + } + + return NULL; +} + int netdev_nl_bind_tx_doit(struct sk_buff *skb, struct genl_info *info) { struct net_devmem_dmabuf_binding *binding; + struct net_device *bind_dev; struct netdev_nl_sock *priv; struct net_device *netdev; struct device *dma_dev; @@ -1164,16 +1197,26 @@ int netdev_nl_bind_tx_doit(struct sk_buff *skb, str= uct genl_info *info) goto err_unlock_netdev; } =20 - if (!netdev->netmem_tx) { + if (netdev->netmem_tx =3D=3D NETMEM_TX_NONE) { err =3D -EOPNOTSUPP; NL_SET_ERR_MSG(info->extack, "Driver does not support netmem TX"); goto err_unlock_netdev; } =20 - dma_dev =3D netdev_queue_get_dma_dev(netdev, 0, NETDEV_QUEUE_TYPE_TX); - binding =3D net_devmem_bind_dmabuf(netdev, dma_dev, DMA_TO_DEVICE, - dmabuf_fd, priv, info->extack); + bind_dev =3D netdev_find_netmem_tx_dev(netdev); + if (!bind_dev) { + err =3D -EOPNOTSUPP; + NL_SET_ERR_MSG(info->extack, + "No DMA-capable device found for netmem TX"); + goto err_unlock_netdev; + } + + dma_dev =3D netdev_queue_get_dma_dev(bind_dev, 0, NETDEV_QUEUE_TYPE_TX); + binding =3D net_devmem_bind_dmabuf(bind_dev, + bind_dev !=3D netdev ? netdev : NULL, + dma_dev, DMA_TO_DEVICE, dmabuf_fd, + priv, info->extack); if (IS_ERR(binding)) { err =3D PTR_ERR(binding); goto err_unlock_netdev; --=20 2.52.0 From nobody Wed Jun 17 01:42:10 2026 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: quoted-printable 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/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 From nobody Wed Jun 17 01:42:10 2026 Received: from mail-pg1-f173.google.com (mail-pg1-f173.google.com [209.85.215.173]) (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 DAC7C3A3E6A for ; Tue, 28 Apr 2026 22:42:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777416147; cv=none; b=Pf5svK1YyJB8CKDO1HtVOvZru5n3nXblpSYyjJqoOUCbiVbHSdFALwZDhkqlxrXja1+lhkY278yhURF0Wnq+s2bfYJdAPWQEDef5dIsN/kSdy4QpnYl6aZPqzeo2zDrgH3i2hxs1uShP1mfiof0FWVe/+hAo2uu/b4OR3lUNFdo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777416147; c=relaxed/simple; bh=Z+KSX41d6V07NDJYlZrWymWSIrW05h06dGJ5dmEO0so=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=N7R4AhH/SRQBJkhxoe8S0SwRl7OtcuWWyaKqW2m1Sr09ssOtqcX7a5OKBQjsAHov/ldqUdJ3SJbWSlj/Il85FKxpDi0Wc1jgCkawoJJJmHWPx6meqQf5FcrzUXmIc/kuF4a9ZayXtJD0mONp1sFM7T0KEuQnaxGUyzD0B+pxRXI= 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=HBzO3gi1; arc=none smtp.client-ip=209.85.215.173 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="HBzO3gi1" Received: by mail-pg1-f173.google.com with SMTP id 41be03b00d2f7-c70e27e2b74so4491033a12.0 for ; Tue, 28 Apr 2026 15:42:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777416144; x=1778020944; 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=NwRH1bwDDN+6gtAVtp6tT94FrtoOSiX4OwTkZsArKRc=; b=HBzO3gi1gq1gQPrN8iRw+x6g3mq3W/igaNDqqYmiav4eWkTiC0ac08awPHzF8uTROj wOdq9Qbuh801CzcfrZsuIG8LMt++NTOxn57g0eD5QgrFa4enw6vG3A1BBo4eKIKaNK+j pQOhGYw8jx1jc4f9l5QT7ON5OLXE0Jq7KWqzHbAgYmC+Jt11I5cHysTsOtMyo5IYtFVZ nB9opP/+2UE/JhYjl/5AnSi95OVJ6Dr/XbYef1pKAWaR7a9oCPQw96AVxmAaqvGn/RNo CUWaOX6MB08FoQ+j955D6tNnjXiAXLrSTmcKhFwN1NigNdJKUpcxk5T2tM5iXb2gyyMf AK4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777416144; x=1778020944; 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=NwRH1bwDDN+6gtAVtp6tT94FrtoOSiX4OwTkZsArKRc=; b=TTUWwpCq3WAHqA0g8Tcg1gn2TuVOEH7L9yty/D/7lLn76c/pL4I6Lm+LGFLroU6hKJ j6hvaDbSjd0QHAY4I06B/mHN4fqgy48ztrMMoM59S2sr/Gq5hNFV1xbfj/8R9FXL0aIY KpsMLDXA3kU0Yo4+VjCOmVfvipVs4lBQ9K2u9TXyBO7ByEkKnX2Yt0iaiadbXpgbPjmM JEpM0QtoUFlHx05T8pqNzV74q9WrjlGxSYF447wF0+toC6eNJgM9f6+oTiL11ITPBLbN XU7eR99tZnHlimrEzBNAXrlyUswKto2WHiMZxUYJuo/uyHKP90Q6wlP5VselHYByJTvk cV1w== X-Forwarded-Encrypted: i=1; AFNElJ99RDTi3oKEyYsFNyXGI5vBBGv5z3U5aWAcb8ubYDeIeI8FbTl8gmOie3yjqVYfBZW0bzGiw+yQaMt/718=@vger.kernel.org X-Gm-Message-State: AOJu0Yxz087/dnzMGDqubR/TSsQTkjJEKILMPsXZ7FtKsIS2QfBVnE9F YMYB2xI5Fl3NrXf/i2h7Quk0ZGHR+wcEhrB1w4oyEQYZhZaNi4duyvr2 X-Gm-Gg: AeBDiesVPqUpyqVFrIVEnLazNR/3966IbswktSOyT8jmCWDJhUDJxSvZ/ZLFwOAm1XY mQnJ4VuSJW42WosEdDwsQRa4jBXPaFUjSqmXuoyKpFXeG2pqmXGX4xGZ4Tk0gYP9P31y+5BixVb YoeE60DTYJhzRqK/QoADr5dizYtLEJ/pY1y2LrhtUDRrDPf1ZP0mNKmfkEVT51nZ8/0IlVxEQJL yglTLGtvVSTAt2oqbxDPqGh2R0GenT9f6GVGjHagJ72UMymCKZ0TQlbqGkKNAr1Y0ytAiXIjpwz wKoU2iA8Y4RyVFajayOdRlQGfURdh6gIkBixQJDHG0X6HOD1xRt3K/p2lfzaJNwNP4fR3+fq3bU f4iJTXdFQuAr7LNyUUnsTJFHlT0VWD+1+gXZIPqg8gFJaA5hYqcK+waY83vXlThhGdxHNkys6ze fJ2W6EC0OlDmlFVj5VNKGQjcmOcdkavw== X-Received: by 2002:a05:6a00:99f:b0:82f:6a64:deac with SMTP id d2e1a72fcca58-834ddbebdf9mr5161857b3a.28.1777416144009; Tue, 28 Apr 2026 15:42:24 -0700 (PDT) Received: from localhost ([2a03:2880:ff:70::]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed80de21sm97981b3a.55.2026.04.28.15.42.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 15:42:23 -0700 (PDT) From: Bobby Eshleman Date: Tue, 28 Apr 2026 15:42:06 -0700 Subject: [PATCH net-next 09/11] selftests: drv-net: refactor devmem command builders into lib module 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: <20260428-tcp-dm-netkit-v1-9-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 Adding netkit-based devmem tests is a straight-forward copy of devmem test commands plus some args for the nk cases, so this patch breaks out these command builders into helpers used by both. Though we tried to avoid libraries to avoid increasing the barrier of entry/complexity (see selftests/drivers/net/README.md, section "Avoid libraries and frameworks"), factoring out these functions seemed like the lesser of two evils in this case of using the same commands, just with slightly different args per environment. I experimented with just having all of the tests in the same file to avoid having helpers in a library file, but because ksft_run() is limited to a single call per file, and the new tests will require different environments (NetDrvContEnv/NetDrvEpEnv), it would have been necessary to have each test set up its own environment instead of sharing one for the entire ksft_run() run. This came at the cost of ballooning the test time (from under 5s to 30s on my test system), so to strike a balance these tests were placed in separate files so they could keep a shared environment across a single ksft_run() run shared across all tests using the same env type (introduced in subsequent patches). The helpers work transparently with both plain and netkit environments by inspecting cfg for netkit-specific attributes (netns, nk_queue, etc...). No functional change to the existing devmem.py tests. Assisted-by: Claude Code:claude-sonnet-4-6 Signed-off-by: Bobby Eshleman --- tools/testing/selftests/drivers/net/hw/devmem.py | 73 +------ .../selftests/drivers/net/hw/lib/py/devmem.py | 215 +++++++++++++++++= ++++ 2 files changed, 224 insertions(+), 64 deletions(-) diff --git a/tools/testing/selftests/drivers/net/hw/devmem.py b/tools/testi= ng/selftests/drivers/net/hw/devmem.py index ee863e90d1e0..33648e39577a 100755 --- a/tools/testing/selftests/drivers/net/hw/devmem.py +++ b/tools/testing/selftests/drivers/net/hw/devmem.py @@ -1,92 +1,37 @@ #!/usr/bin/env python3 # SPDX-License-Identifier: GPL-2.0 +"""Test devmem TCP.""" =20 from os import path -from lib.py import ksft_run, ksft_exit -from lib.py import ksft_eq, KsftSkipEx +from lib.py import ksft_run, ksft_exit, ksft_disruptive from lib.py import NetDrvEpEnv -from lib.py import bkg, cmd, rand_port, wait_port_listen -from lib.py import ksft_disruptive - - -def require_devmem(cfg): - if not hasattr(cfg, "_devmem_probed"): - probe_command =3D f"{cfg.bin_local} -f {cfg.ifname}" - cfg._devmem_supported =3D cmd(probe_command, fail=3DFalse, shell= =3DTrue).ret =3D=3D 0 - cfg._devmem_probed =3D True - - if not cfg._devmem_supported: - raise KsftSkipEx("Test requires devmem support") +from lib.py.devmem import setup_test, run_rx, run_tx, run_tx_chunks, run_r= x_hds =20 =20 @ksft_disruptive def check_rx(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" - - 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) + run_rx(cfg) =20 =20 @ksft_disruptive def check_tx(cfg) -> None: - require_devmem(cfg) - - port =3D rand_port() - listen_cmd =3D f"socat -U - TCP{cfg.addr_ipver}-LISTEN:{port}" - - with bkg(listen_cmd, host=3Dcfg.remote, exit_wait=3DTrue) as socat: - wait_port_listen(port, host=3Dcfg.remote) - cmd(f"echo -e \"hello\\nworld\"| {cfg.bin_local} -f {cfg.ifname} -= s {cfg.remote_addr} -p {port}", shell=3DTrue) - - ksft_eq(socat.stdout.strip(), "hello\nworld") + run_tx(cfg) =20 =20 @ksft_disruptive def check_tx_chunks(cfg) -> None: - require_devmem(cfg) - - port =3D rand_port() - listen_cmd =3D f"socat -U - TCP{cfg.addr_ipver}-LISTEN:{port}" - - with bkg(listen_cmd, host=3Dcfg.remote, exit_wait=3DTrue) as socat: - wait_port_listen(port, host=3Dcfg.remote) - cmd(f"echo -e \"hello\\nworld\"| {cfg.bin_local} -f {cfg.ifname} -= s {cfg.remote_addr} -p {port} -z 3", shell=3DTrue) - - ksft_eq(socat.stdout.strip(), "hello\nworld") + run_tx_chunks(cfg) =20 =20 def check_rx_hds(cfg) -> None: - """Test HDS splitting across payload sizes.""" - require_devmem(cfg) - - for size in [1, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192]: - port =3D rand_port() - listen_cmd =3D f"{cfg.bin_local} -L -l -f {cfg.ifname} -s {cfg.add= r} -p {port}" - - with bkg(listen_cmd, exit_wait=3DTrue) as ncdevmem: - wait_port_listen(port) - cmd(f"dd if=3D/dev/zero bs=3D{size} count=3D1 2>/dev/null | " + - f"socat -b {size} -u - TCP{cfg.addr_ipver}:{cfg.baddr}:{po= rt},nodelay", - host=3Dcfg.remote, shell=3DTrue) - - ksft_eq(ncdevmem.ret, 0, f"HDS failed for payload size {size}") + run_rx_hds(cfg) =20 =20 def main() -> None: with NetDrvEpEnv(__file__) as cfg: - cfg.bin_local =3D path.abspath(path.dirname(__file__) + "/ncdevmem= ") - cfg.bin_remote =3D cfg.remote.deploy(cfg.bin_local) - + setup_test(cfg, path.abspath(path.dirname(__file__) + "/ncdevmem")) ksft_run([check_rx, check_tx, check_tx_chunks, check_rx_hds], - args=3D(cfg, )) + args=3D(cfg,)) ksft_exit() =20 =20 diff --git a/tools/testing/selftests/drivers/net/hw/lib/py/devmem.py b/tool= s/testing/selftests/drivers/net/hw/lib/py/devmem.py new file mode 100644 index 000000000000..e95fc38337fa --- /dev/null +++ b/tools/testing/selftests/drivers/net/hw/lib/py/devmem.py @@ -0,0 +1,215 @@ +# SPDX-License-Identifier: GPL-2.0 +"""Shared helpers for devmem TCP selftests.""" + +import re + +from net.lib.py import (bkg, cmd, defer, ethtool, rand_port, wait_port_lis= ten, + ksft_eq, KsftSkipEx, NetNSEnter, EthtoolFamily, + NetdevFamily) + + +def require_devmem(cfg): + if not hasattr(cfg, "_devmem_probed"): + probe_command =3D f"{cfg.bin_local} -f {cfg.ifname}" + cfg._devmem_supported =3D cmd(probe_command, fail=3DFalse, shell= =3DTrue).ret =3D=3D 0 + cfg._devmem_probed =3D True + + if not cfg._devmem_supported: + raise KsftSkipEx("Test requires devmem support") + + +def configure_nic(cfg): + """Channels, rings, RSS, queue lease for netkit devmem. + + Rings and RSS are re-applied each call because per-test defers restore + them after every test case. The queue lease is created only once. + """ + cfg.require_ipver('6') + ethnl =3D EthtoolFamily() + + channels =3D ethnl.channels_get({'header': {'dev-index': cfg.ifindex}}) + channels =3D channels['combined-count'] + if channels < 2: + raise KsftSkipEx( + 'Test requires NETIF with at least 2 combined channels' + ) + + rings =3D ethnl.rings_get({'header': {'dev-index': cfg.ifindex}}) + rx_rings =3D rings['rx'] + hds_thresh =3D rings.get('hds-thresh', 0) + orig_data_split =3D rings.get('tcp-data-split', 'unknown') + + ethnl.rings_set({'header': {'dev-index': cfg.ifindex}, + 'tcp-data-split': 'enabled', + 'hds-thresh': 0, + 'rx': min(64, rx_rings)}) + defer(ethnl.rings_set, {'header': {'dev-index': cfg.ifindex}, + 'tcp-data-split': orig_data_split, + 'hds-thresh': hds_thresh, + 'rx': rx_rings}) + + cfg.src_queue =3D channels - 1 + ethtool(f"-X {cfg.ifname} equal {cfg.src_queue}") + defer(ethtool, f"-X {cfg.ifname} default") + + if not hasattr(cfg, 'nk_queue'): + with NetNSEnter(str(cfg.netns)): + netdevnl =3D NetdevFamily() + lease_result =3D netdevnl.queue_create({ + "ifindex": cfg.nk_guest_ifindex, + "type": "rx", + "lease": { + "ifindex": cfg.ifindex, + "queue": {"id": cfg.src_queue, "type": "rx"}, + "netns-id": 0, + }, + }) + cfg.nk_queue =3D lease_result['id'] + + +def set_flow_rule(cfg, port): + output =3D ethtool( + f"-N {cfg.ifname} flow-type tcp6 dst-port {port}" + f" action {cfg.src_queue}" + ).stdout + return int(re.search(r'ID (\d+)', output).group(1)) + + +def ncdevmem_rx(cfg, port, verify=3DTrue, fail_on_linear=3DFalse): + if hasattr(cfg, 'netns'): + flow_rule_id =3D set_flow_rule(cfg, port) + defer(ethtool, f"-N {cfg.ifname} delete {flow_rule_id}") + + ifname =3D cfg._nk_guest_ifname + addr =3D cfg.nk_guest_ipv6 + extras =3D f" -t {cfg.nk_queue} -q 1 -n" + if verify: + extras +=3D " -v 7" + else: + ifname =3D cfg.ifname + addr =3D cfg.addr + extras =3D "" + + if fail_on_linear: + extras +=3D " -L" + + return f"{cfg.bin_local} -l -f {ifname} -s {addr} -p {port} {extras}" + + +def ncdevmem_tx(cfg, port, chunk_size=3D0): + """ncdevmem TX send command (without stdin pipe).""" + if hasattr(cfg, 'netns'): + ifname =3D cfg._nk_guest_ifname + addr =3D cfg.remote_addr_v['6'] + nk_args =3D "-t 0 -q 1 -n" + else: + ifname =3D cfg.ifname + addr =3D cfg.remote_addr + nk_args =3D "" + + chunk =3D f"-z {chunk_size}" if chunk_size else "" + + return (f"{cfg.bin_local} -f {ifname} -s {addr} -p {port}" + f" {nk_args} {chunk}").rstrip() + + +def socat_send(cfg, port, buf_size=3D0, nodelay=3DFalse, bind=3DFalse): + """Socat command for sending to the devmem listener.""" + proto =3D f"TCP{cfg.addr_ipver}" + + if hasattr(cfg, 'netns'): + addr =3D f"[{cfg.nk_guest_ipv6}]" + else: + addr =3D cfg.baddr + + buf =3D f"-b {buf_size} " if buf_size else "" + + suffix =3D "" + if nodelay: + suffix +=3D ",nodelay" + # Match the 5-tuple flow rule ncdevmem installs when given -c. + if bind: + suffix +=3D f",bind=3D{cfg.remote_baddr}:{port}" + + return f"socat {buf}-u - {proto}:{addr}:{port}{suffix}" + + +def socat_listen(cfg, port): + """Socat listen command for TX tests.""" + proto =3D f"TCP{cfg.addr_ipver}" + + if hasattr(cfg, 'netns'): + opts =3D ",reuseaddr" + else: + opts =3D "" + + return f"socat -U - {proto}-LISTEN:{port}{opts}" + + +def setup_test(cfg, bin_local): + cfg.bin_local =3D bin_local + cfg.bin_remote =3D cfg.remote.deploy(cfg.bin_local) + cfg.listen_ns =3D getattr(cfg, 'netns', None) + require_devmem(cfg) + + +def run_rx(cfg): + if hasattr(cfg, 'netns'): + configure_nic(cfg) + port =3D rand_port() + socat =3D socat_send(cfg, port) + data_pipe =3D (f"yes $(echo -e \x01\x02\x03\x04\x05\x06) | head -c 1K" + f" | {socat}") + ns =3D getattr(cfg, "netns", None) + + listen_cmd =3D ncdevmem_rx(cfg, port) + with bkg(listen_cmd, exit_wait=3DTrue, ns=3Dns) as ncdevmem: + wait_port_listen(port, proto=3D"tcp", ns=3Dns) + cmd(data_pipe, host=3Dcfg.remote, shell=3DTrue) + ksft_eq(ncdevmem.ret, 0) + + +def run_tx(cfg): + if hasattr(cfg, 'netns'): + configure_nic(cfg) + ns =3D getattr(cfg, "netns", None) + port =3D rand_port() + tx =3D ncdevmem_tx(cfg, port) + listen_cmd =3D socat_listen(cfg, port) + + with bkg(listen_cmd, host=3Dcfg.remote, exit_wait=3DTrue) as socat: + wait_port_listen(port, host=3Dcfg.remote) + cmd(f"bash -c 'echo -e \"hello\\nworld\" | {tx}'", ns=3Dns, shell= =3DTrue) + ksft_eq(socat.stdout.strip(), "hello\nworld") + + +def run_tx_chunks(cfg): + if hasattr(cfg, 'netns'): + configure_nic(cfg) + ns =3D getattr(cfg, "netns", None) + port =3D rand_port() + tx =3D ncdevmem_tx(cfg, port, chunk_size=3D3) + listen_cmd =3D socat_listen(cfg, port) + + with bkg(listen_cmd, host=3Dcfg.remote, exit_wait=3DTrue) as socat: + wait_port_listen(port, host=3Dcfg.remote) + cmd(f"bash -c 'echo -e \"hello\\nworld\" | {tx}'", ns=3Dns, shell= =3DTrue) + ksft_eq(socat.stdout.strip(), "hello\nworld") + + +def run_rx_hds(cfg): + if hasattr(cfg, 'netns'): + configure_nic(cfg) + ns =3D getattr(cfg, "netns", None) + + for size in [1, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192]: + port =3D rand_port() + + listen_cmd =3D ncdevmem_rx(cfg, port, verify=3DFalse, fail_on_line= ar=3DTrue) + socat =3D socat_send(cfg, port, buf_size=3Dsize, nodelay=3DTrue) + + with bkg(listen_cmd, exit_wait=3DTrue, ns=3Dns) as ncdevmem: + wait_port_listen(port, proto=3D"tcp", ns=3Dns) + cmd(f"dd if=3D/dev/zero bs=3D{size} count=3D1 2>/dev/null | " + f"{socat}", host=3Dcfg.remote, shell=3DTrue) + ksft_eq(ncdevmem.ret, 0, f"HDS failed for payload size {size}") --=20 2.52.0 From nobody Wed Jun 17 01:42:10 2026 Received: from mail-yx1-f52.google.com (mail-yx1-f52.google.com [74.125.224.52]) (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 885D238AC87 for ; Tue, 28 Apr 2026 22:42:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777416149; cv=none; b=Ope/B3Xmdj1mZGOWvABCUfUYzW0MOEIVrHVDkY2CLt275hUOyYRHfZESqTkh04r44wc5fQSApNEhHjHS0aG7hFp82o+uhsk7NQk43Y6/qj4scigOm8rcqWpJZCgk5LQSIQcEB5MK5PKtWP3WtCQXSBK2G+U3Nh12SfcCs4E6V8Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777416149; c=relaxed/simple; bh=vvD7ZVWeDph/PmXrgLs3xxE6chJh2m9PrzPft/75fXI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=irdvQatibWD1OKqwexBrHyScTyFVU2jbd4OkjrqZLJ1WxlAWHgmvqSCFs4Vs96d6uI9tywRpikiH6jNDzsGNuJPIQtIY0M8UemXCpaqKdIZbbNL7PcFLvbqhjLJ+566/bFRfQ8S7KVTbUB7v+bk6jpHtx+YJwg+6GFpIT3SZVmA= 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=KvfjK8Dz; arc=none smtp.client-ip=74.125.224.52 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="KvfjK8Dz" Received: by mail-yx1-f52.google.com with SMTP id 956f58d0204a3-6501547d7edso11312723d50.0 for ; Tue, 28 Apr 2026 15:42:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777416145; x=1778020945; 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=inxNSTovjyLa8xw5MJR4WDKrVFR+ca5kQUy/85838Ic=; b=KvfjK8DzIfz8LKykKdKroR4ObY9Dy9Ejx+tPX4Y3wTsa5GqusCYy/qtt719Q6GDWBL 1VbZ2xUhQa/yqL/nsjPTDM9leXgfrYnVUOHNKtzOKWtXI449vFzvWREMOzzm3THekhfp GX7guIvPfzTcyUV3BvbgB7NBr+pJf2wftDn9W3jntmu3i31puj6VvGyNls5uzYZdtFib KjkykqHeZ/4oC0zu3AVjHiS0hVToY0t4JCguv4P/aBSKFflqJKnsXxfH7cZ8gQYjJKrP fVnsYn5ViBOw46SaVyl71rHmwZMC+DzVfLdswuvLJomBsTUNHWd47zdKVan2o+YvO7rS ndxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777416145; x=1778020945; 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=inxNSTovjyLa8xw5MJR4WDKrVFR+ca5kQUy/85838Ic=; b=E3770mWP4Dy+hlKX83LPEv8+pnbIvoySoo+geD921cBNKnyau1mVP49bSEnuFP0XWl rPbtliqyv4Gtx5cl9jSIMbjebLZKsoqJ/BsFEmFyCJvLlYRgdFjKKiDBrP8g2uNnUKV0 FXQtzWoMOO+Dar23C670HJ6eb0Gq0Lpo3bFrXiPAB4d1nc0EF3UnrcZgegYDR+4LJUag r1/mjzW/ltH4ZObtYR778g3LxcyJYKTU3z2OZF22JnnuKbbTauwOq1pcifiGSMsYmMQk UEDAzsWyT6gFoJO2ItKj6gWq5B/BuYgJpMw/Dw9+4m8iWKKgYUyss03VSxdyeUeFAkpr DpNg== X-Forwarded-Encrypted: i=1; AFNElJ8acuFMN8IReIBo+jUvbREne2ypArbA2EoaY/G3SGv4qrNoYEw4U0XKrUOpEJ1zpD8mw28iOa90Zzd78vs=@vger.kernel.org X-Gm-Message-State: AOJu0YxuPybENt9Cjg2BwYueCFO+lgPtyPuVOzExftvVWb363qSslzMo gyjwb4iWizUu4L8Kw1ASS8rJ0+RZCoTSnjPXUDnxRal2hTCQUMhsQ8Z0 X-Gm-Gg: AeBDieuccTuqMyaOdGiW1fx75+FAqMYG/9YeqKfF5F5bruAvqNvSyunoq9G3blbvC7W UrofKxjRomIievKim4vxjrdtjDI15phkBgXfnR8q613gB1vsr1EC7n3BtyJdSQQ+zHw6Oybu3W+ a4OsZvwBs2Q4lh2b9szPH8i87UQmU88FBh73CkwnsallH+0duGhwLZ+Hiq3bj4mHW3wLh0YuVPk bbzLBZ1irsb28eBKOAGIDPJBmmYO0329udywexNxcAfrPptk2gT1mhv4pUsEhPPjPLYAROejDPq DCTLrNpOUMt1KLo91Xzg6QghNKjffDMNhzLkOhsjRk/6L3F1lGeXHIQZgVNFxAOO2uvPRs2VrN4 ag4wZfUcQBkyq9eDhMZVmdALsdEgAi++NTBp9Vo6TBXZ/KfmrJcQ43JQNO6RtjIz4UfAuIJHsUH /99XOS6VHTcTbCUR1LWfkCcg8UjtBhdSbPILx1xyM9JCY= X-Received: by 2002:a05:690e:d5c:b0:654:1261:8b50 with SMTP id 956f58d0204a3-65beed80fecmr4987018d50.19.1777416145443; Tue, 28 Apr 2026 15:42:25 -0700 (PDT) Received: from localhost ([2a03:2880:f806:27::]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-65bff4fe796sm326550d50.7.2026.04.28.15.42.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 15:42:25 -0700 (PDT) From: Bobby Eshleman Date: Tue, 28 Apr 2026 15:42:07 -0700 Subject: [PATCH net-next 10/11] selftests: drv-net: add primary_rx_redirect support to NetDrvContEnv 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: <20260428-tcp-dm-netkit-v1-10-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 When sending from a namespace that has access to a netkit device with a leased queue, the nk primary in the host namespace needs to redirect its RX to the physical device. This patch adds that redirection bpf program and teaches the harness to install it. Add primary_rx_redirect=3DFalse parameter to NetDrvContEnv.__init__(). When enabled, _attach_primary_rx_redirect_bpf() attaches a new BPF TC program (nk_primary_rx_redirect.bpf.c) to the primary (host-side) netkit interface. The program redirects non-ICMPv6 IPv6 packets to the physical NIC via bpf_redirect_neigh(), with the physical ifindex configured via the .bss map. Extract _find_bss_map_id() from _attach_bpf() into a reusable helper so other BPF attachment methods can use it. Also add an IPv6 host route on the remote endpoint for the netkit guest IP via the physical NIC address, so the remote can send packets that traverse the redirect path to the guest. Assisted-by: Claude Code:claude-sonnet-4-6 Signed-off-by: Bobby Eshleman --- .../drivers/net/hw/nk_primary_rx_redirect.bpf.c | 41 +++++++++++++ tools/testing/selftests/drivers/net/lib/py/env.py | 67 ++++++++++++++++++= ---- 2 files changed, 96 insertions(+), 12 deletions(-) diff --git a/tools/testing/selftests/drivers/net/hw/nk_primary_rx_redirect.= bpf.c b/tools/testing/selftests/drivers/net/hw/nk_primary_rx_redirect.bpf.c new file mode 100644 index 000000000000..fe3c127a4fd0 --- /dev/null +++ b/tools/testing/selftests/drivers/net/hw/nk_primary_rx_redirect.bpf.c @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: GPL-2.0 +#include +#include +#include +#include +#include + +#define TC_ACT_OK 0 +#define ETH_P_IPV6 0x86DD +#define IPPROTO_ICMPV6 58 + +#define ctx_ptr(field) ((void *)(long)(field)) + +volatile __u32 phys_ifindex; + +SEC("tc/ingress") +int nk_primary_rx_redirect(struct __sk_buff *skb) +{ + void *data_end =3D ctx_ptr(skb->data_end); + void *data =3D ctx_ptr(skb->data); + struct ethhdr *eth; + struct ipv6hdr *ip6h; + + eth =3D data; + if ((void *)(eth + 1) > data_end) + return TC_ACT_OK; + + if (eth->h_proto !=3D bpf_htons(ETH_P_IPV6)) + return TC_ACT_OK; + + ip6h =3D data + sizeof(struct ethhdr); + if ((void *)(ip6h + 1) > data_end) + return TC_ACT_OK; + + if (ip6h->nexthdr =3D=3D IPPROTO_ICMPV6) + return TC_ACT_OK; + + return bpf_redirect_neigh(phys_ifindex, NULL, 0, 0); +} + +char __license[] SEC("license") =3D "GPL"; diff --git a/tools/testing/selftests/drivers/net/lib/py/env.py b/tools/test= ing/selftests/drivers/net/lib/py/env.py index 24ce122abd9c..d569d01ef791 100644 --- a/tools/testing/selftests/drivers/net/lib/py/env.py +++ b/tools/testing/selftests/drivers/net/lib/py/env.py @@ -336,15 +336,17 @@ class NetDrvContEnv(NetDrvEpEnv): +---------------+ """ =20 - def __init__(self, src_path, rxqueues=3D1, **kwargs): + def __init__(self, src_path, rxqueues=3D1, primary_rx_redirect=3DFalse= , **kwargs): self.netns =3D None self._nk_host_ifname =3D None self._nk_guest_ifname =3D None self._tc_clsact_added =3D False self._tc_attached =3D False + self._primary_rx_redirect_attached =3D False self._bpf_prog_pref =3D None self._bpf_prog_id =3D None self._init_ns_attached =3D False + self._remote_route_added =3D False self._old_fwd =3D None self._old_accept_ra =3D None =20 @@ -396,8 +398,14 @@ class NetDrvContEnv(NetDrvEpEnv): =20 self._setup_ns() self._attach_bpf() + if primary_rx_redirect: + self._attach_primary_rx_redirect_bpf() =20 def __del__(self): + if self._primary_rx_redirect_attached: + cmd(f"tc qdisc del dev {self._nk_host_ifname} clsact", fail=3D= False) + self._primary_rx_redirect_attached =3D False + if self._tc_attached: cmd(f"tc filter del dev {self.ifname} ingress pref {self._bpf_= prog_pref}") self._tc_attached =3D False @@ -406,6 +414,11 @@ class NetDrvContEnv(NetDrvEpEnv): cmd(f"tc qdisc del dev {self.ifname} clsact") self._tc_clsact_added =3D False =20 + if self._remote_route_added: + cmd(f"ip -6 route del {self.nk_guest_ipv6}/128", + host=3Dself.remote, fail=3DFalse) + self._remote_route_added =3D False + if self._nk_host_ifname: cmd(f"ip link del dev {self._nk_host_ifname}") self._nk_host_ifname =3D None @@ -459,6 +472,9 @@ class NetDrvContEnv(NetDrvEpEnv): ip(f"-6 addr add {self.nk_guest_ipv6}/64 dev {self._nk_guest_ifnam= e} nodad", ns=3Dself.netns) ip(f"-6 route add default via fe80::1 dev {self._nk_guest_ifname}"= , ns=3Dself.netns) =20 + ip(f"-6 route add {self.nk_guest_ipv6}/128 via {self.addr_v['6']}"= , host=3Dself.remote) + self._remote_route_added =3D True + def _tc_ensure_clsact(self): qdisc =3D json.loads(cmd(f"tc -j qdisc show dev {self.ifname}").st= dout) for q in qdisc: @@ -476,6 +492,15 @@ class NetDrvContEnv(NetDrvEpEnv): return (bpf['pref'], bpf['options']['prog']['id']) raise Exception("Failed to get BPF prog ID") =20 + def _find_bss_map_id(self, prog_id): + """Find the .bss map ID for a loaded BPF program.""" + prog_info =3D bpftool(f"prog show id {prog_id}", json=3DTrue) + for map_id in prog_info.get("map_ids", []): + map_info =3D bpftool(f"map show id {map_id}", json=3DTrue) + if map_info.get("name", "").endswith("bss"): + return map_id + raise Exception(f"Failed to find .bss map for prog {prog_id}") + def _attach_bpf(self): bpf_obj =3D self.test_dir / "nk_forward.bpf.o" if not bpf_obj.exists(): @@ -487,17 +512,7 @@ class NetDrvContEnv(NetDrvEpEnv): self._tc_attached =3D True =20 (self._bpf_prog_pref, self._bpf_prog_id) =3D self._get_bpf_prog_id= s() - prog_info =3D bpftool(f"prog show id {self._bpf_prog_id}", json=3D= True) - map_ids =3D prog_info.get("map_ids", []) - - bss_map_id =3D None - for map_id in map_ids: - map_info =3D bpftool(f"map show id {map_id}", json=3DTrue) - if map_info.get("name").endswith("bss"): - bss_map_id =3D map_id - - if bss_map_id is None: - raise Exception("Failed to find .bss map") + bss_map_id =3D self._find_bss_map_id(self._bpf_prog_id) =20 ipv6_addr =3D ipaddress.IPv6Address(self.ipv6_prefix) ipv6_bytes =3D ipv6_addr.packed @@ -505,3 +520,31 @@ class NetDrvContEnv(NetDrvEpEnv): value =3D ipv6_bytes + ifindex_bytes value_hex =3D ' '.join(f'{b:02x}' for b in value) bpftool(f"map update id {bss_map_id} key hex 00 00 00 00 value hex= {value_hex}") + + def _attach_primary_rx_redirect_bpf(self): + """Attach BPF redirect program on the primary netkit ingress.""" + bpf_obj =3D self.test_dir / "nk_primary_rx_redirect.bpf.o" + if not bpf_obj.exists(): + raise KsftSkipEx("Primary RX redirect BPF prog not found") + + cmd(f"tc qdisc add dev {self._nk_host_ifname} clsact") + cmd(f"tc filter add dev {self._nk_host_ifname} ingress" + f" bpf obj {bpf_obj} sec tc/ingress direct-action") + self._primary_rx_redirect_attached =3D True + + filters =3D json.loads( + cmd(f"tc -j filter show dev {self._nk_host_ifname} ingress").s= tdout) + redirect_prog_id =3D None + for bpf in filters: + if 'options' not in bpf: + continue + if bpf['options']['bpf_name'].startswith('nk_primary_rx_redire= ct'): + redirect_prog_id =3D bpf['options']['prog']['id'] + break + if redirect_prog_id is None: + raise Exception("Failed to get primary RX redirect BPF prog ID= ") + + bss_map_id =3D self._find_bss_map_id(redirect_prog_id) + phys_ifindex_bytes =3D self.ifindex.to_bytes(4, byteorder=3D'littl= e') + value_hex =3D ' '.join(f'{b:02x}' for b in phys_ifindex_bytes) + bpftool(f"map update id {bss_map_id} key hex 00 00 00 00 value hex= {value_hex}") --=20 2.52.0 From nobody Wed Jun 17 01:42:10 2026 Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) (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 4AC133B1B3 for ; Tue, 28 Apr 2026 22:42:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777416149; cv=none; b=PwNgf1Aem2h5EfxeyQUyzkpQiAShG1wuXZH+Mto7T/v/J3c7LQqQ8MX24MsrFWR/QfN3tInQoIpuehqk3qb/qjCMCicNZFz7JYJGHdCtA6R1nPL9ukgVaxvzpnc42Tx3zR/u5YjmnYbD/ePy0Qb9XYmsC/4nqH9Ef78nU9nXly8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777416149; c=relaxed/simple; bh=9CfxHHUrdkC2HOcb/TS/DNlnMmhpx5XoMYQJ/X3bIM4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SGJ4+IZiw9kEyhWpk1ZfaVNfp3/NBumoRD3xFY48jhWUmG6NYAbTOFwXh01fzKC1/NHTlZdu7shouOOvkse32IMjYcplrs+lxD54C+FfzEPmUGFAPWQ1oG55OGxhSWCPib5411dirZuRANjT33+WPkx66os6qDgACStLT7FgAKo= 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=mkCBgfK8; arc=none smtp.client-ip=209.85.210.169 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="mkCBgfK8" Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-82f33d28c1dso6583673b3a.3 for ; Tue, 28 Apr 2026 15:42:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777416147; x=1778020947; 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=Zt/Ht0RhxHPOrumBmtiIhgjoCgVfyyPmVo07gYfbsYg=; b=mkCBgfK8IZCr029gch80jB56L0daRQ0xrq+mlojAk5EoADEJaBGZsLeSiqbKv9WNoh NqmoegMAZekTc4FYJzsrNMxDQSB9BgDL833cykHXh1GmO+4XAXSbWjHp3lXfen50X2MN M+fVOpsfIqIK2lsppRsl0085WaUYd8rqQQfpak+6nPnOQGQ4iZ838I7/aLGmrmzQ7s6B cN/WDOS270ZL2FP/E061dEy/QgmTJilrnHhb0VlZpkO2nsCo0g/1m5DIhfD78un31WD5 GtbouO1ZfLTdddCmyRF9dCsCW+cpIIzRjHTxX1oMg7Z1phoBmVrO98tcDBXVUOcDtTMu NxMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777416147; x=1778020947; 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=Zt/Ht0RhxHPOrumBmtiIhgjoCgVfyyPmVo07gYfbsYg=; b=EnAqDCbHw1i/bpAAIyB0LQte1lpH0Fqw6yPQLmnlS73c15zFyCC84tHaRMiaQlEcmH puWm0IE65hXSWrrSYhKCBne6c0ac6fhVuDo4lpYdT43B8PNdLGw8a7P/gGXd6D0sE+FH z7t1rGywbxiiGFBRBmDAEL4ivid8vhXK10K3pKPRKPaOGR9F7PZNYFDS8S8tm4nvwF85 IZX2Gz3Nny984Yph4wh3bXnAy4oyNyt+0Ab/sjZTdbbMyjBga+74zibSqHadXND8OlfA Dcde6eC0DbMcI6YXuE88clooBgnPiaVaBEHVjbBmVOPbARFAY25bi0tC6lUINL9FhT6o jtJg== X-Forwarded-Encrypted: i=1; AFNElJ+S2le0gde14O4xwCwmo6ROlyNkQ4cKHm1ZYdtx6DcCKFJCYQe2wjk4GkxCb6heB5EogeripmZJqOt/1Oo=@vger.kernel.org X-Gm-Message-State: AOJu0YzLeZiVeFBcOaccPH9RtGgi055Gbb+1gYYRsPETqfL9IRcWdKXv kJS++f11KT4XPdQhvqc2C1YyPWcX14gJ+ShYDutX+bfoiaWGLHzhA4bT X-Gm-Gg: AeBDieudqG5JBE/6AUFYfoLx9a3pxE6zlo0vOEANwWbzPBTEGbRj/qiZgtZJRn/F7UN l+Y/JJ3fGrPLU1z8rwflAYXo4BLHU2ly3Zcd97MxGxcQWKdOkaBhaK0T+poKSGQfeyyWYkIpdH8 42dCjdN/m78P9Bcv2llTxyQKdxKzadR+N5CPy3fNjouC4N+Rtf6I1L/jR3T8oWC1sH7/8Ajr5eK Oi1OMV0Eg8tn52n5Z6hp2WnStfKYIBpDsWgTdvmvjI7La7pMEkGGFFXgxMZqYsmNkGfeaLxxIoT LnPq5OiUn0w083NMbSV4TDtm01T+cmAEgp/ue4Vq2ZpTkw5B6IZe12mCdUFOxZi+9hIpArTdgu/ uc9PRtYnf92FAuM5KQEzmnHmBK0btCxuzD027bqIzHa8rKBARPAR14NUJ8zfw1JI7t9zBH44fsN +nFbS6o75Z4M7CFxh/PTg5YFkJcfsegQ== X-Received: by 2002:aa7:88c1:0:b0:82f:1973:4b96 with SMTP id d2e1a72fcca58-834ddc14602mr5517283b3a.26.1777416146426; Tue, 28 Apr 2026 15:42:26 -0700 (PDT) Received: from localhost ([2a03:2880:ff:70::]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed80f906sm96681b3a.60.2026.04.28.15.42.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 15:42:26 -0700 (PDT) From: Bobby Eshleman Date: Tue, 28 Apr 2026 15:42:08 -0700 Subject: [PATCH net-next 11/11] selftests: drv-net: add netkit devmem 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: <20260428-tcp-dm-netkit-v1-11-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 nk_devmem.py with four tests for TCP devmem through a netkit device: These tests are just duplicates of the original devmem tests, with some adjusted parameters such as telling ncdevmem to avoid device setup (since it only has access to netkit, not a phys device). Each test uses NetDrvContEnv with primary_rx_redirect=3DTrue to set up the BPF redirect program on the primary netkit interface. Assisted-by: Claude Code:claude-sonnet-4-6 Signed-off-by: Bobby Eshleman --- .../testing/selftests/drivers/net/hw/nk_devmem.py | 40 ++++++++++++++++++= ++++ 1 file changed, 40 insertions(+) diff --git a/tools/testing/selftests/drivers/net/hw/nk_devmem.py b/tools/te= sting/selftests/drivers/net/hw/nk_devmem.py new file mode 100755 index 000000000000..c069d525798b --- /dev/null +++ b/tools/testing/selftests/drivers/net/hw/nk_devmem.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: GPL-2.0 +"""Test devmem TCP with netkit.""" + +from os import path +from lib.py import ksft_run, ksft_exit, ksft_disruptive +from lib.py import NetDrvContEnv +from lib.py.devmem import setup_test, run_rx, run_tx, run_tx_chunks, run_r= x_hds + + +@ksft_disruptive +def check_nk_rx(cfg) -> None: + run_rx(cfg) + + +@ksft_disruptive +def check_nk_tx(cfg) -> None: + run_tx(cfg) + + +@ksft_disruptive +def check_nk_tx_chunks(cfg) -> None: + run_tx_chunks(cfg) + + +@ksft_disruptive +def check_nk_rx_hds(cfg) -> None: + run_rx_hds(cfg) + + +def main() -> None: + with NetDrvContEnv(__file__, rxqueues=3D2, primary_rx_redirect=3DTrue)= as cfg: + setup_test(cfg, path.abspath(path.dirname(__file__) + "/ncdevmem")) + ksft_run([check_nk_rx, check_nk_tx, check_nk_tx_chunks, check_nk_r= x_hds], + args=3D(cfg,)) + ksft_exit() + + +if __name__ =3D=3D "__main__": + main() --=20 2.52.0