From a482a41a638749b2a5b9a1f37c8774453274a8f8 Mon Sep 17 00:00:00 2001 From: Shahaf Shuler Date: Thu, 25 Jan 2018 18:17:59 +0200 Subject: [PATCH] net/mlx5: fix secondary process mempool registration 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: stable@dpdk.org Signed-off-by: Shahaf Shuler Signed-off-by: Xueming Li Acked-by: Nelio Laranjeiro --- doc/guides/nics/mlx5.rst | 6 +++++- drivers/net/mlx5/mlx5_mr.c | 9 ++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst index bdc2216c03..2e6d1e45a6 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 2776dc700e..33d037d281 100644 --- a/drivers/net/mlx5/mlx5_mr.c +++ b/drivers/net/mlx5/mlx5_mr.c @@ -141,8 +141,15 @@ 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) + 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; + } mr = priv_mr_new(priv, mp); + } if (unlikely(mr == NULL)) { DEBUG("%p: unable to configure MR, ibv_reg_mr() failed.", (void *)txq_ctrl); -- 2.20.1