net/mlx5: fix Tx completion request generation
authorViacheslav Ovsiienko <viacheslavo@mellanox.com>
Mon, 29 Jul 2019 12:41:05 +0000 (12:41 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Mon, 29 Jul 2019 16:05:10 +0000 (18:05 +0200)
commit5a93e173b874e549f0adac9796f7284837a98566
tree22a93678960cef06be1ff5321e9937135dbaffde
parent9f350504bb328280acff3473879f97eea745e763
net/mlx5: fix Tx completion request generation

The packets transmitting in mlx5 is performed by building
Tx descriptors (WQEs) and sending last ones to the NIC.
The descriptor can contain the special flags, telling the NIC
to generate Tx completion notification (CQEs). At the beginning
of tx_burst() routine PMD checks whether there are some Tx
completions and frees the transmitted packet buffers.

The flags to request completion generation must be set once
per specified amount of packets to provide uniform stream
of completions and freeing the Tx queue in uniform fashion.
The previous implementation sets the completion request
generation once per burst, if burst size if big enough it may
latency in CQE generation and freeing large amount of buffers
in tx_burst routine on multiple completions which also
affects the latency and even causes the Tx queue overflow
and Tx drops.

This patches enforces the completion request will be set
in the exact Tx descriptor if specified amount of packets
is already sent.

Fixes: 18a1c20044c0 ("net/mlx5: implement Tx burst template")

Signed-off-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>
Acked-by: Matan Azrad <matan@mellanox.com>
drivers/net/mlx5/mlx5_defs.h
drivers/net/mlx5/mlx5_prm.h
drivers/net/mlx5/mlx5_rxtx.c