From: "Björn Töpel" <bjorn@kernel.org>
To: Magnus Karlsson <magnus.karlsson@intel.com>,
Maciej Fijalkowski <maciej.fijalkowski@intel.com>,
Stanislav Fomichev <sdf@fomichev.me>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@kernel.org>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Simon Horman <horms@kernel.org>, Jonathan Corbet <corbet@lwn.net>,
Shuah Khan <skhan@linuxfoundation.org>,
Randy Dunlap <rdunlap@infradead.org>,
Alexander Duyck <alexanderduyck@fb.com>,
kernel-team@meta.com, Andrew Lunn <andrew+netdev@lunn.ch>,
Jesper Dangaard Brouer <hawk@kernel.org>,
Ilias Apalodimas <ilias.apalodimas@linaro.org>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
John Fastabend <john.fastabend@gmail.com>,
Pavel Begunkov <asml.silence@gmail.com>,
Jens Axboe <axboe@kernel.dk>, Andrii Nakryiko <andrii@kernel.org>,
Eduard Zingerman <eddyz87@gmail.com>,
Kumar Kartikeya Dwivedi <memxor@gmail.com>,
Martin KaFai Lau <martin.lau@linux.dev>,
Song Liu <song@kernel.org>,
Yonghong Song <yonghong.song@linux.dev>,
Jiri Olsa <jolsa@kernel.org>,
Emil Tsalapatis <emil@etsalapatis.com>,
Ihor Solodrai <ihor.solodrai@linux.dev>,
netdev@vger.kernel.org, bpf@vger.kernel.org,
io-uring@vger.kernel.org, Mina Almasry <almasrymina@google.com>
Cc: "Björn Töpel" <bjorn@kernel.org>,
"Mike Marciniszyn (Meta)" <mike.marciniszyn@gmail.com>,
"Weiming Shi" <bestswngs@gmail.com>,
"Nikolay Aleksandrov" <razor@blackwall.org>,
"David Wei" <dw@davidwei.uk>,
"Alexander Lobakin" <aleksander.lobakin@intel.com>,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
"Stuart Clark" <stuclar@meta.com>
Subject: [PATCH net-next v1 00/11] xsk: Zero copy through page-pool memory providers
Date: Tue, 10 Nov 2026 11:20:21 +0100 [thread overview]
Message-ID: <20261110102039.1002605-1-bjorn@kernel.org> (raw)
Hi!
AF_XDP zero copy needs a second RX allocator in every driver. This
series makes UMEM a page-pool memory provider instead: a page_pool
driver opts in, and keeps its refill, recycling and DMA sync code.
fbnic is the first user. Patches 1-7 are core, 8-11 fbnic.
Since the RFC [RFC], net_iov is a first class netmem, the core owns
AF_XDP setup, and a refill contract replaces the NAPI kicks. The fixes
are out.
Changes since the RFC:
- A readable net_iov has an address. netmem_address() and
skb_frag_address() find it through struct net_iov_area, which now
holds niov_shift. xdp_frag_address() is gone. (Mina, Stanislav)
- PP_FLAG_ALLOW_UNREADABLE_NETMEM keeps its meaning. A pool takes a
readable provider only with the new PP_FLAG_MEM_PROVIDER. (Mina)
- The core installs the provider at bind, through the queue API, as
for devmem and io_uring. A driver sets
netdev_queue_mgmt_ops.xsk_page_pool, and checks chunk size,
headroom and multi-buffer mode in XDP_VALIDATE_XSK_POOL. MTU and
XDP program changes of a bound device get the same check.
(Stanislav)
- No NAPI kicks. Drivers report the end of each refill with
page_pool_refill_done(), and the core publishes the queue's NAPI
for provider and socket wakeups, so no ndo_xsk_wakeup. (Mina)
- Page pools declare the RX buffers they supply, header or payload.
A per-queue generation tells new pools from old ones in the restart
check.
- MP_CAP_RETAIN says whether the stack may keep provider buffers.
The stack copies the others on XDP_PASS, frame conversion and
non-XSKMAP redirects. Frame copies are linear, so multi-buffer
frames to devmap and cpumap are dropped.
- xdp_buff does not grow. The head netmem and shared info live in
driver memory, reached through a union with txq.
- The buffer pool allocates xdp_buff_xsk only for copy mode and
driver zero copy: 128 bytes less per chunk. (Stanislav)
- With XDP_USE_NEED_WAKEUP the FILL flag stays set. Setting it only
when starved races with userspace.
- fbnic is split in four: XDP redirect, netmem heads and XDP_TX,
unsplittable buffers, zero copy.
- The RFC's fixes are out. The fbnic one is upstream, and the skb
head sizing is Clement's fix [1]. Other fixes found on the way go
to net separately. (Stanislav, Maciej)
Unchanged: aligned chunks only (4 KiB on fbnic), and generic XDP and
CPUMAP cannot feed a provider socket.
fbnic, one queue, 66-byte packets: XSK RX 21.2 Mpps (17.0 with epoll),
XSK TX 28.9 Mpps, XDP_DROP costs 1.9%, 30 instructions per packet,
against net-next. Tested on fbnic hardware and the fbnic QEMU model.
Still open from the RFC: how should userspace learn the chunk
constraints before bind?
netkit queue leases and bnxt come later.
Björn
[RFC] https://lore.kernel.org/netdev/20261002190018.696925-1-bjorn@kernel.org/
[1] https://lore.kernel.org/bpf/20260629072300.1664622-1-clecigne@google.com/
Björn Töpel (11):
net: Get skb fragment addresses through netmem
net: Add memory provider capabilities
xdp: Copy buffers with restricted lifetime
xsk: Allocate UMEM chunks through page_pool
xsk: Install UMEM page pool providers in the core
page_pool: Coordinate refill with memory providers
xsk: Deliver provider chunks without copying
eth: fbnic: Support XDP redirect
eth: fbnic: Use netmem for RX headers and XDP_TX
eth: fbnic: Support RX buffers it cannot split
eth: fbnic: Support AF_XDP page pool zero copy
Documentation/networking/af_xdp.rst | 64 +-
Documentation/networking/netmem.rst | 15 +
Documentation/networking/xsk-tx-metadata.rst | 3 +-
.../net/ethernet/meta/fbnic/fbnic_netdev.c | 22 +-
drivers/net/ethernet/meta/fbnic/fbnic_txrx.c | 601 ++++++++++++---
drivers/net/ethernet/meta/fbnic/fbnic_txrx.h | 28 +
drivers/net/netkit.c | 3 +-
include/linux/netdevice.h | 8 +
include/linux/skbuff.h | 22 +-
include/net/netdev_queues.h | 12 +
include/net/netdev_rx_queue.h | 8 +
include/net/netmem.h | 41 +-
include/net/page_pool/helpers.h | 38 +-
include/net/page_pool/memory_provider.h | 21 +
include/net/page_pool/types.h | 33 +-
include/net/xdp.h | 94 ++-
include/net/xdp_sock.h | 4 +
include/net/xdp_sock_drv.h | 45 ++
include/net/xsk_buff_pool.h | 3 +
io_uring/zcrx.c | 2 +
net/core/dev.c | 30 +-
net/core/dev.h | 8 +
net/core/devmem.c | 9 +-
net/core/devmem.h | 4 +-
net/core/filter.c | 20 +-
net/core/netdev_config.c | 2 +
net/core/netdev_rx_queue.c | 143 +++-
net/core/page_pool.c | 100 ++-
net/core/page_pool_user.c | 25 +-
net/core/xdp.c | 78 +-
net/ethtool/rings.c | 7 +-
net/xdp/Kconfig | 1 +
net/xdp/Makefile | 2 +-
net/xdp/xsk.c | 86 ++-
net/xdp/xsk.h | 15 +
net/xdp/xsk_buff_pool.c | 72 +-
net/xdp/xsk_pp.c | 697 ++++++++++++++++++
net/xdp/xsk_queue.h | 18 +-
38 files changed, 2159 insertions(+), 225 deletions(-)
create mode 100644 net/xdp/xsk_pp.c
base-commit: 2d916a8c307c31b433318509bf0311d52d509f09
--
2.56.0
next reply other threads:[~2026-11-10 10:20 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-10 10:20 Björn Töpel [this message]
2026-11-10 10:20 ` [PATCH net-next v1 01/11] net: Get skb fragment addresses through netmem Björn Töpel
2026-11-12 8:32 ` saeed bishara
2026-11-12 13:57 ` Björn Töpel
2026-11-13 5:17 ` Mina Almasry
2026-11-10 10:20 ` [PATCH net-next v1 02/11] net: Add memory provider capabilities Björn Töpel
2026-11-10 22:19 ` Stanislav Fomichev
2026-11-11 12:41 ` Björn Töpel
2026-11-11 23:01 ` Stanislav Fomichev
2026-11-12 14:01 ` Björn Töpel
2026-11-13 0:21 ` Stanislav Fomichev
2026-11-11 10:22 ` sashiko-bot
2026-11-11 22:41 ` netdev-bot+sashiko
2026-11-13 5:30 ` Mina Almasry
2026-11-10 10:20 ` [PATCH net-next v1 03/11] xdp: Copy buffers with restricted lifetime Björn Töpel
2026-11-10 22:32 ` Stanislav Fomichev
2026-11-11 13:27 ` Björn Töpel
2026-11-11 23:05 ` Stanislav Fomichev
2026-11-11 10:22 ` sashiko-bot
2026-11-11 22:41 ` netdev-bot+sashiko
2026-11-10 10:20 ` [PATCH net-next v1 04/11] xsk: Allocate UMEM chunks through page_pool Björn Töpel
2026-11-10 15:08 ` Magnus Karlsson
2026-11-11 13:51 ` Björn Töpel
2026-11-10 23:02 ` Stanislav Fomichev
2026-11-11 13:59 ` Björn Töpel
2026-11-11 23:09 ` Stanislav Fomichev
2026-11-11 22:41 ` netdev-bot+sashiko
2026-11-10 10:20 ` [PATCH net-next v1 05/11] xsk: Install UMEM page pool providers in the core Björn Töpel
2026-11-10 23:50 ` Stanislav Fomichev
2026-11-11 14:01 ` Björn Töpel
2026-11-11 8:59 ` Magnus Karlsson
2026-11-11 19:26 ` Björn Töpel
2026-11-12 8:08 ` Magnus Karlsson
2026-11-11 10:22 ` sashiko-bot
2026-11-11 22:41 ` netdev-bot+sashiko
2026-11-12 11:53 ` Maciej Fijalkowski
2026-11-12 14:48 ` Björn Töpel
2026-11-12 15:43 ` Maciej Fijalkowski
2026-11-12 19:51 ` Björn Töpel
2026-11-10 10:20 ` [PATCH net-next v1 06/11] page_pool: Coordinate refill with memory providers Björn Töpel
2026-11-10 23:51 ` Stanislav Fomichev
2026-11-11 19:37 ` Björn Töpel
2026-11-11 23:13 ` Stanislav Fomichev
2026-11-12 14:53 ` Björn Töpel
2026-11-11 10:22 ` sashiko-bot
2026-11-11 22:41 ` netdev-bot+sashiko
2026-11-10 10:20 ` [PATCH net-next v1 07/11] xsk: Deliver provider chunks without copying Björn Töpel
2026-11-11 22:41 ` netdev-bot+sashiko
2026-11-11 23:20 ` Stanislav Fomichev
2026-11-12 15:10 ` Björn Töpel
2026-11-12 12:17 ` Maciej Fijalkowski
2026-11-12 19:57 ` Björn Töpel
2026-11-10 10:20 ` [PATCH net-next v1 08/11] eth: fbnic: Support XDP redirect Björn Töpel
2026-11-11 10:22 ` sashiko-bot
2026-11-10 10:20 ` [PATCH net-next v1 09/11] eth: fbnic: Use netmem for RX headers and XDP_TX Björn Töpel
2026-11-10 10:20 ` [PATCH net-next v1 10/11] eth: fbnic: Support RX buffers it cannot split Björn Töpel
2026-11-11 10:22 ` sashiko-bot
2026-11-11 21:45 ` Dimitri Daskalakis
2026-11-11 22:41 ` netdev-bot+sashiko
2026-11-10 10:20 ` [PATCH net-next v1 11/11] eth: fbnic: Support AF_XDP page pool zero copy Björn Töpel
2026-11-11 10:22 ` sashiko-bot
2026-11-11 22:41 ` netdev-bot+sashiko
2026-11-12 11:37 ` Maciej Fijalkowski
2026-11-12 20:03 ` Björn Töpel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261110102039.1002605-1-bjorn@kernel.org \
--to=bjorn@kernel.org \
--cc=aleksander.lobakin@intel.com \
--cc=alexanderduyck@fb.com \
--cc=almasrymina@google.com \
--cc=andrew+netdev@lunn.ch \
--cc=andrii@kernel.org \
--cc=asml.silence@gmail.com \
--cc=ast@kernel.org \
--cc=axboe@kernel.dk \
--cc=bestswngs@gmail.com \
--cc=bpf@vger.kernel.org \
--cc=corbet@lwn.net \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=dw@davidwei.uk \
--cc=eddyz87@gmail.com \
--cc=edumazet@kernel.org \
--cc=emil@etsalapatis.com \
--cc=hawk@kernel.org \
--cc=horms@kernel.org \
--cc=ihor.solodrai@linux.dev \
--cc=ilias.apalodimas@linaro.org \
--cc=io-uring@vger.kernel.org \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kernel-team@meta.com \
--cc=kuba@kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maciej.fijalkowski@intel.com \
--cc=magnus.karlsson@intel.com \
--cc=martin.lau@linux.dev \
--cc=memxor@gmail.com \
--cc=mike.marciniszyn@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=razor@blackwall.org \
--cc=rdunlap@infradead.org \
--cc=sdf@fomichev.me \
--cc=skhan@linuxfoundation.org \
--cc=song@kernel.org \
--cc=stuclar@meta.com \
--cc=yonghong.song@linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.