From: Wei Dai <wei.dai@intel.com>
To: yuan.peng@intel.com, konstantin.ananyev@intel.com,
wenzhuo.lu@intel.com, beilei.xing@intel.com
Cc: dev@dpdk.org, Wei Dai <wei.dai@intel.com>, stable@dpdk.org
Subject: [PATCH v5 2/2] app/testpmd: fix invalid txq number setting
Date: Fri, 12 Jan 2018 16:10:03 +0800 [thread overview]
Message-ID: <1515744603-60457-3-git-send-email-wei.dai@intel.com> (raw)
In-Reply-To: <1515744603-60457-1-git-send-email-wei.dai@intel.com>
If an invalid number of TX queues is configured from testpmd run-time
command like "port config all txq number" or from --txq in the command
to start testpmd, the global variable nb_txq is updated by this invalid
value without this patch. It may cause testpmd crash. This patch refuses
invalid txq setting and keeps its last correct value.
Fixes: ce8d561418d4 ("app/testpmd: add port configuration settings")
Cc: stable@dpdk.org
Signed-off-by: Wei Dai <wei.dai@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
---
app/test-pmd/cmdline.c | 2 ++
app/test-pmd/parameters.c | 6 +++---
app/test-pmd/testpmd.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
app/test-pmd/testpmd.h | 2 ++
4 files changed, 53 insertions(+), 3 deletions(-)
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index f0623b1..6619cb8 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -1527,6 +1527,8 @@ cmd_config_rx_tx_parsed(void *parsed_result,
printf("Warning: Either rx or tx queues should be non zero\n");
return;
}
+ if (check_nb_txq(res->value) != 0)
+ return;
nb_txq = res->value;
}
else if (!strcmp(res->name, "rxd")) {
diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c
index c46e734..ca2af65 100644
--- a/app/test-pmd/parameters.c
+++ b/app/test-pmd/parameters.c
@@ -932,12 +932,12 @@ launch_args_parse(int argc, char** argv)
}
if (!strcmp(lgopts[opt_idx].name, "txq")) {
n = atoi(optarg);
- if (n >= 0 && n <= (int) MAX_QUEUE_ID)
+ if (n >= 0 && check_nb_txq((queueid_t)n) == 0)
nb_txq = (queueid_t) n;
else
rte_exit(EXIT_FAILURE, "txq %d invalid - must be"
- " >= 0 && <= %d\n", n,
- (int) MAX_QUEUE_ID);
+ " >= 0 && <= %u\n", n,
+ get_allowed_max_nb_txq(&pid));
}
if (!nb_rxq && !nb_txq) {
rte_exit(EXIT_FAILURE, "Either rx or tx queues should "
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index 4e8667d..493e028 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -586,6 +586,52 @@ check_nb_rxq(queueid_t rxq)
return 0;
}
+/*
+ * Get the allowed maximum number of TX queues.
+ * *pid return the port id which has minimal value of
+ * max_tx_queues in all ports.
+ */
+queueid_t
+get_allowed_max_nb_txq(portid_t *pid)
+{
+ queueid_t allowed_max_txq = MAX_QUEUE_ID;
+ portid_t pi;
+ struct rte_eth_dev_info dev_info;
+
+ RTE_ETH_FOREACH_DEV(pi) {
+ rte_eth_dev_info_get(pi, &dev_info);
+ if (dev_info.max_tx_queues < allowed_max_txq) {
+ allowed_max_txq = dev_info.max_tx_queues;
+ *pid = pi;
+ }
+ }
+ return allowed_max_txq;
+}
+
+/*
+ * Check input txq is valid or not.
+ * If input txq is not greater than any of maximum number
+ * of TX queues of all ports, it is valid.
+ * if valid, return 0, else return -1
+ */
+int
+check_nb_txq(queueid_t txq)
+{
+ queueid_t allowed_max_txq;
+ portid_t pid = 0;
+
+ allowed_max_txq = get_allowed_max_nb_txq(&pid);
+ if (txq > allowed_max_txq) {
+ printf("Fail: input txq (%u) can't be greater "
+ "than max_tx_queues (%u) of port %u\n",
+ txq,
+ allowed_max_txq,
+ pid);
+ return -1;
+ }
+ return 0;
+}
+
static void
init_config(void)
{
diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
index e815509..fe40892 100644
--- a/app/test-pmd/testpmd.h
+++ b/app/test-pmd/testpmd.h
@@ -702,6 +702,8 @@ int new_socket_id(unsigned int socket_id);
queueid_t get_allowed_max_nb_rxq(portid_t *pid);
int check_nb_rxq(queueid_t rxq);
+queueid_t get_allowed_max_nb_txq(portid_t *pid);
+int check_nb_txq(queueid_t txq);
/*
* Work-around of a compilation error with ICC on invocations of the
--
2.7.5
next prev parent reply other threads:[~2018-01-12 8:10 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-08 13:02 [PATCH 0/2] app/testpmd: fix invalid rxq and txq nubmer setting Wei Dai
2018-01-08 13:02 ` [PATCH 1/2] app/testpmd: fix invalid rxq number setting Wei Dai
2018-01-08 20:05 ` Ananyev, Konstantin
2018-01-10 1:33 ` Dai, Wei
2018-01-10 1:54 ` Ananyev, Konstantin
2018-01-10 6:00 ` Dai, Wei
2018-01-08 13:02 ` [PATCH 2/2] app/testpmd: fix invalid txq " Wei Dai
2018-01-10 4:14 ` [PATCH v2 0/2] app/testpmd: fix invalid rxq and txq nubmer setting Wei Dai
2018-01-10 4:14 ` [PATCH v2 1/2] app/testpmd: fix invalid rxq number setting Wei Dai
2018-01-10 4:14 ` [PATCH v2 2/2] app/testpmd: fix invalid txq " Wei Dai
2018-01-10 6:37 ` Yang, Qiming
2018-01-10 8:50 ` Dai, Wei
2018-01-10 8:40 ` [PATCH v3 0/2] app/testpmd: fix invalid rxq and txq nubmer setting Wei Dai
2018-01-10 8:40 ` [PATCH v3 1/2] app/testpmd: fix invalid rxq number setting Wei Dai
2018-01-10 8:40 ` [PATCH v3 2/2] app/testpmd: fix invalid txq " Wei Dai
2018-01-10 9:58 ` [PATCH v3 0/2] app/testpmd: fix invalid rxq and txq nubmer setting Ananyev, Konstantin
2018-01-11 1:21 ` Dai, Wei
2018-01-11 4:58 ` [PATCH v4 0/2] app/testpmd: fix invalid rxq and txq nubmer settings Wei Dai
2018-01-11 4:58 ` [PATCH v4 1/2] app/testpmd: fix invalid rxq number setting Wei Dai
2018-01-11 4:58 ` [PATCH v4 2/2] app/testpmd: fix invalid txq " Wei Dai
2018-01-12 5:39 ` [PATCH v4 0/2] app/testpmd: fix invalid rxq and txq nubmer settings Peng, Yuan
2018-01-12 6:05 ` Dai, Wei
2018-01-12 8:10 ` [PATCH v5 " Wei Dai
2018-01-12 8:10 ` [PATCH v5 1/2] app/testpmd: fix invalid rxq number setting Wei Dai
2018-01-12 9:09 ` Peng, Yuan
2018-01-12 8:10 ` Wei Dai [this message]
2018-01-12 9:12 ` [PATCH v5 2/2] app/testpmd: fix invalid txq " Peng, Yuan
2018-01-12 9:09 ` [PATCH v5 0/2] app/testpmd: fix invalid rxq and txq nubmer settings Peng, Yuan
2018-01-12 11:31 ` [PATCH v6 " Wei Dai
2018-01-12 11:31 ` [PATCH v6 1/2] app/testpmd: fix invalid rxq number setting Wei Dai
2018-01-12 11:31 ` [PATCH v6 2/2] app/testpmd: fix invalid txq " Wei Dai
2018-01-17 14:06 ` [PATCH v6 0/2] app/testpmd: fix invalid rxq and txq nubmer settings Thomas Monjalon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1515744603-60457-3-git-send-email-wei.dai@intel.com \
--to=wei.dai@intel.com \
--cc=beilei.xing@intel.com \
--cc=dev@dpdk.org \
--cc=konstantin.ananyev@intel.com \
--cc=stable@dpdk.org \
--cc=wenzhuo.lu@intel.com \
--cc=yuan.peng@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.