Alexei has requested an implementation of VLAN and checksum XDP hints for one more driver [0]. This series is exactly the v5 of "XDP metadata via kfuncs for ice" [1] with 2 additional patches for mlx5. Firstly, there is a VLAN hint implementation. I am pretty sure this one works and would not object adding it to the main series, if someone from nvidia ACKs it. The second patch is a checksum hint implementation and it is very rough. There is logic duplication and some missing features, but I am sure it captures the main points of the potential end implementation. I think it is unrealistic for me to provide a fully working mlx5 checksum hint implementation (complex logic, no HW), so would much rather prefer not having it in my main series. My main intension with this RFC is to prove proposed hints functions are suitable for non-intel HW. On Maciej's request, I provide some numbers about impact of these patches on ice performance. ZC: * Full hints implementation before addition of the static key decreases pps in ZC mode by 6% * Adding a static key eliminates this drop. Overall performce difference compared to a clean tree in inconsequential. skb (packets with invalid IP, dropped by stack): * Overall, patchset improves performance in skb mode by 2% [0] https://lore.kernel.org/bpf/CAADnVQLNeO81zc4f_z_UDCi+tJ2LS4dj2E1+au5TbXM+CPSyXQ@xxxxxxxxxxxxxx/ [1] https://lore.kernel.org/bpf/20230811161509.19722-1-larysa.zaremba@xxxxxxxxx/ Changes since RFC v1: * new patch: hide some ice hints code behind a static key * fixed several bugs in ZC mode (ice) * change argument order in VLAN hint kfunc (tci, proto -> proto, tci) * cosmetic changes * analyze performance impact Aleksander Lobakin (1): net, xdp: allow metadata > 32 Larysa Zaremba (23): ice: make RX hash reading code more reusable ice: make RX HW timestamp reading code more reusable ice: make RX checksum checking code more reusable ice: Make ptype internal to descriptor info processing ice: Introduce ice_xdp_buff ice: Support HW timestamp hint ice: Support RX hash XDP hint ice: Support XDP hints in AF_XDP ZC mode xdp: Add VLAN tag hint ice: Implement VLAN tag hint ice: use VLAN proto from ring packet context in skb path xdp: Add checksum hint ice: Implement checksum hint ice: put XDP meta sources assignment under a static key condition selftests/bpf: Allow VLAN packets in xdp_hw_metadata selftests/bpf: Add flags and new hints to xdp_hw_metadata veth: Implement VLAN tag and checksum XDP hint net: make vlan_get_tag() return -ENODATA instead of -EINVAL selftests/bpf: Use AF_INET for TX in xdp_metadata selftests/bpf: Check VLAN tag and proto in xdp_metadata selftests/bpf: check checksum state in xdp_metadata mlx5: implement VLAN tag XDP hint mlx5: implement RX checksum XDP hint Documentation/networking/xdp-rx-metadata.rst | 11 +- drivers/net/ethernet/intel/ice/ice.h | 3 + drivers/net/ethernet/intel/ice/ice_ethtool.c | 2 +- .../net/ethernet/intel/ice/ice_lan_tx_rx.h | 412 +++++++++--------- drivers/net/ethernet/intel/ice/ice_lib.c | 2 +- drivers/net/ethernet/intel/ice/ice_main.c | 35 ++ drivers/net/ethernet/intel/ice/ice_ptp.c | 25 +- drivers/net/ethernet/intel/ice/ice_ptp.h | 16 +- drivers/net/ethernet/intel/ice/ice_txrx.c | 20 +- drivers/net/ethernet/intel/ice/ice_txrx.h | 29 +- drivers/net/ethernet/intel/ice/ice_txrx_lib.c | 330 +++++++++++--- drivers/net/ethernet/intel/ice/ice_txrx_lib.h | 18 +- drivers/net/ethernet/intel/ice/ice_xsk.c | 49 ++- .../net/ethernet/mellanox/mlx5/core/en/txrx.h | 10 + .../net/ethernet/mellanox/mlx5/core/en/xdp.c | 115 +++++ .../net/ethernet/mellanox/mlx5/core/en_rx.c | 12 +- drivers/net/veth.c | 42 ++ include/linux/if_vlan.h | 4 +- include/linux/mlx5/device.h | 4 +- include/linux/skbuff.h | 13 +- include/net/xdp.h | 33 +- include/uapi/linux/netdev.h | 8 +- net/core/xdp.c | 56 +++ tools/include/uapi/linux/netdev.h | 8 +- .../selftests/bpf/prog_tests/xdp_metadata.c | 187 ++++---- .../selftests/bpf/progs/xdp_hw_metadata.c | 48 +- .../selftests/bpf/progs/xdp_metadata.c | 16 + tools/testing/selftests/bpf/testing_helpers.h | 3 + tools/testing/selftests/bpf/xdp_hw_metadata.c | 67 ++- tools/testing/selftests/bpf/xdp_metadata.h | 42 +- 30 files changed, 1161 insertions(+), 459 deletions(-) -- 2.41.0