patches for DPDK stable branches
 help / color / mirror / Atom feed
* [dpdk-stable] [PATCH 1/5] net/mlx5: fix Memory Region cache lookup
       [not found] <cover.1516727100.git.shahafs@mellanox.com>
@ 2018-01-23 17:08 ` Shahaf Shuler
  2018-01-23 17:08 ` [dpdk-stable] [PATCH 2/5] net/mlx5: fix secondary process mempool registration Shahaf Shuler
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 8+ messages in thread
From: Shahaf Shuler @ 2018-01-23 17:08 UTC (permalink / raw)
  To: nelio.laranjeiro, yskoh, adrien.mazarguil; +Cc: dev, stable, Xueming Li

The memory registration (MR) cache contains pointers to mlx5_mr.
The MR cache indexes are filled when a new MR is created. As it is
possible for MR to be created on the flight, an extra validation must be
added to avoid segmentation fault.

Fixes: 6cb559d67b83 ("net/mlx5: add vectorized Rx/Tx burst for x86")
Cc: stable@dpdk.org
Cc: yskoh@mellanox.com

Signed-off-by: Xueming Li <xuemingl@mellanox.com>
Signed-off-by: Shahaf Shuler <shahafs@mellanox.com>
---
 drivers/net/mlx5/mlx5_rxtx.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/mlx5/mlx5_rxtx.h b/drivers/net/mlx5/mlx5_rxtx.h
