net/mlx5: support mempool registration
authorDmitry Kozlyuk <dkozlyuk@nvidia.com>
Mon, 18 Oct 2021 22:43:53 +0000 (01:43 +0300)
committerThomas Monjalon <thomas@monjalon.net>
Tue, 19 Oct 2021 14:35:16 +0000 (16:35 +0200)
commitfec28ca0e3a93143829f3b41a28a8da933f28499
treee0f20412b263641057b0a6555b2ad1730194ad81
parent690b2a88c2f7c1eef1318d39a68d127f255d1f98
net/mlx5: support mempool registration

When the first port in a given protection domain (PD) starts,
install a mempool event callback for this PD and register all existing
memory regions (MR) for it. When the last port in a PD closes,
remove the callback and unregister all mempools for this PD.
This behavior can be switched off with a new devarg: mr_mempool_reg_en.

On TX slow path, i.e. when an MR key for the address of the buffer
to send is not in the local cache, first try to retrieve it from
the database of registered mempools. Supported are direct and indirect
mbufs, as well as externally-attached ones from MLX5 MPRQ feature.
Lookup in the database of non-mempool memory is used as the last resort.

RX mempools are registered regardless of the devarg value.
On RX data path only the local cache and the mempool database is used.
If implicit mempool registration is disabled, these mempools
are unregistered at port stop, releasing the MRs.

Signed-off-by: Dmitry Kozlyuk <dkozlyuk@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
12 files changed:
doc/guides/nics/mlx5.rst
doc/guides/rel_notes/release_21_11.rst
drivers/net/mlx5/linux/mlx5_mp_os.c
drivers/net/mlx5/linux/mlx5_os.c
drivers/net/mlx5/mlx5.c
drivers/net/mlx5/mlx5.h
drivers/net/mlx5/mlx5_mr.c
drivers/net/mlx5/mlx5_mr.h
drivers/net/mlx5/mlx5_rx.h
drivers/net/mlx5/mlx5_rxq.c
drivers/net/mlx5/mlx5_trigger.c
drivers/net/mlx5/windows/mlx5_os.c