[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251220235135.1078587-1-pvalerio@redhat.com>
Date: Sun, 21 Dec 2025 00:51:27 +0100
From: Paolo Valerio <pvalerio@...hat.com>
To: netdev@...r.kernel.org
Cc: Nicolas Ferre <nicolas.ferre@...rochip.com>,
Claudiu Beznea <claudiu.beznea@...on.dev>,
Andrew Lunn <andrew+netdev@...n.ch>,
"David S. Miller" <davem@...emloft.net>,
Eric Dumazet <edumazet@...gle.com>,
Jakub Kicinski <kuba@...nel.org>,
Paolo Abeni <pabeni@...hat.com>,
Lorenzo Bianconi <lorenzo@...nel.org>,
Théo Lebrun <theo.lebrun@...tlin.com>
Subject: [PATCH RFC net-next v2 0/8] net: macb: Add XDP support and page pool integration
This was initially planned to be sent as non-RFC, but given net-next
will remain closed for some more, might make sense to start sending it as
RFC v2.
Tested on Raspberry Pi 5.
All the changes are intended for gem only.
The series consists of two main changes:
- Migration from netdev_alloc_skb() to page pool allocation model,
enabling skb recycling.
This also adds support for multi-descriptor frame reception,
removing the previous single-descriptor approach and avoiding
potentially large contiguous allocations for e.g. jumbo frames
with CONFIG_PAGE_SIZE_4KB.
- XDP support: Base XDP implementation supporting all major
verdicts (XDP_PASS, XDP_DROP, XDP_REDIRECT, XDP_TX) along with
the ndo_xdp_xmit function for packet redirection.
The driver now advertises NETDEV_XDP_ACT_BASIC, NETDEV_XDP_ACT_REDIRECT,
NETDEV_XDP_ACT_NDO_XMIT capabilities.
v1: https://lore.kernel.org/netdev/20251119135330.551835-1-pvalerio@redhat.com/
Changes since RFC v1
====================
- Squashed 1/6 and 2/6
- Reworked rx_buffer_size computation. It no longer takes into
accounts extra room.
- A bunch of renaming (rx_offset => rx_headroom, removed MACB_MAX_PAD,
MACB_PP_HEADROOM => XDP_PACKET_HEADROOM, data => ptr, xdp_q => xdp_rxq,
macb_xdp() => gem_xdp(), macb_xdp_xmit() => gem_xdp_xmit())
- Deduplicated buffer size computation in gem_xdp_valid_mtu()
and gem_xdp_setup()
- gem_xdp_setup() no longer close()/open()
- Renaming from rx_skbuff to rx_buff is now got split in a separate commit
- Open-coded gem_page_pool_get_buff()
- Added missing rx_buff re-initialization in the error path during rx
- Page pool creation failure now fails the device open
- Moved xdp buff preparation inside gem_xdp_run()
- Added missing rcu_access_pointer()
- Turned return value in -EOPNOTSUPP for macb_xdp() on failure
- moved tx_skb to tx_buff renaming to a separate commit
- Removed some unneeded code and set MACB_TYPE_SKB for lp->rm9200_txq[desc].type as well
- Replaced !!addr with a dedicated bool in macb_xdp_submit_frame()
Additional notes
================
- Clamping is there and needed as rx_buffer_size + overhead cannot be greater
than a PAGE_SIZE. This is fine as frames larger than PAGE_SIZE
are still handled in a scattered way as intended.
- Code in macb_xdp_submit_frame() and macb_start_xmit()/macb_tx_map() was not
factored as the skb path, other than being scattered across skb specific code,
also contains frags handling.
Probably a unification attempt might better be done when multi buff support for
xdp gets added.
Paolo Valerio (7):
net: macb: rename rx_skbuff into rx_buff
cadence: macb: Add page pool support handle multi-descriptor frame rx
cadence: macb: use the current queue number for stats
cadence: macb: add XDP support for gem
cadence: macb: make macb_tx_skb generic
cadence: macb: make tx path skb agnostic
cadence: macb: introduce xmit support
Théo Lebrun (1):
net: macb: move Rx buffers alloc from link up to open
drivers/net/ethernet/cadence/Kconfig | 1 +
drivers/net/ethernet/cadence/macb.h | 41 +-
drivers/net/ethernet/cadence/macb_main.c | 811 +++++++++++++++++------
3 files changed, 654 insertions(+), 199 deletions(-)
--
2.52.0
Powered by blists - more mailing lists