Secondary process is not allowed to register mempools on the flight. The code will return invalid memory key for such case.
Fixes: 87ec44ce1651 ("net/mlx5: add operations for secondary process") Cc: sta...@dpdk.org Signed-off-by: Shahaf Shuler <shah...@mellanox.com> Signed-off-by: Xueming Li <xuemi...@mellanox.com> Acked-by: Nelio Laranjeiro <nelio.laranje...@6wind.com> --- doc/guides/nics/mlx5.rst | 6 +++++- drivers/net/mlx5/mlx5_mr.c | 12 ++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst index bdc2216c0..2e6d1e45a 100644 --- a/doc/guides/nics/mlx5.rst +++ b/doc/guides/nics/mlx5.rst @@ -106,7 +106,11 @@ Limitations - Inner RSS for VXLAN frames is not supported yet. - Hardware checksum RX offloads for VXLAN inner header are not supported yet. -- Forked secondary process not supported. +- For secondary process: + + - Forked secondary process not supported. + - All mempools must be initialized before rte_eth_dev_start(). + - Flow pattern without any specific vlan will match for vlan packets as well: When VLAN spec is not specified in the pattern, the matching rule will be created with VLAN as a wild card. diff --git a/drivers/net/mlx5/mlx5_mr.c b/drivers/net/mlx5/mlx5_mr.c index 2776dc700..cb625dc61 100644 --- a/drivers/net/mlx5/mlx5_mr.c +++ b/drivers/net/mlx5/mlx5_mr.c @@ -141,8 +141,16 @@ priv_txq_mp2mr_reg(struct priv *priv, struct mlx5_txq_data *txq, DEBUG("%p: discovered new memory pool \"%s\" (%p)", (void *)txq_ctrl, mp->name, (void *)mp); mr = priv_mr_get(priv, mp); - if (mr == NULL) - mr = priv_mr_new(priv, mp); + if (mr == NULL) { + if (rte_eal_process_type() != RTE_PROC_PRIMARY) { + DEBUG("Using unregistered mempool 0x%p(%s) in secondary process," + " please create mempool before rte_eth_dev_start()", + (void *)mp, mp->name); + return NULL; + } else { + mr = priv_mr_new(priv, mp); + } + } if (unlikely(mr == NULL)) { DEBUG("%p: unable to configure MR, ibv_reg_mr() failed.", (void *)txq_ctrl); -- 2.12.0