index 2eb2f0506..a63364d79 100644
--- a/drivers/net/mlx5/mlx5_rxtx.h
+++ b/drivers/net/mlx5/mlx5_rxtx.h
@@ -555,7 +555,8 @@ mlx5_tx_mb2mr(struct mlx5_txq_data *txq, struct rte_mbuf *mb)
 	if (likely(txq->mp2mr[i]->start <= addr && txq->mp2mr[i]->end >= addr))
 		return txq->mp2mr[i]->lkey;
 	for (i = 0; (i != RTE_DIM(txq->mp2mr)); ++i) {
-		if (unlikely(txq->mp2mr[i]->mr == NULL)) {
+		if (unlikely(txq->mp2mr[i] == NULL ||
+		    txq->mp2mr[i]->mr == NULL)) {
 			/* Unknown MP, add a new MR for it. */
 			break;
 		}
-- 
2.12.0

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [dpdk-stable] [PATCH 2/5] net/mlx5: fix secondary process mempool registration
       [not found] <cover.1516727100.git.shahafs@mellanox.com>
  2018-01-23 17:08 ` [dpdk-stable] [PATCH 1/5] net/mlx5: fix Memory Region cache lookup Shahaf Shuler
@ 2018-01-23 17:08 ` Shahaf Shuler
  2018-01-24  8:14   ` Nélio Laranjeiro
  2018-01-23 17:08 ` [dpdk-stable] [PATCH 4/5] net/mlx5: fix memory registration cache last index Shahaf Shuler
       [not found] ` <cover.1516896871.git.shahafs@mellanox.com>
  3 siblings, 1 reply; 8+ messages in thread
From: Shahaf Shuler @ 2018-01-23 17:08 UTC (permalink / raw)
  To: nelio.laranjeiro, yskoh, adrien.mazarguil; +Cc: dev, stable, Xueming Li

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 <shahafs@mellanox.com>
Signed-off-by: Xueming Li <xuemingl@mellanox.com>
---
 doc/guides/nics/mlx5.rst     |  7 ++++++-
 drivers/net/mlx5/mlx5_rxtx.h | 17 ++++++++++++++---
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst
index bdc2216c0..2f860402f 100644
--- a/doc/guides/nics/mlx5.rst
+++ b/doc/guides/nics/mlx5.rst
@@ -106,7 +106,12 @@ 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().
+  - Number of mempools must less than CONFIG_RTE_LIBRTE_MLX5_TX_MP_CACHE
+
 - 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_rxtx.h b/drivers/net/mlx5/mlx5_rxtx.h
index a63364d79..79cdfc793 100644
--- a/drivers/net/mlx5/mlx5_rxtx.h
+++ b/drivers/net/mlx5/mlx5_rxtx.h
@@ -550,6 +550,7 @@ mlx5_tx_mb2mr(struct mlx5_txq_data *txq, struct rte_mbuf *mb)
 	uint16_t i = txq->mr_cache_idx;
 	uintptr_t addr = rte_pktmbuf_mtod(mb, uintptr_t);
 	struct mlx5_mr *mr;
+	struct rte_mempool *mp;
 
 	assert(i < RTE_DIM(txq->mp2mr));
 	if (likely(txq->mp2mr[i]->start <= addr && txq->mp2mr[i]->end >= addr))
@@ -563,14 +564,24 @@ mlx5_tx_mb2mr(struct mlx5_txq_data *txq, struct rte_mbuf *mb)
 		if (txq->mp2mr[i]->start <= addr &&
 		    txq->mp2mr[i]->end >= addr) {
 			assert(txq->mp2mr[i]->lkey != (uint32_t)-1);
-			assert(rte_cpu_to_be_32(txq->mp2mr[i]->mr->lkey) ==
-			       txq->mp2mr[i]->lkey);
+			if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
+				assert(rte_cpu_to_be_32(txq->mp2mr[i]->mr->lkey)
+				       == txq->mp2mr[i]->lkey);
+			}
 			txq->mr_cache_idx = i;
 			return txq->mp2mr[i]->lkey;
 		}
 	}
 	txq->mr_cache_idx = 0;
-	mr = mlx5_txq_mp2mr_reg(txq, mlx5_tx_mb2mp(mb), i);
+	mp = mlx5_tx_mb2mp(mb);
+	if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
+		WARN("Using unregistered mempool 0x%p(%s) in secondary process,"
+		     " please create mempool before rte_eth_dev_start()",
+		     (void *)mp, mp->name);
+		assert(rte_eal_process_type() == RTE_PROC_PRIMARY);
+		return (uint32_t)-1;
+	}
+	mr = mlx5_txq_mp2mr_reg(txq, mp, i);
 	/*
 	 * Request the reference to use in this queue, the original one is
 	 * kept by the control plane.
-- 
2.12.0

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [dpdk-stable] [PATCH 4/5] net/mlx5: fix memory registration cache last index
       [not found] <cover.1516727100.git.shahafs@mellanox.com>
  2018-01-23 17:08 ` [dpdk-stable] [PATCH 1/5] net/mlx5: fix Memory Region cache lookup Shahaf Shuler
  2018-01-23 17:08 ` [dpdk-stable] [PATCH 2/5] net/mlx5: fix secondary process mempool registration Shahaf Shuler
@ 2018-01-23 17:08 ` Shahaf Shuler
       [not found] ` <cover.1516896871.git.shahafs@mellanox.com>
  3 siblings, 0 replies; 8+ messages in thread
From: Shahaf Shuler @ 2018-01-23 17:08 UTC (permalink / raw)
  To: nelio.laranjeiro, yskoh, adrien.mazarguil; +Cc: dev, stable

In case memory registration cache is full the new mempool will be
inserted in the last index of the array.

Update the last entry being hit to reflect it.

Fixes: 6cb559d67b83 ("net/mlx5: add vectorized Rx/Tx burst for x86")
Cc: stable@dpdk.org
Cc: yskoh@mellanox.com

Signed-off-by: Shahaf Shuler <shahafs@mellanox.com>
---
 drivers/net/mlx5/mlx5_rxtx.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/mlx5/mlx5_rxtx.h b/drivers/net/mlx5/mlx5_rxtx.h
index 2934f9fb3..4bedfb89b 100644
--- a/drivers/net/mlx5/mlx5_rxtx.h
+++ b/drivers/net/mlx5/mlx5_rxtx.h
@@ -572,7 +572,6 @@ mlx5_tx_mb2mr(struct mlx5_txq_data *txq, struct rte_mbuf *mb)
 			return txq->mp2mr[i]->lkey;
 		}
 	}
-	txq->mr_cache_idx = 0;
 	mp = mlx5_tx_mb2mp(mb);
 	if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
 		WARN("Using unregistered mempool 0x%p(%s) in secondary process,"
@@ -588,6 +587,7 @@ mlx5_tx_mb2mr(struct mlx5_txq_data *txq, struct rte_mbuf *mb)
 	 */
 	if (mr) {
 		rte_atomic32_inc(&mr->refcnt);
+		txq->mr_cache_idx = i >= RTE_DIM(txq->mp2mr) ? i - 1 : i;
 		return mr->lkey;
 	} else {
 		WARN("Failed to register mempool 0x%p(%s)",
-- 
2.12.0

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [dpdk-stable] [PATCH 2/5] net/mlx5: fix secondary process mempool registration
  2018-01-23 17:08 ` [dpdk-stable] [PATCH 2/5] net/mlx5: fix secondary process mempool registration Shahaf Shuler
@ 2018-01-24  8:14   ` Nélio Laranjeiro
  2018-01-24 13:37     ` Shahaf Shuler
  0 siblings, 1 reply; 8+ messages in thread
From: Nélio Laranjeiro @ 2018-01-24  8:14 UTC (permalink / raw)
  To: Shahaf Shuler; +Cc: yskoh, adrien.mazarguil, dev, stable, Xueming Li

Hi Shahaf,

On Tue, Jan 23, 2018 at 07:08:20PM +0200, Shahaf Shuler wrote:
> 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 <shahafs@mellanox.com>
> Signed-off-by: Xueming Li <xuemingl@mellanox.com>
> ---
>  doc/guides/nics/mlx5.rst     |  7 ++++++-
>  drivers/net/mlx5/mlx5_rxtx.h | 17 ++++++++++++++---
>  2 files changed, 20 insertions(+), 4 deletions(-)
> 
> diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst
> index bdc2216c0..2f860402f 100644
> --- a/doc/guides/nics/mlx5.rst
> +++ b/doc/guides/nics/mlx5.rst
> @@ -106,7 +106,12 @@ 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().
> +  - Number of mempools must less than CONFIG_RTE_LIBRTE_MLX5_TX_MP_CACHE

Why such limitation?  Registering a new memory is independent of
searching a new one when the cache is too small.

>  - 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_rxtx.h b/drivers/net/mlx5/mlx5_rxtx.h
> index a63364d79..79cdfc793 100644
> --- a/drivers/net/mlx5/mlx5_rxtx.h
> +++ b/drivers/net/mlx5/mlx5_rxtx.h
> @@ -550,6 +550,7 @@ mlx5_tx_mb2mr(struct mlx5_txq_data *txq, struct rte_mbuf *mb)
>  	uint16_t i = txq->mr_cache_idx;
>  	uintptr_t addr = rte_pktmbuf_mtod(mb, uintptr_t);
>  	struct mlx5_mr *mr;
> +	struct rte_mempool *mp;
>  
>  	assert(i < RTE_DIM(txq->mp2mr));
>  	if (likely(txq->mp2mr[i]->start <= addr && txq->mp2mr[i]->end >= addr))
> @@ -563,14 +564,24 @@ mlx5_tx_mb2mr(struct mlx5_txq_data *txq, struct rte_mbuf *mb)
>  		if (txq->mp2mr[i]->start <= addr &&
>  		    txq->mp2mr[i]->end >= addr) {
>  			assert(txq->mp2mr[i]->lkey != (uint32_t)-1);
> -			assert(rte_cpu_to_be_32(txq->mp2mr[i]->mr->lkey) ==
> -			       txq->mp2mr[i]->lkey);
> +			if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
> +				assert(rte_cpu_to_be_32(txq->mp2mr[i]->mr->lkey)
> +				       == txq->mp2mr[i]->lkey);
> +			}

This code should be inside priv_txq_mp2mr_reg() to let the secondary
search inside the MR list when the cache is too small.

If it does not find any MR it should fail before calling
priv_mr_new().

>  			txq->mr_cache_idx = i;
>  			return txq->mp2mr[i]->lkey;
>  		}
>  	}
>  	txq->mr_cache_idx = 0;
> -	mr = mlx5_txq_mp2mr_reg(txq, mlx5_tx_mb2mp(mb), i);
> +	mp = mlx5_tx_mb2mp(mb);
> +	if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
> +		WARN("Using unregistered mempool 0x%p(%s) in secondary process,"
> +		     " please create mempool before rte_eth_dev_start()",
> +		     (void *)mp, mp->name);
> +		assert(rte_eal_process_type() == RTE_PROC_PRIMARY);
> +		return (uint32_t)-1;
> +	}
> +	mr = mlx5_txq_mp2mr_reg(txq, mp, i);
>  	/*
>  	 * Request the reference to use in this queue, the original one is
>  	 * kept by the control plane.
> -- 
> 2.12.0

-- 
Nélio Laranjeiro
6WIND

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [dpdk-stable] [PATCH 2/5] net/mlx5: fix secondary process mempool registration
  2018-01-24  8:14   ` Nélio Laranjeiro
@ 2018-01-24 13:37     ` Shahaf Shuler
  0 siblings, 0 replies; 8+ messages in thread
From: Shahaf Shuler @ 2018-01-24 13:37 UTC (permalink / raw)
  To: Nélio Laranjeiro
  Cc: Yongseok Koh, Adrien Mazarguil, dev, stable, Xueming(Steven) Li

Wednesday, January 24, 2018 10:14 AM, Nélio Laranjeiro:
> Hi Shahaf,
> 
> On Tue, Jan 23, 2018 at 07:08:20PM +0200, Shahaf Shuler wrote:
> > 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 <shahafs@mellanox.com>
> > Signed-off-by: Xueming Li <xuemingl@mellanox.com>
> > ---
> >  doc/guides/nics/mlx5.rst     |  7 ++++++-
> >  drivers/net/mlx5/mlx5_rxtx.h | 17 ++++++++++++++---
> >  2 files changed, 20 insertions(+), 4 deletions(-)
> >
> > diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst index
> > bdc2216c0..2f860402f 100644
> > --- a/doc/guides/nics/mlx5.rst
> > +++ b/doc/guides/nics/mlx5.rst
> > @@ -106,7 +106,12 @@ 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().
> > +  - Number of mempools must less than
> > + CONFIG_RTE_LIBRTE_MLX5_TX_MP_CACHE
> 
> Why such limitation?  Registering a new memory is independent of searching
> a new one when the cache is too small.
> 
> >  - 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_rxtx.h
> > b/drivers/net/mlx5/mlx5_rxtx.h index a63364d79..79cdfc793 100644
> > --- a/drivers/net/mlx5/mlx5_rxtx.h
> > +++ b/drivers/net/mlx5/mlx5_rxtx.h
> > @@ -550,6 +550,7 @@ mlx5_tx_mb2mr(struct mlx5_txq_data *txq, struct
> rte_mbuf *mb)
> >  	uint16_t i = txq->mr_cache_idx;
> >  	uintptr_t addr = rte_pktmbuf_mtod(mb, uintptr_t);
> >  	struct mlx5_mr *mr;
> > +	struct rte_mempool *mp;
> >
> >  	assert(i < RTE_DIM(txq->mp2mr));
> >  	if (likely(txq->mp2mr[i]->start <= addr && txq->mp2mr[i]->end >=
> > addr)) @@ -563,14 +564,24 @@ mlx5_tx_mb2mr(struct mlx5_txq_data
> *txq, struct rte_mbuf *mb)
> >  		if (txq->mp2mr[i]->start <= addr &&
> >  		    txq->mp2mr[i]->end >= addr) {
> >  			assert(txq->mp2mr[i]->lkey != (uint32_t)-1);
> > -			assert(rte_cpu_to_be_32(txq->mp2mr[i]->mr->lkey)
> ==
> > -			       txq->mp2mr[i]->lkey);
> > +			if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
> > +				assert(rte_cpu_to_be_32(txq->mp2mr[i]-
> >mr->lkey)
> > +				       == txq->mp2mr[i]->lkey);
> > +			}
> 
> This code should be inside priv_txq_mp2mr_reg() to let the secondary
> search inside the MR list when the cache is too small.

You probably mean below code and not above. Yes good suggestion.
Regarding the above code - the assert in un-accessible from the secondary process as it tries to access ibv_mr.
I will add another patch to remove this assert completely (in order to save the comparison logic). 

> 
> If it does not find any MR it should fail before calling priv_mr_new().
> 
> >  			txq->mr_cache_idx = i;
> >  			return txq->mp2mr[i]->lkey;
> >  		}
> >  	}
> >  	txq->mr_cache_idx = 0;
> > -	mr = mlx5_txq_mp2mr_reg(txq, mlx5_tx_mb2mp(mb), i);
> > +	mp = mlx5_tx_mb2mp(mb);
> > +	if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
> > +		WARN("Using unregistered mempool 0x%p(%s) in secondary
> process,"
> > +		     " please create mempool before rte_eth_dev_start()",
> > +		     (void *)mp, mp->name);
> > +		assert(rte_eal_process_type() == RTE_PROC_PRIMARY);
> > +		return (uint32_t)-1;
> > +	}
> > +	mr = mlx5_txq_mp2mr_reg(txq, mp, i);
> >  	/*
> >  	 * Request the reference to use in this queue, the original one is
> >  	 * kept by the control plane.
> > --
> > 2.12.0
> 
> --
> Nélio Laranjeiro
> 6WIND

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [dpdk-stable] [PATCH v2 1/6] net/mlx5: fix Memory Region cache lookup
       [not found] ` <cover.1516896871.git.shahafs@mellanox.com>
@ 2018-01-25 16:17   ` Shahaf Shuler
  2018-01-25 16:17   ` [dpdk-stable] [PATCH v2 2/6] net/mlx5: fix secondary process mempool registration Shahaf Shuler
  2018-01-25 16:18   ` [dpdk-stable] [PATCH v2 5/6] net/mlx5: fix Memory Region cache last index Shahaf Shuler
  2 siblings, 0 replies; 8+ messages in thread
From: Shahaf Shuler @ 2018-01-25 16:17 UTC (permalink / raw)
  To: nelio.laranjeiro, adrien.mazarguil, yskoh; +Cc: dev, stable, Xueming Li

The Memory Region (MR) cache contains pointers to mlx5_mr.
The MR cache indexes are filled when a new MR is created. As it is
possible for MR to be created on the flight, an extra validation must be
added to avoid segmentation fault.

Fixes: b0b093845793 ("net/mlx5: use buffer address for LKEY search")
Cc: stable@dpdk.org

Signed-off-by: Xueming Li <xuemingl@mellanox.com>
Signed-off-by: Shahaf Shuler <shahafs@mellanox.com>
Acked-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
---
 drivers/net/mlx5/mlx5_rxtx.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/mlx5/mlx5_rxtx.h b/drivers/net/mlx5/mlx5_rxtx.h
index 2eb2f0506..a63364d79 100644
--- a/drivers/net/mlx5/mlx5_rxtx.h
+++ b/drivers/net/mlx5/mlx5_rxtx.h
@@ -555,7 +555,8 @@ mlx5_tx_mb2mr(struct mlx5_txq_data *txq, struct rte_mbuf *mb)
 	if (likely(txq->mp2mr[i]->start <= addr && txq->mp2mr[i]->end >= addr))
 		return txq->mp2mr[i]->lkey;
 	for (i = 0; (i != RTE_DIM(txq->mp2mr)); ++i) {
-		if (unlikely(txq->mp2mr[i]->mr == NULL)) {
+		if (unlikely(txq->mp2mr[i] == NULL ||
+		    txq->mp2mr[i]->mr == NULL)) {
 			/* Unknown MP, add a new MR for it. */
 			break;
 		}
