From: Alexander Lobakin <[email protected]> Date: Thu, 4 Dec 2025 16:51:28 +0100
> Now that ice uses libeth for managing Rx buffers and supports > configurable header split, it's ready to get support for sending > and receiving packets with unreadable (to the kernel) frags. > > Extend libeth just a little bit to allow creating PPs with custom > memory providers and make sure ice works correctly with the netdev > ops locking. Then add the full set of queue_mgmt_ops and don't > unmap unreadable frags on Tx completion. > No perf regressions for the regular flows and no code duplication > implied. > > Credits to the fbnic developers, which's code helped me understand > the memory providers and queue_mgmt_ops logics and served as > a reference. > > Alexander Lobakin (5): > libeth: pass Rx queue index to PP when creating a fill queue > libeth: handle creating pools with unreadable buffers > ice: migrate to netdev ops lock > ice: implement Rx queue management ops > ice: add support for transmitting unreadable frags > > drivers/net/ethernet/intel/ice/ice_lib.h | 11 +- > drivers/net/ethernet/intel/ice/ice_txrx.h | 2 + > drivers/net/ethernet/intel/idpf/idpf_txrx.h | 2 + > include/net/libeth/rx.h | 2 + > include/net/libeth/tx.h | 2 +- > drivers/net/ethernet/intel/iavf/iavf_txrx.c | 1 + > drivers/net/ethernet/intel/ice/ice_base.c | 194 ++++++++++++++------ > drivers/net/ethernet/intel/ice/ice_lib.c | 56 +++++- > drivers/net/ethernet/intel/ice/ice_main.c | 50 ++--- > drivers/net/ethernet/intel/ice/ice_sf_eth.c | 2 + > drivers/net/ethernet/intel/ice/ice_txrx.c | 43 +++-- > drivers/net/ethernet/intel/ice/ice_xsk.c | 4 +- > drivers/net/ethernet/intel/idpf/idpf_txrx.c | 13 ++ > drivers/net/ethernet/intel/libeth/rx.c | 46 +++++ > 14 files changed, 325 insertions(+), 103 deletions(-) > > --- > From v1[0]: > * rebase on top of the latest next-queue; > * fix a typo 'rxq_ixd' -> 'rxq_idx' (Tony). > > Testing hints: > * regular Rx and Tx for regressions; > * <kernel root>/tools/testing/selftests/drivers/net/hw/ contains > scripts for testing netmem Rx and Tx, namely devmem.py and > iou-zcrx.py (read the documentation first). > > [0] > https://lore.kernel.org/intel-wired-lan/[email protected] Current status from the validation: * io_uring tests pass, except for tests which try to setup RSS Rx contexts -- after recent changes in the kernel, seems like at least some of our drivers return -EOPNOTSUPP when trying to configure RSS. Tony, did you have any related reports or planned fixes? * devmem -- only the Tx test fails, may be related to our complicated .ndo_start_xmit() logic in ice, I'll investigate this as soon as I get some details from the val. Thanks, Olek
