XDP for idpf is currently 5.5 chapters: * convert Rx to libeth; * convert Tx and stats to libeth; * generic XDP and XSk code changes; * generic XDP and XSk code additions (you are here); * actual XDP for idpf via new libeth_xdp; * XSk for idpf (via ^). Part III.2 does the following: * allows mixing pages from several Page Pools within one XDP frame; * optimizes &xdp_frame structure and removes no-more-used field; * adds generic functions to build skbs from xdp_buffs (regular and XSk) and attach frags to xdp_buffs (regular and XSk); * adds helper to optimize XSk xmit in drivers; * makes XDP core and Page Pool a bit more netmem-friendly. Everything is prereq for libeth_xdp, but will be useful standalone as well: faster xdp_return_frame_bulk() and xdp_frame fields access, less code in drivers, faster XSk XDP_PASS, smaller object code. Alexander Lobakin (12): page_pool: allow mixing PPs within one bulk xdp: get rid of xdp_frame::mem.id xdp: make __xdp_return() MP-agnostic xdp: add generic xdp_buff_add_frag() xdp: add generic xdp_build_skb_from_buff() xsk: make xsk_buff_add_frag really add the frag via __xdp_buff_add_frag() xsk: add generic XSk &xdp_buff -> skb conversion xsk: add helper to get &xdp_desc's DMA and meta pointer in one go page_pool: add a couple of netmem counterparts skbuff: allow 2-4-argument skb_frag_dma_map() jump_label: export static_key_slow_{inc,dec}_cpuslocked() unroll: add generic loop unroll helpers include/net/page_pool/types.h | 6 +- include/linux/skbuff.h | 47 ++- include/linux/unroll.h | 44 +++ include/net/page_pool/helpers.h | 46 ++- include/net/xdp.h | 130 +++++++- include/net/xdp_sock_drv.h | 41 ++- include/net/xsk_buff_pool.h | 8 + .../net/ethernet/freescale/dpaa/dpaa_eth.c | 2 +- drivers/net/ethernet/intel/i40e/i40e_xsk.c | 30 +- drivers/net/ethernet/intel/ice/ice_xsk.c | 32 +- drivers/net/veth.c | 4 +- kernel/bpf/cpumap.c | 2 +- kernel/jump_label.c | 2 + net/bpf/test_run.c | 4 +- net/core/filter.c | 17 +- net/core/page_pool.c | 109 ++++--- net/core/xdp.c | 290 ++++++++++++++---- net/xdp/xsk_buff_pool.c | 40 +++ 18 files changed, 645 insertions(+), 209 deletions(-) --- Each patch except trivial 0003 and 0009 was on the lists already. * 0001 now includes Jakub's suggestions (pre-pass + while(count)); * 0004 doesn't leak refcounts anymore (also Jakub). -- 2.47.1