From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id 74E4B1B16A; Mon, 8 Jan 2018 14:18:43 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 08 Jan 2018 05:18:43 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.46,330,1511856000"; d="scan'208";a="17565199" Received: from dpdk6.bj.intel.com ([172.16.182.87]) by FMSMGA003.fm.intel.com with ESMTP; 08 Jan 2018 05:18:40 -0800 From: Wei Dai To: wenzhuo.lu@intel.com, jingjing.wu@intel.com, yuan.peng@intel.com Cc: dev@dpdk.org, stable@dpdk.org, Wei Dai Date: Mon, 8 Jan 2018 21:02:31 +0800 Message-Id: <1515416551-28636-3-git-send-email-wei.dai@intel.com> X-Mailer: git-send-email 2.7.5 In-Reply-To: <1515416551-28636-1-git-send-email-wei.dai@intel.com> References: <1515416551-28636-1-git-send-email-wei.dai@intel.com> Subject: [dpdk-dev] [PATCH 2/2] app/testpmd: fix invalid txq number setting X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Jan 2018 13:18:45 -0000 If an invalid TX queue is configured from testpmd command like "port config all txq number", the global variable txq is updated by this invalid value. It may cause testpmd crash. This patch restores its last correct value when an invalid txq number configured is detected. Fixes: ce8d561418d4 ("app/testpmd: add port configuration settings") Cc: stable@dpdk.org Signed-off-by: Wei Dai --- app/test-pmd/cmdline.c | 1 + app/test-pmd/testpmd.c | 9 +++++++-- app/test-pmd/testpmd.h | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 3f3986c..b3ca850 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -1509,6 +1509,7 @@ cmd_config_rx_tx_parsed(void *parsed_result, printf("Warning: Either rx or tx queues should be non zero\n"); return; } + nb_txq_bak = nb_txq; nb_txq = res->value; } else if (!strcmp(res->name, "rxd")) { diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 5939c88..894e49f 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -189,6 +189,7 @@ 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 */ +queueid_t nb_txq_bak = 1; /**< Backup of last correct number of TX queues */ /* * Configurable number of RX/TX ring descriptors. @@ -720,10 +721,14 @@ init_fwd_streams(void) 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, - port->dev_info.max_tx_queues); + "max_tx_queues(%d), restore to backup " + "txq number(%d)\n", nb_txq, + port->dev_info.max_tx_queues, + nb_txq_bak); + nb_txq = nb_txq_bak; return -1; } + nb_txq_bak = nb_txq; if (numa_support) { if (port_numa[pid] != NUMA_NO_CONFIG) port->socket_id = port_numa[pid]; diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index 84246f7..7480c1a 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -392,6 +392,7 @@ extern queueid_t nb_rxq; extern queueid_t nb_txq; extern queueid_t nb_rxq_bak; +extern queueid_t nb_txq_bak; extern uint16_t nb_rxd; extern uint16_t nb_txd; -- 2.7.5