[dpdk-stable] [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 stable
mailing list