On 10/16/2026 8:18 AM, Luigi Rizzo wrote:
libeth_rx_alloc() always allocates with GFP_ATOMIC, including when idpf
fills its Rx rings at open or on queue reconfiguration. That fill runs
in process context, right after page_pool_create() and before the
queues' NAPI is enabled, so it may sleep, and GFP_ATOMIC is needlessly
restrictive there: it can neither reclaim nor compact, while the initial
fill can allocate tens of thousands of buffers across all queues.

Add libeth_rx_alloc_gfp(), which takes the allocation flags, and make
libeth_rx_alloc() its GFP_ATOMIC wrapper. Use GFP_KERNEL for the initial
fill in idpf.

Signed-off-by: Luigi Rizzo <[email protected]>
---
  .../ethernet/intel/idpf/idpf_singleq_txrx.c   |  7 +++---
  drivers/net/ethernet/intel/idpf/idpf_txrx.c   |  9 +++++---
  drivers/net/ethernet/intel/idpf/idpf_txrx.h   |  2 +-
  include/net/libeth/rx.h                       | 23 +++++++++++++++----

Since libeth is outside the driver, it may be better as a separate patch?

  4 files changed, 30 insertions(+), 11 deletions(-)

Reviewed-by: Emil Tantilov <[email protected]>

Thanks,
Emil

Reply via email to