From: Jesper Dangaard Brouer <brouer@xxxxxxxxxx> Date: Wed, 07 Sep 2022 17:45:00 +0200 > This patchset expose the traditional hardware offload hints to XDP and > rely on BTF to expose the layout to users. > > Main idea is that the kernel and NIC drivers simply defines the struct > layouts they choose to use for XDP-hints. These XDP-hints structs gets > naturally and automatically described via BTF and implicitly exported to > users. NIC drivers populate and records their own BTF ID as the last > member in XDP metadata area (making it easily accessible by AF_XDP > userspace at a known negative offset from packet data start). > > Naming conventions for the structs (xdp_hints_*) is used such that > userspace can find and decode the BTF layout and match against the > provided BTF IDs. Thus, no new UAPI interfaces are needed for exporting > what XDP-hints a driver supports. > > The patch "i40e: Add xdp_hints_union" introduce the idea of creating a > union named "xdp_hints_union" in every driver, which contains all > xdp_hints_* struct this driver can support. This makes it easier/quicker > to find and parse the relevant BTF types. (Seeking input before fixing > up all drivers in patchset). > > > The main different from RFC-v1: > - Drop idea of BTF "origin" (vmlinux, module or local) > - Instead to use full 64-bit BTF ID that combine object+type ID > > I've taken some of Alexandr/Larysa's libbpf patches and integrated > those. Not sure if it's okay to inform the authors about the fact only after sending? Esp from the eeeh... "incompatible" implementation? I realize it's open code, but this looks sorta depreciatingly. > > Patchset exceeds netdev usually max 15 patches rule. My excuse is three > NIC drivers (i40e, ixgbe and mvneta) gets XDP-hints support and which > required some refactoring to remove the SKB dependencies. > > > --- > > Jesper Dangaard Brouer (10): > net: create xdp_hints_common and set functions > net: add net_device feature flag for XDP-hints > xdp: controlling XDP-hints from BPF-prog via helper > i40e: Refactor i40e_ptp_rx_hwtstamp > i40e: refactor i40e_rx_checksum with helper > bpf: export btf functions for modules > btf: Add helper for kernel modules to lookup full BTF ID > i40e: add XDP-hints handling > net: use XDP-hints in xdp_frame to SKB conversion > i40e: Add xdp_hints_union > > Larysa Zaremba (3): > libbpf: factor out BTF loading from load_module_btfs() > libbpf: try to load vmlinux BTF from the kernel first > libbpf: patch module BTF obj+type ID into BPF insns > > Lorenzo Bianconi (1): > mvneta: add XDP-hints support > > Maryam Tahhan (4): > ixgbe: enable xdp-hints > ixgbe: add rx timestamp xdp hints support > xsk: AF_XDP xdp-hints support in desc options > ixgbe: AF_XDP xdp-hints processing in ixgbe_clean_rx_irq_zc > > > drivers/net/ethernet/intel/i40e/i40e.h | 1 + > drivers/net/ethernet/intel/i40e/i40e_main.c | 22 ++ > drivers/net/ethernet/intel/i40e/i40e_ptp.c | 36 ++- > drivers/net/ethernet/intel/i40e/i40e_txrx.c | 252 ++++++++++++++--- > drivers/net/ethernet/intel/ixgbe/ixgbe.h | 5 + > drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 217 +++++++++++++-- > drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c | 82 ++++-- > drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c | 2 + > drivers/net/ethernet/marvell/mvneta.c | 59 +++- > include/linux/btf.h | 3 + > include/linux/netdev_features.h | 3 +- > include/net/xdp.h | 256 +++++++++++++++++- > include/uapi/linux/bpf.h | 35 +++ > include/uapi/linux/if_xdp.h | 2 +- > kernel/bpf/btf.c | 36 ++- > net/core/filter.c | 52 ++++ > net/core/xdp.c | 22 +- > net/ethtool/common.c | 1 + > net/xdp/xsk.c | 2 +- > net/xdp/xsk_queue.h | 3 +- > tools/lib/bpf/bpf_core_read.h | 3 +- > tools/lib/bpf/btf.c | 142 +++++++++- > tools/lib/bpf/libbpf.c | 52 +--- > tools/lib/bpf/libbpf_internal.h | 7 +- > tools/lib/bpf/relo_core.c | 8 +- > tools/lib/bpf/relo_core.h | 1 + > 26 files changed, 1127 insertions(+), 177 deletions(-) > > -- Olek