mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH net-next v2 0/5] fbnic: Support larger RX pages
@ 2026-09-10 18:09 Björn Töpel
  2026-09-10 18:09 ` [PATCH net-next v2 1/5] net: Add netdev_config helpers Björn Töpel
                   ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Björn Töpel @ 2026-09-10 18:09 UTC (permalink / raw)
  To: Alexander Duyck, Jakub Kicinski, kernel-team, Andrew Lunn,
	David S. Miller, Eric Dumazet, Paolo Abeni, Simon Horman,
	Shuah Khan, netdev, linux-kernel, linux-kselftest,
	Daniel Borkmann
  Cc: Björn Töpel, Mike Marciniszyn (Meta),
	Mohsin Bashir, Stanislav Fomichev, Bobby Eshleman,
	Dimitri Daskalakis, Weiming Shi, Maxime Chevallier, Jacob Keller,
	Breno Leitao, Tao Cui, Pavel Begunkov, David Wei

Hi!

The v1 was out end-of-May! I hope you didn't hold your breath! ;-)
Here goes...

This series adds support for large io_uring zero-copy RX buffers to
fbnic.

fbnic hardware consumes receive memory in 4 KiB device pages, while
io_uring may expose a larger software buffer, such as 256 KiB. Track
the device-page geometry per BDQ, represent each large buffer with
consecutive descriptors, and decode completions to the corresponding
offset within the buffer. HPQ keeps its existing PAGE_SIZE geometry.

Larger buffers also reduce pressure on the memory provider. One
provider allocation supplies multiple 4 KiB device pages, so the same
amount of receive memory needs fewer net_iov objects and fewer
allocation, refill, and recycle operations. Hardware descriptor use
remains unchanged.

Ring depth and buffer size must be validated together. An ethtool ring
change can otherwise make an active memory-provider configuration
invalid. Store accepted ring depths in netdev_config, stage proposed
values in cfg_pending, and validate the default and each RX queue
before committing the change. Both netlink and ioctl use the same
transaction helpers.

The selftest requests a buffer larger than twice the MTU and requires
a receive CQE to end past the first MTU-sized region. Drivers which
reject the size are skipped. Drivers which accept it but only use that
first region fail.

Changes in v2
=============

- Add generic netdev_config lifecycle helpers, and use
  netdev_reconfig_start() and __netdev_free_config() from both the
  netlink and ioctl paths.
- Store ring parameters in netdev_config and revalidate the default and
  each RX queue before committing a ring change.
- Preserve the distinction between accepted and applied HDS state:
  unrelated SET operations retain an accepted auto value, while
  RINGS_GET reports the state applied by the driver.
- Track the fbnic device-page geometry per BDQ and use it when posting
  buffers and decoding completions.
- Validate fbnic RX page size, payload fragment count, and the number of
  software entries available in the payload queue.
- Replace the manual-only offset check with a portable check run by the
  Python large-buffer test, and include the received byte count on
  timeout.
- Rebase on net-next.

v1: https://lore.kernel.org/netdev/20260522113225.241337-1-bjorn@kernel.org/

Björn Töpel (4):
  fbnic: Track BDQ device-page geometry per ring
  net: Revalidate queue config for ringparam changes
  fbnic: Support larger memory-provider RX pages
  selftests: drv-net: Test large zcrx buffers

Jakub Kicinski (1):
  net: Add netdev_config helpers

 drivers/net/ethernet/meta/fbnic/fbnic_csr.h   |  34 +---
 .../net/ethernet/meta/fbnic/fbnic_debugfs.c   |   5 +-
 .../net/ethernet/meta/fbnic/fbnic_ethtool.c   |   8 +-
 .../net/ethernet/meta/fbnic/fbnic_netdev.c    |   5 +
 drivers/net/ethernet/meta/fbnic/fbnic_txrx.c  | 165 ++++++++++++++----
 drivers/net/ethernet/meta/fbnic/fbnic_txrx.h  |  12 ++
 include/net/netdev_queues.h                   |  48 ++++-
 net/core/dev.c                                |   7 +-
 net/core/dev.h                                |   7 +
 net/core/netdev_config.c                      |  75 +++++++-
 net/ethtool/common.c                          |   9 +
 net/ethtool/common.h                          |   2 +
 net/ethtool/ioctl.c                           |  24 ++-
 net/ethtool/netlink.c                         |  15 +-
 net/ethtool/rings.c                           |  13 +-
 .../selftests/drivers/net/hw/iou-zcrx.c       |  33 +++-
 .../selftests/drivers/net/hw/iou-zcrx.py      |   6 +-
 17 files changed, 374 insertions(+), 94 deletions(-)


base-commit: 0abe8777490ebc008635ecb20297761d1b317697
-- 
2.55.0


^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2026-09-11 22:47 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-10 18:09 [PATCH net-next v2 0/5] fbnic: Support larger RX pages Björn Töpel
2026-09-10 18:09 ` [PATCH net-next v2 1/5] net: Add netdev_config helpers Björn Töpel
2026-09-11  9:20   ` Breno Leitao
2026-09-11 22:47     ` Jakub Kicinski
2026-09-10 18:09 ` [PATCH net-next v2 2/5] fbnic: Track BDQ device-page geometry per ring Björn Töpel
2026-09-10 18:09 ` [PATCH net-next v2 3/5] net: Revalidate queue config for ringparam changes Björn Töpel
2026-09-11 18:16   ` netdev-bot+sashiko
2026-09-10 18:09 ` [PATCH net-next v2 4/5] fbnic: Support larger memory-provider RX pages Björn Töpel
2026-09-11 18:16   ` netdev-bot+sashiko
2026-09-10 18:09 ` [PATCH net-next v2 5/5] selftests: drv-net: Test large zcrx buffers Björn Töpel
2026-09-11 18:16   ` netdev-bot+sashiko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®