DPDK patches and discussions
 help / color / mirror / Atom feed
From: Jie Hai <haijie1@huawei.com>
To: Aman Singh <aman.deep.singh@intel.com>,
	Yuying Zhang <yuying.zhang@intel.com>,
	Anatoly Burakov <anatoly.burakov@intel.com>,
	Matan Azrad <matan@nvidia.com>,
	Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
Cc: <dev@dpdk.org>, <liudongdong3@huawei.com>
Subject: [PATCH v2] app/test-pmd: fix not polling all queues without deferred starting
Date: Mon, 8 May 2023 11:10:45 +0800	[thread overview]
Message-ID: <20230508031046.34346-1-haijie1@huawei.com> (raw)
In-Reply-To: <20230506092635.35968-1-haijie1@huawei.com>

Each stream has a read-only "disabled" field that control if this
stream should be used to forward. This field depends on states
of Rx/Tx queues, please see commit
3c4426db54fc ("app/testpmd: do not poll stopped queues").

Currently, the testpmd and DPDK frameworks maintain queue state
separately. That of the primary process of testpmd are set by
deferred_start in the queue configuration. And that of the
framework(dev->data->rx_queue_state or dev->data->tx_queue_state)
is set when the driver enables/disables the queue, and it is
shared between the primary/secondary process.

If the deferred_start is set, the queue is disabled and the
corresponding queue state in the framework changes to stopped.
However, the queue state in the framework does not only come from
this. If the primary/secondary process stops a queue, the related
queue state will change, too. However, the primary process of
testpmd does not know the change brought by this operation.
Therefore, setting the queue state in the primary testpmd by only
the deferred_start is unsafe.

For example, Rx/Tx queues who are stopped before the operations of
stopping and starting port cannot forward packets after these
operations on primary process.

Therefore, the primary process should getting the queue state from
of the framework as the secondary process does, please see commit
e065c9aa3e05 ("app/testpmd: fix secondary process packet forwarding").

Fixes: 3c4426db54fc ("app/testpmd: do not poll stopped queues")
Cc: stable@dpdk.org

Signed-off-by: Jie Hai <haijie1@huawei.com>
---
v1-v2:
1. Fix misspelled word 'deferred'.
2. Fix incorrect format of reference to commits.
---
 app/test-pmd/testpmd.c | 19 +++----------------
 1 file changed, 3 insertions(+), 16 deletions(-)

diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index 5cb6f9252395..a07a67a2639e 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -2502,8 +2502,7 @@ start_packet_forwarding(int with_tx_first)
 		return;
 
 	if (stream_init != NULL) {
-		if (rte_eal_process_type() == RTE_PROC_SECONDARY)
-			update_queue_state();
+		update_queue_state();
 		for (i = 0; i < cur_fwd_config.nb_fwd_streams; i++)
 			stream_init(fwd_streams[i]);
 	}
@@ -2860,9 +2859,6 @@ rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
 				    socket_id, rx_conf, mp);
 	}
 
-	ports[port_id].rxq[rx_queue_id].state = rx_conf->rx_deferred_start ?
-						RTE_ETH_QUEUE_STATE_STOPPED :
-						RTE_ETH_QUEUE_STATE_STARTED;
 	return ret;
 }
 
@@ -3129,9 +3125,6 @@ start_port(portid_t pid)
 			port->need_reconfig_queues = 0;
 			/* setup tx queues */
 			for (qi = 0; qi < nb_txq; qi++) {
-				struct rte_eth_txconf *conf =
-							&port->txq[qi].conf;
-
 				if ((numa_support) &&
 					(txring_numa[pi] != NUMA_NO_CONFIG))
 					diag = rte_eth_tx_queue_setup(pi, qi,
@@ -3144,13 +3137,8 @@ start_port(portid_t pid)
 						port->socket_id,
 						&(port->txq[qi].conf));
 
-				if (diag == 0) {
-					port->txq[qi].state =
-						conf->tx_deferred_start ?
-						RTE_ETH_QUEUE_STATE_STOPPED :
-						RTE_ETH_QUEUE_STATE_STARTED;
+				if (diag == 0)
 					continue;
-				}
 
 				/* Fail to setup tx queue, return */
 				if (port->port_status == RTE_PORT_HANDLING)
@@ -3266,8 +3254,7 @@ start_port(portid_t pid)
 		pl[cfg_pi++] = pi;
 	}
 
-	if (rte_eal_process_type() == RTE_PROC_SECONDARY)
-		update_queue_state();
+	update_queue_state();
 
 	if (at_least_one_port_successfully_started && !no_link_check)
 		check_all_ports_link_status(RTE_PORT_ALL);
-- 
2.33.0


  reply	other threads:[~2023-05-08  3:12 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-06  9:26 [PATCH] app/test-pmd: fix not polling all queues without defered starting Jie Hai
2023-05-08  3:10 ` Jie Hai [this message]
2023-05-29  2:26   ` [PATCH v3] app/test-pmd: fix not polling all queues without deferred starting Jie Hai
2023-06-06 14:45     ` Ferruh Yigit
2023-06-07  7:04       ` Jie Hai
2023-06-07 17:38         ` Ferruh Yigit
2023-06-07 18:12     ` Ferruh Yigit
2023-06-09  8:54       ` Jie Hai
2023-06-09  9:03     ` [PATCH v4] app/testpmd: fix primary process not polling all queues Jie Hai
2023-06-09 11:10       ` Ferruh Yigit
2023-06-20 10:07         ` Jie Hai
2023-06-20 10:57           ` Ferruh Yigit
2023-06-20 17:05           ` Ferruh Yigit
2023-06-22 16:40       ` Ali Alnubani
2023-06-26  9:30         ` Jie Hai
2023-06-27 11:05           ` Ferruh Yigit
2023-07-03 13:40             ` Ali Alnubani

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=20230508031046.34346-1-haijie1@huawei.com \
    --to=haijie1@huawei.com \
    --cc=aman.deep.singh@intel.com \
    --cc=anatoly.burakov@intel.com \
    --cc=dev@dpdk.org \
    --cc=dmitry.kozliuk@gmail.com \
    --cc=liudongdong3@huawei.com \
    --cc=matan@nvidia.com \
    --cc=yuying.zhang@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).