DPDK patches and discussions
 help / color / mirror / Atom feed
From: Ferruh Yigit <ferruh.yigit@intel.com>
To: Viacheslav Ovsiienko <viacheslavo@nvidia.com>,
	Xiaoyun Li <xiaoyun.li@intel.com>,
	"Wei Hu (Xavier)" <xavier.huwei@huawei.com>,
	Chengchang Tang <tangchengchang@huawei.com>
Cc: Ferruh Yigit <ferruh.yigit@intel.com>,
	dev@dpdk.org, stable@dpdk.org, Andrew Boyer <aboyer@pensando.io>
Subject: [dpdk-dev] [PATCH v2] app/testpmd: fix segment number check
Date: Fri, 23 Apr 2021 17:09:52 +0100
Message-ID: <20210423160952.336272-1-ferruh.yigit@intel.com> (raw)
In-Reply-To: <1607699265-5238-1-git-send-email-viacheslavo@nvidia.com>

From: Viacheslav Ovsiienko <viacheslavo@nvidia.com>

The --txpkts command line parameter was silently ignored due to
application was unable to check the Tx queue ring sizes for non
configured ports [1].

The "set txpkts <len0[,len1]*>" was also rejected if there
was some stopped or /unconfigured port.

This provides the following:

  - If fails to get ring size from the port, this can be because port is
    not initialized yet, ignore the check and just be sure segment size
    won't cause an out of bound access. The port descriptor check will
    be done during Tx setup.

  - The capability to send single packet is supposed to be very basic
    and always supported, the setting segment number to 1 is always
    allowed, no check performed

  - At the moment of Tx queue setup the descriptor number is checked
    against configured segment number

Bugzilla ID: 584
Fixes: 8dae835d88b7 ("app/testpmd: remove restriction on Tx segments set")
Cc: stable@dpdk.org

Signed-off-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
Cc: Andrew Boyer <aboyer@pensando.io>

v2:
* Become more flexible for the '--txpkts' command line, if not able to
  get the descriptor size from port, ignore the check.

  ('nb_txd' check was proposed before, this will require '--txd'
  parameter, but also enforces a specific order on the parameters,
  instead going with the option to flex the checks for parameter.)
---
 app/test-pmd/cmdline.c |  4 ++++
 app/test-pmd/config.c  | 32 ++++++++++++++++++++++++--------
 2 files changed, 28 insertions(+), 8 deletions(-)

diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 12efbc0cab46..7feba8337781 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -2910,6 +2910,10 @@ cmd_setup_rxtx_queue_parsed(
 		if (!numa_support || socket_id == NUMA_NO_CONFIG)
 			socket_id = port->socket_id;
 
+		if (port->nb_tx_desc[res->qid] < tx_pkt_nb_segs) {
+			printf("Failed to setup TX queue: not enough descriptors\n");
+			return;
+		}
 		ret = rte_eth_tx_queue_setup(res->portid,
 					     res->qid,
 					     port->nb_tx_desc[res->qid],
diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
index e189062efde8..a4445a73bfa5 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -3697,13 +3697,15 @@ nb_segs_is_invalid(unsigned int nb_segs)
 	RTE_ETH_FOREACH_DEV(port_id) {
 		for (queue_id = 0; queue_id < nb_txq; queue_id++) {
 			ret = get_tx_ring_size(port_id, queue_id, &ring_size);
-
-			if (ret)
-				return true;
-
+			if (ret) {
+				/* Port may not be initialized yet, can't say
+				 * the port is invalid in this stage.
+				 */
+				continue;
+			}
 			if (ring_size < nb_segs) {
-				printf("nb segments per TX packets=%u >= "
-				       "TX queue(%u) ring_size=%u - ignored\n",
+				printf("nb segments per TX packets=%u >= TX "
+				       "queue(%u) ring_size=%u - txpkts ignored\n",
 				       nb_segs, queue_id, ring_size);
 				return true;
 			}
@@ -3719,12 +3721,26 @@ set_tx_pkt_segments(unsigned int *seg_lengths, unsigned int nb_segs)
 	uint16_t tx_pkt_len;
 	unsigned int i;
 
-	if (nb_segs_is_invalid(nb_segs))
+	/*
+	 * For single segment settings failed check is ignored.
+	 * It is a very basic capability to send the single segment
+	 * packets, suppose it is always supported.
+	 */
+	if (nb_segs > 1 && nb_segs_is_invalid(nb_segs)) {
+		printf("Tx segment size(%u) is not supported - txpkts ignored\n",
+			nb_segs);
 		return;
+	}
+
+	if (nb_segs > RTE_MAX_SEGS_PER_PKT) {
+		printf("Tx segment size(%u) is bigger than max number of segment(%u)\n",
+			nb_segs, RTE_MAX_SEGS_PER_PKT);
+		return;
+	}
 
 	/*
 	 * Check that each segment length is greater or equal than
-	 * the mbuf data sise.
+	 * the mbuf data size.
 	 * Check also that the total packet length is greater or equal than the
 	 * size of an empty UDP/IP packet (sizeof(struct rte_ether_hdr) +
 	 * 20 + 8).
-- 
2.30.2


  parent reply	other threads:[~2021-04-23 16:13 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-18 12:02 [dpdk-dev] [PATCH 0/4] minor fixes for testpmd Wei Hu (Xavier)
2020-08-18 12:02 ` [dpdk-dev] [PATCH 1/4] app/testpmd: fix missing verification of port id Wei Hu (Xavier)
2020-08-18 12:02 ` [dpdk-dev] [PATCH 2/4] app/testpmd: fix VLAN offload configuration when config fail Wei Hu (Xavier)
2020-08-18 12:02 ` [dpdk-dev] [PATCH 3/4] app/testpmd: fix packet header in txonly mode Wei Hu (Xavier)
2020-08-18 12:02 ` [dpdk-dev] [PATCH 4/4] app/testpmd: fix displaying Rx Tx queues information Wei Hu (Xavier)
2020-08-20  1:42 ` [dpdk-dev] [PATCH v2 0/4] minor fixes for testpmd Wei Hu (Xavier)
2020-08-20  1:42   ` [dpdk-dev] [PATCH v2 1/4] app/testpmd: fix missing verification of port id Wei Hu (Xavier)
2020-09-14 16:13     ` Ferruh Yigit
2020-08-20  1:42   ` [dpdk-dev] [PATCH v2 2/4] app/testpmd: fix VLAN offload configuration when config fail Wei Hu (Xavier)
2020-09-14 16:13     ` Ferruh Yigit
2020-08-20  1:42   ` [dpdk-dev] [PATCH v2 3/4] app/testpmd: fix packet header in txonly mode Wei Hu (Xavier)
2020-09-14 16:23     ` Ferruh Yigit
2020-09-17  7:10       ` Chengchang Tang
2020-09-17 11:16         ` Ferruh Yigit
2020-09-17 11:48           ` Chengchang Tang
2020-08-20  1:42   ` [dpdk-dev] [PATCH v2 4/4] app/testpmd: fix displaying Rx Tx queues information Wei Hu (Xavier)
2020-09-14 16:31     ` Ferruh Yigit
2020-09-16  9:23       ` Wei Hu (Xavier)
2020-09-16 15:58         ` Ferruh Yigit
2020-09-03  3:19   ` [dpdk-dev] [PATCH v2 0/4] minor fixes for testpmd Wei Hu (Xavier)
2020-09-19 10:47 ` [dpdk-dev] [PATCH v3 0/6] " Wei Hu (Xavier)
2020-09-19 10:47   ` [dpdk-dev] [PATCH v3 1/6] app/testpmd: fix missing verification of port id Wei Hu (Xavier)
2020-09-22 14:49     ` Ferruh Yigit
2020-09-19 10:47   ` [dpdk-dev] [PATCH v3 2/6] app/testpmd: fix VLAN offload configuration when config fail Wei Hu (Xavier)
2020-09-19 10:47   ` [dpdk-dev] [PATCH v3 3/6] app/testpmd: remove restriction on txpkts set Wei Hu (Xavier)
2020-09-22 14:51     ` Ferruh Yigit
2020-09-23  3:14       ` Wei Hu (Xavier)
2020-09-23 11:57         ` Wei Hu (Xavier)
2020-09-23 16:59           ` Ferruh Yigit
2020-09-24  6:08             ` Chengchang Tang
2020-09-24 12:19               ` Ferruh Yigit
2020-09-19 10:47   ` [dpdk-dev] [PATCH v3 4/6] app/testpmd: fix packet header in txonly mode Wei Hu (Xavier)
2020-09-19 10:47   ` [dpdk-dev] [PATCH v3 5/6] app/testpmd: fix valid desc id check Wei Hu (Xavier)
2020-09-22 14:53     ` Ferruh Yigit
2020-09-19 10:47   ` [dpdk-dev] [PATCH v3 6/6] app/testpmd: fix displaying Rx Tx queues information Wei Hu (Xavier)
2020-09-25 12:47 ` [dpdk-dev] [PATCH v4 0/6] minor fixes for testpmd Wei Hu (Xavier)
2020-09-25 12:47   ` [dpdk-dev] [PATCH v4 1/6] app/testpmd: fix missing verification of port id Wei Hu (Xavier)
2020-09-25 12:47   ` [dpdk-dev] [PATCH v4 2/6] app/testpmd: fix VLAN offload configuration when config fail Wei Hu (Xavier)
2020-09-25 12:47   ` [dpdk-dev] [PATCH v4 3/6] app/testpmd: remove restriction on txpkts set Wei Hu (Xavier)
2020-11-23 11:50     ` Slava Ovsiienko
2020-11-24 10:27       ` Thomas Monjalon
2020-11-24 12:23         ` Ferruh Yigit
2020-11-24 13:01           ` Kevin Traynor
2020-11-25 14:06           ` Ferruh Yigit
2020-11-26  7:24             ` Slava Ovsiienko
2020-11-26 12:38               ` Ferruh Yigit
2020-11-27 13:05                 ` Slava Ovsiienko
2020-12-02 12:07                   ` Ferruh Yigit
2020-12-03  9:45                     ` Slava Ovsiienko
2020-12-03 10:18                       ` Ferruh Yigit
2020-12-11 15:07                         ` [dpdk-dev] [PATCH] app/testpmd: fix segment number check Viacheslav Ovsiienko
2020-12-11 16:00                           ` Andrew Boyer
2020-12-11 16:14                             ` Slava Ovsiienko
2020-12-16 12:12                               ` Ferruh Yigit
2020-12-16 12:33                                 ` Slava Ovsiienko
2020-12-16 12:36                           ` Ferruh Yigit
2021-04-23 16:09                           ` Ferruh Yigit [this message]
2021-04-26 11:23                             ` [dpdk-dev] [PATCH v2] " Li, Xiaoyun
2021-04-27 11:42                               ` Ferruh Yigit
2020-09-25 12:47   ` [dpdk-dev] [PATCH v4 4/6] app/testpmd: fix packet header in txonly mode Wei Hu (Xavier)
2020-09-29 15:40     ` Ferruh Yigit
2020-09-25 12:47   ` [dpdk-dev] [PATCH v4 5/6] app/testpmd: fix valid desc id check Wei Hu (Xavier)
2020-09-25 12:47   ` [dpdk-dev] [PATCH v4 6/6] app/testpmd: fix displaying Rx Tx queues information Wei Hu (Xavier)
2020-09-29 15:40   ` [dpdk-dev] [PATCH v4 0/6] minor fixes for testpmd Ferruh Yigit

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=20210423160952.336272-1-ferruh.yigit@intel.com \
    --to=ferruh.yigit@intel.com \
    --cc=aboyer@pensando.io \
    --cc=dev@dpdk.org \
    --cc=stable@dpdk.org \
    --cc=tangchengchang@huawei.com \
    --cc=viacheslavo@nvidia.com \
    --cc=xavier.huwei@huawei.com \
    --cc=xiaoyun.li@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

DPDK patches and discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \
		dev@dpdk.org
	public-inbox-index dev

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.dev


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git