-- 
2.12.0

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [dpdk-stable] [PATCH v2 2/6] net/mlx5: fix secondary process mempool registration
       [not found] ` <cover.1516896871.git.shahafs@mellanox.com>
  2018-01-25 16:17   ` [dpdk-stable] [PATCH v2 1/6] net/mlx5: fix Memory Region cache lookup Shahaf Shuler
@ 2018-01-25 16:17   ` Shahaf Shuler
  2018-01-25 16:18   ` [dpdk-stable] [PATCH v2 5/6] net/mlx5: fix Memory Region cache last index Shahaf Shuler
  2 siblings, 0 replies; 8+ messages in thread
From: Shahaf Shuler @ 2018-01-25 16:17 UTC (permalink / raw)
  To: nelio.laranjeiro, adrien.mazarguil, yskoh; +Cc: dev, stable, Xueming Li

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 <shahafs@mellanox.com>
Signed-off-by: Xueming Li <xuemingl@mellanox.com>
Acked-by: Nelio Laranjeiro <nelio.laranjeiro@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

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [dpdk-stable] [PATCH v2 5/6] net/mlx5: fix Memory Region cache last index
       [not found] ` <cover.1516896871.git.shahafs@mellanox.com>
  2018-01-25 16:17   ` [dpdk-stable] [PATCH v2 1/6] net/mlx5: fix Memory Region cache lookup Shahaf Shuler
  2018-01-25 16:17   ` [dpdk-stable] [PATCH v2 2/6] net/mlx5: fix secondary process mempool registration Shahaf Shuler
@ 2018-01-25 16:18   ` Shahaf Shuler
  2 siblings, 0 replies; 8+ messages in thread
