[dpdk-stable] patch 'app/testpmd: remove restriction on Tx segments set' has been queued to LTS release 18.11.11

Kevin Traynor ktraynor at redhat.com
Thu Nov 5 13:39:39 CET 2020


Hi,

FYI, your patch has been queued to LTS release 18.11.11

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/10/20. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://github.com/kevintraynor/dpdk-stable-queue

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable-queue/commit/24bf628638382b2de987268da4b0528d1a94408e

Thanks.

Kevin.

---
>From 24bf628638382b2de987268da4b0528d1a94408e Mon Sep 17 00:00:00 2001
From: Chengchang Tang <tangchengchang at huawei.com>
Date: Fri, 25 Sep 2020 20:47:16 +0800
Subject: [PATCH] app/testpmd: remove restriction on Tx segments set

[ upstream commit 8dae835d88b745dee761771513095525adb9ed74 ]

Currently, if nb_txd is not set, the txpkts is not allowed to be set
because the nb_txd is used to avoid the number of segments exceed the Tx
ring size and the default value of nb_txd is 0. And there is a bug that
nb_txd is the global configuration for Tx ring size and the ring size
could be changed by some command per queue. So these valid check is
unreliable and introduced unnecessary constraints.

This patch adds a valid check function to use the real Tx ring size to
check the validity of txpkts.

Fixes: af75078fece3 ("first public release")

Signed-off-by: Chengchang Tang <tangchengchang at huawei.com>
Signed-off-by: Wei Hu (Xavier) <xavier.huwei at huawei.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit at intel.com>
---
 app/test-pmd/config.c | 64 ++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 60 insertions(+), 4 deletions(-)

diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
index e5945426fa..8636c02423 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -1515,4 +1515,36 @@ tx_queue_id_is_invalid(queueid_t txq_id)
 }
 
+static int
+get_tx_ring_size(portid_t port_id, queueid_t txq_id, uint16_t *ring_size)
+{
+	struct rte_port *port = &ports[port_id];
+	struct rte_eth_txq_info tx_qinfo;
+	int ret;
+
+	ret = rte_eth_tx_queue_info_get(port_id, txq_id, &tx_qinfo);
+	if (ret == 0) {
+		*ring_size = tx_qinfo.nb_desc;
+		return ret;
+	}
+
+	if (ret != -ENOTSUP)
+		return ret;
+	/*
+	 * If the rte_eth_tx_queue_info_get is not support for this PMD,
+	 * ring_size stored in testpmd will be used for validity verification.
+	 * When configure the txq by rte_eth_tx_queue_setup with nb_tx_desc
+	 * being 0, it will use a default value provided by PMDs to setup this
+	 * txq. If the default value is 0, it will use the
+	 * RTE_ETH_DEV_FALLBACK_TX_RINGSIZE to setup this txq.
+	 */
+	if (port->nb_tx_desc[txq_id])
+		*ring_size = port->nb_tx_desc[txq_id];
+	else if (port->dev_info.default_txportconf.ring_size)
+		*ring_size = port->dev_info.default_txportconf.ring_size;
+	else
+		*ring_size = RTE_ETH_DEV_FALLBACK_TX_RINGSIZE;
+	return 0;
+}
+
 static int
 rx_desc_id_is_invalid(uint16_t rxdesc_id)
@@ -2552,4 +2584,31 @@ show_tx_pkt_segments(void)
 }
 
+static bool
+nb_segs_is_invalid(unsigned int nb_segs)
+{
+	uint16_t ring_size;
+	uint16_t queue_id;
+	uint16_t port_id;
+	int ret;
+
+	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 (ring_size < nb_segs) {
+				printf("nb segments per TX packets=%u >= "
+				       "TX queue(%u) ring_size=%u - ignored\n",
+				       nb_segs, queue_id, ring_size);
+				return true;
+			}
+		}
+	}
+
+	return false;
+}
+
 void
 set_tx_pkt_segments(unsigned *seg_lengths, unsigned nb_segs)
@@ -2558,9 +2617,6 @@ set_tx_pkt_segments(unsigned *seg_lengths, unsigned nb_segs)
 	unsigned i;
 
-	if (nb_segs >= (unsigned) nb_txd) {
-		printf("nb segments per TX packets=%u >= nb_txd=%u - ignored\n",
-		       nb_segs, (unsigned int) nb_txd);
+	if (nb_segs_is_invalid(nb_segs))
 		return;
-	}
 
 	/*
-- 
2.26.2

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2020-11-05 12:38:54.879854266 +0000
+++ 0032-app-testpmd-remove-restriction-on-Tx-segments-set.patch	2020-11-05 12:38:54.230896012 +0000
@@ -1 +1 @@
-From 8dae835d88b745dee761771513095525adb9ed74 Mon Sep 17 00:00:00 2001
+From 24bf628638382b2de987268da4b0528d1a94408e Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 8dae835d88b745dee761771513095525adb9ed74 ]
+
@@ -17 +18,0 @@
-Cc: stable at dpdk.org
@@ -27 +28 @@
-index 0bec547f51..8f63b4ea40 100644
+index e5945426fa..8636c02423 100644
@@ -30 +31 @@
-@@ -2010,4 +2010,36 @@ tx_queue_id_is_invalid(queueid_t txq_id)
+@@ -1515,4 +1515,36 @@ tx_queue_id_is_invalid(queueid_t txq_id)
@@ -67 +68 @@
-@@ -3104,4 +3136,31 @@ show_tx_pkt_segments(void)
+@@ -2552,4 +2584,31 @@ show_tx_pkt_segments(void)
@@ -99 +100 @@
-@@ -3110,9 +3169,6 @@ set_tx_pkt_segments(unsigned *seg_lengths, unsigned nb_segs)
+@@ -2558,9 +2617,6 @@ set_tx_pkt_segments(unsigned *seg_lengths, unsigned nb_segs)



More information about the stable mailing list