[dpdk-dev] [PATCH 1/2] app/testpmd: fix invalid rxq number setting

Wei Dai wei.dai at intel.com
Mon Jan 8 14:02:30 CET 2018


If an invalid RX queue is configured from testpmd command
like "port config all rxq number", the global variable rxq
is updated by this invalid value. It may cause testpmd crash.
This patch restores its last correct value when an invalid
rxq number configured is detected.

Fixes: ce8d561418d4 ("app/testpmd: add port configuration settings")
Cc: stable at dpdk.org

Signed-off-by: Wei Dai <wei.dai at intel.com>
---
 app/test-pmd/cmdline.c |  1 +
 app/test-pmd/testpmd.c | 10 ++++++++--
 app/test-pmd/testpmd.h |  2 ++
 3 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index f71d963..3f3986c 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -1501,6 +1501,7 @@ cmd_config_rx_tx_parsed(void *parsed_result,
 			printf("Warning: Either rx or tx queues should be non zero\n");
 			return;
 		}
+		nb_rxq_bak = nb_rxq;
 		nb_rxq = res->value;
 	}
 	else if (!strcmp(res->name, "txq")) {
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index 47e145c..5939c88 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -188,6 +188,8 @@ uint8_t dcb_test = 0;
 queueid_t nb_rxq = 1; /**< Number of RX queues per port. */
 queueid_t nb_txq = 1; /**< Number of TX queues per port. */
 
+queueid_t nb_rxq_bak = 1; /**< Backup of last correct number of RX queues */
+
 /*
  * Configurable number of RX/TX ring descriptors.
  */
@@ -708,10 +710,14 @@ init_fwd_streams(void)
 		port = &ports[pid];
 		if (nb_rxq > port->dev_info.max_rx_queues) {
 			printf("Fail: nb_rxq(%d) is greater than "
-				"max_rx_queues(%d)\n", nb_rxq,
-				port->dev_info.max_rx_queues);
+				"max_rx_queues(%d), restore to backup "
+				"rxq number(%d)\n", nb_rxq,
+				port->dev_info.max_rx_queues,
+				nb_rxq_bak);
+			nb_rxq = nb_rxq_bak;
 			return -1;
 		}
+		nb_rxq_bak = nb_rxq;
 		if (nb_txq > port->dev_info.max_tx_queues) {
 			printf("Fail: nb_txq(%d) is greater than "
 				"max_tx_queues(%d)\n", nb_txq,
diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
index 4d7f27c..84246f7 100644
--- a/app/test-pmd/testpmd.h
+++ b/app/test-pmd/testpmd.h
@@ -391,6 +391,8 @@ extern uint64_t rss_hf;
 extern queueid_t nb_rxq;
 extern queueid_t nb_txq;
 
+extern queueid_t nb_rxq_bak;
+
 extern uint16_t nb_rxd;
 extern uint16_t nb_txd;
 
-- 
2.7.5



More information about the dev mailing list