OpenCloudOS-Kernel/drivers/net
Jesper Dangaard Brouer d628ee4fef mlx5: Rx queue setup time determine frame_sz for XDP
The mlx5 driver have multiple memory models, which are also changed
according to whether a XDP bpf_prog is attached.

The 'rx_striding_rq' setting is adjusted via ethtool priv-flags e.g.:
 # ethtool --set-priv-flags mlx5p2 rx_striding_rq off

On the general case with 4K page_size and regular MTU packet, then
the frame_sz is 2048 and 4096 when XDP is enabled, in both modes.

The info on the given frame size is stored differently depending on the
RQ-mode and encoded in a union in struct mlx5e_rq union wqe/mpwqe.
In rx striding mode rq->mpwqe.log_stride_sz is either 11 or 12, which
corresponds to 2048 or 4096 (MLX5_WQ_TYPE_LINKED_LIST_STRIDING_RQ).
In non-striding mode (MLX5_WQ_TYPE_CYCLIC) the frag_stride is stored
in rq->wqe.info.arr[0].frag_stride, for the first fragment, which is
what the XDP case cares about.

To reduce effect on fast-path, this patch determine the frame_sz at
setup time, to avoid determining the memory model runtime. Variable
is named frame0_sz to make it clear that this is only the frame
size of the first fragment.

This mlx5 driver does a DMA-sync on XDP_TX action, but grow is safe
as it have done a DMA-map on the entire PAGE_SIZE. The driver also
already does a XDP length check against sq->hw_mtu on the possible
XDP xmit paths mlx5e_xmit_xdp_frame() + mlx5e_xmit_xdp_frame_mpwqe().

V3+4: Change variable name first_frame_sz to frame0_sz

V2: Fix that frag_size need to be recalc before creating SKB.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Tariq Toukan <tariqt@mellanox.com>
Cc: Saeed Mahameed <saeedm@mellanox.com>
Link: https://lore.kernel.org/bpf/158945348021.97035.12295039384250022883.stgit@firesoul
2020-05-14 21:21:56 -07:00
..
appletalk docs: networking: convert ltpc.txt to ReST 2020-04-30 12:56:36 -07:00
arcnet docs: networking: convert arcnet.txt to ReST 2020-04-28 14:38:38 -07:00
bonding Merge branch 'mlx5-next' of git://git.kernel.org/pub/scm/linux/kernel/git/mellanox/linux 2020-05-09 01:05:30 -07:00
caif docs: networking: convert caif files to ReST 2020-04-28 14:38:38 -07:00
can
dsa net: dsa: felix: fix incorrect clamp calculation for burst 2020-05-14 18:02:02 -07:00
ethernet mlx5: Rx queue setup time determine frame_sz for XDP 2020-05-14 21:21:56 -07:00
fddi docs: networking: convert skfp.txt to ReST 2020-04-30 12:56:38 -07:00
fjes
hamradio net: partially revert dynamic lockdep key changes 2020-05-04 12:05:56 -07:00
hippi
hyperv hv_netvsc: Add XDP frame size to driver 2020-05-14 21:21:54 -07:00
ieee802154
ipa net: ipa: Remove ipa_endpoint_stop{,_rx_dma} again 2020-05-08 22:35:56 -07:00
ipvlan net: partially revert dynamic lockdep key changes 2020-05-04 12:05:56 -07:00
netdevsim
phy net: phy: mdio-moxart: remove unneeded include 2020-05-14 17:58:46 -07:00
plip docs: networking: convert PLIP.txt to ReST 2020-04-30 12:56:37 -07:00
ppp net: partially revert dynamic lockdep key changes 2020-05-04 12:05:56 -07:00
slip
team net: partially revert dynamic lockdep key changes 2020-05-04 12:05:56 -07:00
usb r8152: Use MAC address from device tree if available 2020-05-14 13:16:38 -07:00
vmxnet3
wan docs: networking: convert framerelay.txt to ReST 2020-04-28 14:39:46 -07:00
wimax
wireguard wireguard: send/receive: use explicit unlikely branch instead of implicit coalescing 2020-05-06 20:03:47 -07:00
wireless wireless-drivers-next patches for v5.8 2020-05-07 13:22:35 -07:00
xen-netback
Kconfig docs: networking: device drivers: convert sb1000.txt to ReST 2020-05-01 12:24:42 -07:00
LICENSE.SRC
Makefile
Space.c
bareudp.c
dummy.c
eql.c
geneve.c geneve: use the correct nlattr array in NL_SET_ERR_MSG_ATTR 2020-04-23 12:39:09 -07:00
gtp.c gtp: set NLM_F_MULTI flag in gtp_genl_dump_pdp() 2020-05-01 15:34:09 -07:00
ifb.c
loopback.c
macsec.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2020-05-06 22:10:13 -07:00
macvlan.c netpoll: accept NULL np argument in netpoll_send_skb() 2020-05-07 18:11:07 -07:00
macvtap.c
mdio.c
mii.c
net_failover.c
netconsole.c
nlmon.c
ntb_netdev.c
rionet.c rionet: Fix use correct return type for ndo_start_xmit() 2020-04-30 12:15:13 -07:00
sb1000.c
sungem_phy.c
tap.c
thunderbolt.c
tun.c tun: Add XDP frame size 2020-05-14 21:21:55 -07:00
veth.c veth: Xdp using frame_sz in veth driver 2020-05-14 21:21:54 -07:00
virtio_net.c virtio_net: Add XDP frame size in two code paths 2020-05-14 21:21:55 -07:00
vrf.c net: partially revert dynamic lockdep key changes 2020-05-04 12:05:56 -07:00
vsockmon.c
vxlan.c vxlan: use the correct nlattr array in NL_SET_ERR_MSG_ATTR 2020-04-23 12:39:09 -07:00
xen-netfront.c