net/mlx5: enforce Tx num of segments limitation
authorShahaf Shuler <shahafs@mellanox.com>
Thu, 14 Sep 2017 10:50:39 +0000 (13:50 +0300)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 6 Oct 2017 00:49:48 +0000 (02:49 +0200)
commit883ce1724b652d8da1cacdaf8409580b24d6a33d
tree931e290a7b2f9815bef0de65e8911d75f0727a2d
parent24c14430cdc4556a30a1e608f67230e881718f7f
net/mlx5: enforce Tx num of segments limitation

Mellanox NICs has a limitation on the number of mbuf segments a multi
segment mbuf can have. The max number depends on the Tx offloads
requested.

The current code not enforce such limitation, which might cause
malformed work requests to be written to the device.

This commit adds verification for the number of mbuf segments posted
to the device. In case of overflow the packet will not be sent.

In addition update the nic documentation with the limitation.
Considering device limitation is 63 data segments in a work request, the
maximum number of segment in mbuf was calculated taking TSO as the worst
case:

max_nb_segs = 63 - (control_segment + ethernet segment +
    TSO headers inline + inline segment +
    extra inline to align to cacheline)

Cc: stable@dpdk.org
Signed-off-by: Shahaf Shuler <shahafs@mellanox.com>
Acked-by: Yongseok Koh <yskoh@mellanox.com>
Acked-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
doc/guides/nics/mlx5.rst
drivers/net/mlx5/mlx5_defs.h
drivers/net/mlx5/mlx5_prm.h
drivers/net/mlx5/mlx5_rxtx.c
drivers/net/mlx5/mlx5_rxtx_vec_sse.c
drivers/net/mlx5/mlx5_txq.c