linux/drivers/net/ethernet/intel/i40e
Jesper Dangaard Brouer 24104024ce i40e: Add XDP frame size to driver
This driver uses different memory models depending on PAGE_SIZE at
compile time. For PAGE_SIZE 4K it uses page splitting, meaning for
normal MTU frame size is 2048 bytes (and headroom 192 bytes). For
larger MTUs the driver still use page splitting, by allocating
order-1 pages (8192 bytes) for RX frames. For PAGE_SIZE larger than
4K, driver instead advance its rx_buffer->page_offset with the frame
size "truesize".

For XDP frame size calculations, this mean that in PAGE_SIZE larger
than 4K mode the frame_sz change on a per packet basis. For the page
split 4K PAGE_SIZE mode, xdp.frame_sz is more constant and can be
updated once outside the main NAPI loop.

The default setting in the driver uses build_skb(), which provides
the necessary headroom and tailroom for XDP-redirect in RX-frame
(in both modes).

There is one complication, which is legacy-rx mode (configurable via
ethtool priv-flags). There are zero headroom in this mode, which is a
requirement for XDP-redirect to work. The conversion to xdp_frame
(convert_to_xdp_frame) will detect this insufficient space, and
xdp_do_redirect() call will fail. This is deemed acceptable, as it
allows other XDP actions to still work in legacy-mode. In
legacy-mode + larger PAGE_SIZE due to lacking tailroom, we also
accept that xdp_adjust_tail shrink doesn't work.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Cc: intel-wired-lan@lists.osuosl.org
Cc: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Cc: Alexander Duyck <alexander.duyck@gmail.com>
Link: https://lore.kernel.org/bpf/158945346494.97035.12809400414566061815.stgit@firesoul
2020-05-14 21:21:56 -07:00
..
i40e_adminq_cmd.h Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2019-11-09 11:04:37 -08:00
i40e_adminq.c i40e: Set PHY Access flag on X722 2020-01-09 09:21:40 -08:00
i40e_adminq.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
i40e_alloc.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
i40e_client.c i40e: Use struct_size() in kzalloc() 2019-05-04 17:34:43 -07:00
i40e_client.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
i40e_common.c i40e: fix spelling mistake "to" -> "too" 2020-01-24 08:12:06 +01:00
i40e_dcb_nl.c i40e/i40evf: cleanup incorrect function doxygen comments 2018-04-30 09:09:04 -07:00
i40e_dcb.c i40e: Fix for persistent lldp support 2019-10-25 13:38:19 -07:00
i40e_dcb.h i40e: Fix for persistent lldp support 2019-10-25 13:38:19 -07:00
i40e_ddp.c i40e: Implement DDP support in i40e driver 2019-04-16 15:10:21 -07:00
i40e_debugfs.c i40e: Remove EMPR traces from debugfs facility 2019-09-09 11:36:43 -07:00
i40e_devids.h i40e: Fix LED blinking flow for X710T*L devices 2019-10-25 13:38:19 -07:00
i40e_diag.c net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
i40e_diag.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
i40e_ethtool.c net: i40e: reject unsupported coalescing params 2020-03-12 11:32:36 -07:00
i40e_hmc.c i40e: Implement debug macro hw_dbg using dev_dbg 2019-09-09 11:22:20 -07:00
i40e_hmc.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
i40e_lan_hmc.c treewide: Use sizeof_field() macro 2019-12-09 10:36:44 -08:00
i40e_lan_hmc.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
i40e_main.c i40e: Remove unneeded conversion to bool 2020-04-21 15:45:32 -07:00
i40e_nvm.c i40e: Fix for persistent lldp support 2019-10-25 13:38:19 -07:00
i40e_osdep.h i40e: Implement debug macro hw_dbg using dev_dbg 2019-09-09 11:22:20 -07:00
i40e_prototype.h i40e: Extend PHY access with page change flag 2019-10-25 13:38:19 -07:00
i40e_ptp.c i40e: use ktime_get_real_ts64 instead of ktime_to_timespec64 2019-09-11 09:10:45 -07:00
i40e_register.h i40e: check_recovery_mode had wrong if statement 2019-08-22 13:24:13 -07:00
i40e_status.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
i40e_trace.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
i40e_txrx_common.h i40e: DRY rx_ptype handling code 2018-12-12 15:46:02 -08:00
i40e_txrx.c i40e: Add XDP frame size to driver 2020-05-14 21:21:56 -07:00
i40e_txrx.h net: Use skb accessors in network drivers 2019-07-22 20:47:56 -07:00
i40e_type.h i40e: Extend PHY access with page change flag 2019-10-25 13:38:19 -07:00
i40e_virtchnl_pf.c i40e: Fix the conditional for i40e_vc_validate_vqs_bitmaps 2020-02-11 17:03:52 -08:00
i40e_virtchnl_pf.h i40e: implement VF stats NDO 2019-11-04 13:19:49 -08:00
i40e_xsk.c i40e: Relax i40e_xsk_wakeup's return value when PF is busy 2020-02-05 22:06:08 +01:00
i40e_xsk.h xsk: replace ndo_xsk_async_xmit with ndo_xsk_wakeup 2019-08-17 23:07:31 +02:00
i40e.h intel: Replace zero-length array with flexible-array member 2020-02-24 15:26:17 -08:00
Makefile i40e: Implement DDP support in i40e driver 2019-04-16 15:10:21 -07:00