[dpdk-dev,1/2] app/testpmd: fix crash at mbuf pool creation

Message ID 20170424123358.5959-1-olivier.matz@6wind.com (mailing list archive)
State Accepted, archived
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Olivier Matz April 24, 2017, 12:33 p.m. UTC
  Since
commit 999b2ee0fe45 ("app/testpmd: enable NUMA support by default"),
testpmd is started with numa enabled by default. This highlights a
floating point exception when started with --total-num-mbufs without any
port (division by 0). This bug was already triggered before this commit
if the --no-numa option was given.

This commit adds a check of the nb_ports value before doing the
division. By looking at this code, it appears that the creation of the
mbuf pool is not consistent for the number of mbufs depending on the
configuration. This is fixed in the next commit.

Fixes: b6ea6408fbc7 ("ethdev: store numa_node per device")

CC: stable@dpdk.org
Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
---
 app/test-pmd/testpmd.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Jingjing Wu April 28, 2017, 8:51 a.m. UTC | #1
> -----Original Message-----
> From: Olivier Matz [mailto:olivier.matz@6wind.com]
> Sent: Monday, April 24, 2017 8:34 PM
> To: dev@dpdk.org; Wu, Jingjing <jingjing.wu@intel.com>
> Cc: Richardson, Bruce <bruce.richardson@intel.com>; stable@dpdk.org
> Subject: [PATCH 1/2] app/testpmd: fix crash at mbuf pool creation
> 
> Since
> commit 999b2ee0fe45 ("app/testpmd: enable NUMA support by default"),
> testpmd is started with numa enabled by default. This highlights a floating point
> exception when started with --total-num-mbufs without any port (division by 0).
> This bug was already triggered before this commit if the --no-numa option was
> given.
> 
> This commit adds a check of the nb_ports value before doing the division. By
> looking at this code, it appears that the creation of the mbuf pool is not
> consistent for the number of mbufs depending on the configuration. This is fixed
> in the next commit.
> 
> Fixes: b6ea6408fbc7 ("ethdev: store numa_node per device")
> 
> CC: stable@dpdk.org
> Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
> ---
>  app/test-pmd/testpmd.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index
> 3a573480d..f61f31344 100644
> --- a/app/test-pmd/testpmd.c
> +++ b/app/test-pmd/testpmd.c
> @@ -597,7 +597,7 @@ init_config(void)
>  		uint8_t i;
>  		unsigned int nb_mbuf;
> 
> -		if (param_total_num_mbufs)
> +		if (param_total_num_mbufs && nb_ports != 0)
>  			nb_mbuf_per_pool = nb_mbuf_per_pool/nb_ports;
> 
>  		for (i = 0; i < max_socket; i++) {

Acked-by: Jingjing Wu <jingjing.wu@intel.com>
  
Thomas Monjalon May 1, 2017, 1:18 p.m. UTC | #2
28/04/2017 10:51, Wu, Jingjing:
> From: Olivier Matz [mailto:olivier.matz@6wind.com]
> > Since
> > commit 999b2ee0fe45 ("app/testpmd: enable NUMA support by default"),
> > testpmd is started with numa enabled by default. This highlights a floating point
> > exception when started with --total-num-mbufs without any port (division by 0).
> > This bug was already triggered before this commit if the --no-numa option was
> > given.
> > 
> > This commit adds a check of the nb_ports value before doing the division. By
> > looking at this code, it appears that the creation of the mbuf pool is not
> > consistent for the number of mbufs depending on the configuration. This is fixed
> > in the next commit.
> > 
> > Fixes: b6ea6408fbc7 ("ethdev: store numa_node per device")
> > 
> > CC: stable@dpdk.org
> > Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
> 
> Acked-by: Jingjing Wu <jingjing.wu@intel.com>

Series applied, thanks
  

Patch

diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index 3a573480d..f61f31344 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -597,7 +597,7 @@  init_config(void)
 		uint8_t i;
 		unsigned int nb_mbuf;
 
-		if (param_total_num_mbufs)
+		if (param_total_num_mbufs && nb_ports != 0)
 			nb_mbuf_per_pool = nb_mbuf_per_pool/nb_ports;
 
 		for (i = 0; i < max_socket; i++) {