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

Ananyev, Konstantin konstantin.ananyev at intel.com
Mon Jan 8 21:05:44 CET 2018



> -----Original Message-----
> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Wei Dai
> Sent: Monday, January 8, 2018 1:03 PM
> To: Lu, Wenzhuo <wenzhuo.lu at intel.com>; Wu, Jingjing <jingjing.wu at intel.com>; Peng, Yuan <yuan.peng at intel.com>
> Cc: dev at dpdk.org; stable at dpdk.org; Dai, Wei <wei.dai at intel.com>
> Subject: [dpdk-dev] [PATCH 1/2] app/testpmd: fix invalid rxq number setting
> 
> 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) {

Why not to add that check in the function handler for " port config ... rxq ..." command itself?
In that case you wouldn't need nb_rxq_bak at all.
Konstantin

>  			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