Re: [PATCH v2 net-next 0/9] mvneta: introduce XDP multi-buffer support
From: Lorenzo Bianconi <lorenzo@kernel.org>
Date: 2020-09-04 07:40:00
Also in:
bpf
Lorenzo Bianconi wrote:quoted
- Finalize XDP multi-buffer support for mvneta driver introducing the capability to map non-linear buffers on tx side. - Introduce multi-buffer bit (mb) in xdp_frame/xdp_buffer to specify if shared_info area has been properly initialized. - Initialize multi-buffer bit (mb) to 0 in all XDP-capable drivers. - Add multi-buff support to xdp_return_{buff/frame} utility routines. - Introduce bpf_xdp_adjust_mb_header helper to adjust frame headers moving *offset* bytes from/to the second buffer to/from the first one. This helper can be used to move headers when the hw DMA SG is not able to copy all the headers in the first fragment and split header and data pages. A possible use case for bpf_xdp_adjust_mb_header is described here [0]Are those slides available anywhere? [0] is just a link to the abstract.
Yes, sorry. I would point out where we got the idea for this helper. I do not think the slides are available yet but I guess they will be soon.
quoted
- Introduce bpf_xdp_get_frag_count and bpf_xdp_get_frags_total_size helpers to report the total number/size of frags for a given xdp multi-buff. XDP multi-buffer design principles are described here [1] For the moment we have not implemented any self-test for the introduced the bpf helpers. We can address this in a follow up series if the proposed approach is accepted.Will need to include selftests with series.
Sure, I will add selftests in v3. Regards, Lorenzo
quoted
Changes since v1: - Fix use-after-free in xdp_return_{buff/frame} - Introduce bpf helpers - Introduce xdp_mb sample program - access skb_shared_info->nr_frags only on the last fragment Changes since RFC: - squash multi-buffer bit initialization in a single patch - add mvneta non-linear XDP buff support for tx side [0] https://netdevconf.info/0x14/session.html?talk-the-path-to-tcp-4k-mtu-and-rx-zerocopy [1] https://github.com/xdp-project/xdp-project/blob/master/areas/core/xdp-multi-buffer01-design.org Lorenzo Bianconi (7): xdp: introduce mb in xdp_buff/xdp_frame xdp: initialize xdp_buff mb bit to 0 in all XDP drivers net: mvneta: update mb bit before passing the xdp buffer to eBPF layer xdp: add multi-buff support to xdp_return_{buff/frame} net: mvneta: add multi buffer support to XDP_TX bpf: helpers: add bpf_xdp_adjust_mb_header helper net: mvneta: enable jumbo frames for XDP Sameeh Jubran (2): bpf: helpers: add multibuffer support samples/bpf: add bpf program that uses xdp mb helpers drivers/net/ethernet/amazon/ena/ena_netdev.c | 1 + drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 1 + .../net/ethernet/cavium/thunder/nicvf_main.c | 1 + .../net/ethernet/freescale/dpaa2/dpaa2-eth.c | 1 + drivers/net/ethernet/intel/i40e/i40e_txrx.c | 1 + drivers/net/ethernet/intel/ice/ice_txrx.c | 1 + drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 1 + .../net/ethernet/intel/ixgbevf/ixgbevf_main.c | 1 + drivers/net/ethernet/marvell/mvneta.c | 126 ++++++------ .../net/ethernet/marvell/mvpp2/mvpp2_main.c | 1 + drivers/net/ethernet/mellanox/mlx4/en_rx.c | 1 + .../net/ethernet/mellanox/mlx5/core/en_rx.c | 1 + .../ethernet/netronome/nfp/nfp_net_common.c | 1 + drivers/net/ethernet/qlogic/qede/qede_fp.c | 1 + drivers/net/ethernet/sfc/rx.c | 1 + drivers/net/ethernet/socionext/netsec.c | 1 + drivers/net/ethernet/ti/cpsw.c | 1 + drivers/net/ethernet/ti/cpsw_new.c | 1 + drivers/net/hyperv/netvsc_bpf.c | 1 + drivers/net/tun.c | 2 + drivers/net/veth.c | 1 + drivers/net/virtio_net.c | 2 + drivers/net/xen-netfront.c | 1 + include/net/xdp.h | 26 ++- include/uapi/linux/bpf.h | 39 +++- net/core/dev.c | 1 + net/core/filter.c | 93 +++++++++ net/core/xdp.c | 40 ++++ samples/bpf/Makefile | 3 + samples/bpf/xdp_mb_kern.c | 68 +++++++ samples/bpf/xdp_mb_user.c | 182 ++++++++++++++++++ tools/include/uapi/linux/bpf.h | 40 +++- 32 files changed, 572 insertions(+), 70 deletions(-) create mode 100644 samples/bpf/xdp_mb_kern.c create mode 100644 samples/bpf/xdp_mb_user.c -- 2.26.2
Attachments
- signature.asc [application/pgp-signature] 228 bytes