net/mlx5: fix external buffer pool registration for Rx queue
authorViacheslav Ovsiienko <viacheslavo@nvidia.com>
Fri, 12 Feb 2021 11:06:30 +0000 (13:06 +0200)
committerRaslan Darawsheh <rasland@nvidia.com>
Wed, 17 Feb 2021 08:45:40 +0000 (09:45 +0100)
commita9ae33fbbc2d8d51542abf71d0a73887c17f39b5
treeff52cfe38cb76877cfc45f07b4f6188193e09c99
parent28bbeaa23bbac9db5cfc7c7282e591cbb71f43a9
net/mlx5: fix external buffer pool registration for Rx queue

On Rx queue creation the mlx5 PMD registers the data buffers of the
specified pools for DMA operations. It scans the mem_list of the pools
and creates the MRs (DMA related NIC objects) for the chunks found.
If the pool is created with rte_pktmbuf_pool_create_extbuf() and
refers to the external attached buffers (whose are in the area of
application responsibility and it should explicitly register the
data buffer memory for DMA with rte_dev_dma_map() call) the chunks
contain the mbuf structures only, w/o any built-in data buffers.
Hence, DMA with mlx5 NIC never happens to this area and there is
no need to create MRs for these ones.

The extra not needed MRs were created for the pools with external
buffers causing MR cache load and performance was slightly affected.
The patch checks the mbuf pool type and skips MR creation for the
pools with external buffers.

Fixes: bdb8e5b1ea7b ("net/mlx5: allow allocated mbuf with external buffer")
Cc: stable@dpdk.org
Signed-off-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
drivers/net/mlx5/mlx5_mr.c