From: Shahaf Shuler @ 2018-01-25 16:18 UTC (permalink / raw)
  To: nelio.laranjeiro, adrien.mazarguil, yskoh; +Cc: dev, stable, Xueming Li

In case Memory Region cache is full, the new mempool will be
inserted in the last index of the array.

Update the last entry being hit to reflect it.

Fixes: b0b093845793 ("net/mlx5: use buffer address for LKEY search")
Cc: stable@dpdk.org
Cc: yskoh@mellanox.com

Signed-off-by: Xueming Li <xuemingl@mellanox.com>
Signed-off-by: Shahaf Shuler <shahafs@mellanox.com>
Acked-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
---
 drivers/net/mlx5/mlx5_rxtx.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/mlx5/mlx5_rxtx.h b/drivers/net/mlx5/mlx5_rxtx.h
index e6d163a59..7e7db0e8c 100644
--- a/drivers/net/mlx5/mlx5_rxtx.h
+++ b/drivers/net/mlx5/mlx5_rxtx.h
@@ -567,7 +567,6 @@ mlx5_tx_mb2mr(struct mlx5_txq_data *txq, struct rte_mbuf *mb)
 			return txq->mp2mr[i]->lkey;
 		}
 	}
-	txq->mr_cache_idx = 0;
 	mr = mlx5_txq_mp2mr_reg(txq, mlx5_tx_mb2mp(mb), i);
 	/*
 	 * Request the reference to use in this queue, the original one is
@@ -575,6 +574,7 @@ mlx5_tx_mb2mr(struct mlx5_txq_data *txq, struct rte_mbuf *mb)
 	 */
 	if (mr) {
 		rte_atomic32_inc(&mr->refcnt);
+		txq->mr_cache_idx = i >= RTE_DIM(txq->mp2mr) ? i - 1 : i;
 		return mr->lkey;
 	} else {
 		struct rte_mempool *mp = mlx5_tx_mb2mp(mb);
-- 
2.12.0

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2018-01-25 16:18 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <cover.1516727100.git.shahafs@mellanox.com>
2018-01-23 17:08 ` [dpdk-stable] [PATCH 1/5] net/mlx5: fix Memory Region cache lookup Shahaf Shuler
2018-01-23 17:08 ` [dpdk-stable] [PATCH 2/5] net/mlx5: fix secondary process mempool registration Shahaf Shuler
2018-01-24  8:14   ` Nélio Laranjeiro
2018-01-24 13:37     ` Shahaf Shuler
2018-01-23 17:08 ` [dpdk-stable] [PATCH 4/5] net/mlx5: fix memory registration cache last index Shahaf Shuler
     [not found] ` <cover.1516896871.git.shahafs@mellanox.com>
2018-01-25 16:17   ` [dpdk-stable] [PATCH v2 1/6] net/mlx5: fix Memory Region cache lookup Shahaf Shuler
2018-01-25 16:17   ` [dpdk-stable] [PATCH v2 2/6] net/mlx5: fix secondary process mempool registration Shahaf Shuler
2018-01-25 16:18   ` [dpdk-stable] [PATCH v2 5/6] net/mlx5: fix Memory Region cache last index Shahaf Shuler

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).