patches for DPDK stable branches
 help / color / mirror / Atom feed
From: Xueming Li <xuemingl@nvidia.com>
To: Dmitry Kozlyuk <dkozlyuk@nvidia.com>
Cc: Matan Azrad <matan@nvidia.com>, dpdk stable <stable@dpdk.org>
Subject: patch 'app/testpmd: do not poll stopped queues' has been queued to stable release 20.11.6
Date: Tue, 21 Jun 2022 11:02:26 +0300	[thread overview]
Message-ID: <20220621080301.2315720-81-xuemingl@nvidia.com> (raw)
In-Reply-To: <20220621080301.2315720-1-xuemingl@nvidia.com>

Hi,

FYI, your patch has been queued to stable release 20.11.6

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 06/23/22. 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/steevenlee/dpdk

This queued commit can be viewed at:
https://github.com/steevenlee/dpdk/commit/bdf2967cd5c84e5df7691a3c87a66cf5529f6134

Thanks.

Xueming Li <xuemingl@nvidia.com>

---
From bdf2967cd5c84e5df7691a3c87a66cf5529f6134 Mon Sep 17 00:00:00 2001
From: Dmitry Kozlyuk <dkozlyuk@nvidia.com>
Date: Mon, 7 Mar 2022 14:53:50 +0200
Subject: [PATCH] app/testpmd: do not poll stopped queues
Cc: Xueming Li <xuemingl@nvidia.com>

[ upstream commit 3c4426db54fc24e7a97f2b4000a0a4f30897a104 ]

Calling Rx/Tx functions on a stopped queue is not supported.
Do not run packet forwarding for streams that use stopped queues.

Each stream has a read-only "disabled" field,
so that lcore function can skip such streams.
Forwarding engines can set this field
using a new "stream_init" callback function
by checking relevant queue states,
which are stored along with queue configurations
(not all PMDs implement rte_eth_rx/tx_queue_info_get()
to query the state from there).

Fixes: 5f4ec54f1d16 ("testpmd: queue start and stop")

Signed-off-by: Dmitry Kozlyuk <dkozlyuk@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
---
 app/test-pmd/5tswap.c                 | 13 +++++
 app/test-pmd/cmdline.c                | 45 +++++++++------
 app/test-pmd/config.c                 |  4 +-
 app/test-pmd/csumonly.c               | 13 +++++
 app/test-pmd/flowgen.c                | 13 +++++
 app/test-pmd/icmpecho.c               | 13 +++++
 app/test-pmd/ieee1588fwd.c            | 13 +++++
 app/test-pmd/iofwd.c                  | 13 +++++
 app/test-pmd/macfwd.c                 | 13 +++++
 app/test-pmd/macswap.c                | 13 +++++
 app/test-pmd/noisy_vnf.c              | 13 +++++
 app/test-pmd/rxonly.c                 |  8 +++
 app/test-pmd/testpmd.c                | 81 +++++++++++++++++----------
 app/test-pmd/testpmd.h                | 19 ++++++-
 app/test-pmd/txonly.c                 |  8 +++
 lib/librte_ethdev/rte_ethdev.h        |  7 +++
 lib/librte_ethdev/rte_ethdev_driver.h |  7 ---
 17 files changed, 238 insertions(+), 58 deletions(-)

diff --git a/app/test-pmd/5tswap.c b/app/test-pmd/5tswap.c
index e8cef9623b..090798d68b 100644
--- a/app/test-pmd/5tswap.c
+++ b/app/test-pmd/5tswap.c
@@ -185,9 +185,22 @@ pkt_burst_5tuple_swap(struct fwd_stream *fs)
 	get_end_cycles(fs, start_tsc);
 }
 
+static void
+stream_init_5tuple_swap(struct fwd_stream *fs)
+{
+	bool rx_stopped, tx_stopped;
+
+	rx_stopped = ports[fs->rx_port].rxq[fs->rx_queue].state ==
+						RTE_ETH_QUEUE_STATE_STOPPED;
+	tx_stopped = ports[fs->tx_port].txq[fs->tx_queue].state ==
+						RTE_ETH_QUEUE_STATE_STOPPED;
+	fs->disabled = rx_stopped || tx_stopped;
+}
+
 struct fwd_engine five_tuple_swap_fwd_engine = {
 	.fwd_mode_name  = "5tswap",
 	.port_fwd_begin = NULL,
 	.port_fwd_end   = NULL,
+	.stream_init    = stream_init_5tuple_swap,
 	.packet_fwd     = pkt_burst_5tuple_swap,
 };
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 481821b40a..b868081770 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -2557,8 +2557,10 @@ cmd_config_rxtx_queue_parsed(void *parsed_result,
 			__rte_unused void *data)
 {
 	struct cmd_config_rxtx_queue *res = parsed_result;
+	struct rte_port *port;
 	uint8_t isrx;
 	uint8_t isstart;
+	uint8_t *state;
 	int ret = 0;
 
 	if (test_done == 0) {
@@ -2606,8 +2608,15 @@ cmd_config_rxtx_queue_parsed(void *parsed_result,
 	else
 		ret = rte_eth_dev_tx_queue_stop(res->portid, res->qid);
 
-	if (ret == -ENOTSUP)
+	if (ret == -ENOTSUP) {
 		fprintf(stderr, "Function not supported in PMD\n");
+		return;
+	}
+
+	port = &ports[res->portid];
+	state = isrx ? &port->rxq[res->qid].state : &port->txq[res->qid].state;
+	*state = isstart ? RTE_ETH_QUEUE_STATE_STARTED :
+			   RTE_ETH_QUEUE_STATE_STOPPED;
 }
 
 cmdline_parse_token_string_t cmd_config_rxtx_queue_port =
@@ -2676,11 +2685,11 @@ cmd_config_deferred_start_rxtx_queue_parsed(void *parsed_result,
 
 	ison = !strcmp(res->state, "on");
 
-	if (isrx && port->rx_conf[res->qid].rx_deferred_start != ison) {
-		port->rx_conf[res->qid].rx_deferred_start = ison;
+	if (isrx && port->rxq[res->qid].conf.rx_deferred_start != ison) {
+		port->rxq[res->qid].conf.rx_deferred_start = ison;
 		needreconfig = 1;
-	} else if (!isrx && port->tx_conf[res->qid].tx_deferred_start != ison) {
-		port->tx_conf[res->qid].tx_deferred_start = ison;
+	} else if (!isrx && port->txq[res->qid].conf.tx_deferred_start != ison) {
+		port->txq[res->qid].conf.tx_deferred_start = ison;
 		needreconfig = 1;
 	}
 
@@ -2799,7 +2808,7 @@ cmd_setup_rxtx_queue_parsed(
 				     res->qid,
 				     port->nb_rx_desc[res->qid],
 				     socket_id,
-				     &port->rx_conf[res->qid],
+				     &port->rxq[res->qid].conf,
 				     mp);
 		if (ret)
 			printf("Failed to setup RX queue\n");
@@ -2816,7 +2825,7 @@ cmd_setup_rxtx_queue_parsed(
 					     res->qid,
 					     port->nb_tx_desc[res->qid],
 					     socket_id,
-					     &port->tx_conf[res->qid]);
+					     &port->txq[res->qid].conf);
 		if (ret)
 			printf("Failed to setup TX queue\n");
 	}
@@ -4569,7 +4578,7 @@ cmd_config_queue_tx_offloads(struct rte_port *port)
 
 	/* Apply queue tx offloads configuration */
 	for (k = 0; k < port->dev_info.max_tx_queues; k++)
-		port->tx_conf[k].offloads =
+		port->txq[k].conf.offloads =
 			port->dev_conf.txmode.offloads;
 }
 
@@ -15412,7 +15421,7 @@ cmd_rx_offload_get_configuration_parsed(
 
 	nb_rx_queues = dev_info.nb_rx_queues;
 	for (q = 0; q < nb_rx_queues; q++) {
-		queue_offloads = port->rx_conf[q].offloads;
+		queue_offloads = port->rxq[q].conf.offloads;
 		printf("  Queue[%2d] :", q);
 		print_rx_offloads(queue_offloads);
 		printf("\n");
@@ -15531,11 +15540,11 @@ cmd_config_per_port_rx_offload_parsed(void *parsed_result,
 	if (!strcmp(res->on_off, "on")) {
 		port->dev_conf.rxmode.offloads |= single_offload;
 		for (q = 0; q < nb_rx_queues; q++)
-			port->rx_conf[q].offloads |= single_offload;
+			port->rxq[q].conf.offloads |= single_offload;
 	} else {
 		port->dev_conf.rxmode.offloads &= ~single_offload;
 		for (q = 0; q < nb_rx_queues; q++)
-			port->rx_conf[q].offloads &= ~single_offload;
+			port->rxq[q].conf.offloads &= ~single_offload;
 	}
 
 	cmd_reconfig_device_queue(port_id, 1, 1);
@@ -15639,9 +15648,9 @@ cmd_config_per_queue_rx_offload_parsed(void *parsed_result,
 	}
 
 	if (!strcmp(res->on_off, "on"))
-		port->rx_conf[queue_id].offloads |= single_offload;
+		port->rxq[queue_id].conf.offloads |= single_offload;
 	else
-		port->rx_conf[queue_id].offloads &= ~single_offload;
+		port->rxq[queue_id].conf.offloads &= ~single_offload;
 
 	cmd_reconfig_device_queue(port_id, 1, 1);
 }
@@ -15823,7 +15832,7 @@ cmd_tx_offload_get_configuration_parsed(
 
 	nb_tx_queues = dev_info.nb_tx_queues;
 	for (q = 0; q < nb_tx_queues; q++) {
-		queue_offloads = port->tx_conf[q].offloads;
+		queue_offloads = port->txq[q].conf.offloads;
 		printf("  Queue[%2d] :", q);
 		print_tx_offloads(queue_offloads);
 		printf("\n");
@@ -15946,11 +15955,11 @@ cmd_config_per_port_tx_offload_parsed(void *parsed_result,
 	if (!strcmp(res->on_off, "on")) {
 		port->dev_conf.txmode.offloads |= single_offload;
 		for (q = 0; q < nb_tx_queues; q++)
-			port->tx_conf[q].offloads |= single_offload;
+			port->txq[q].conf.offloads |= single_offload;
 	} else {
 		port->dev_conf.txmode.offloads &= ~single_offload;
 		for (q = 0; q < nb_tx_queues; q++)
-			port->tx_conf[q].offloads &= ~single_offload;
+			port->txq[q].conf.offloads &= ~single_offload;
 	}
 
 	cmd_reconfig_device_queue(port_id, 1, 1);
@@ -16057,9 +16066,9 @@ cmd_config_per_queue_tx_offload_parsed(void *parsed_result,
 	}
 
 	if (!strcmp(res->on_off, "on"))
-		port->tx_conf[queue_id].offloads |= single_offload;
+		port->txq[queue_id].conf.offloads |= single_offload;
 	else
-		port->tx_conf[queue_id].offloads &= ~single_offload;
+		port->txq[queue_id].conf.offloads &= ~single_offload;
 
 	cmd_reconfig_device_queue(port_id, 1, 1);
 }
diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
index d6b43baaf4..ee2f560b61 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -2816,8 +2816,8 @@ rxtx_config_display(void)
 	       nb_fwd_lcores, nb_fwd_ports);
 
 	RTE_ETH_FOREACH_DEV(pid) {
-		struct rte_eth_rxconf *rx_conf = &ports[pid].rx_conf[0];
-		struct rte_eth_txconf *tx_conf = &ports[pid].tx_conf[0];
+		struct rte_eth_rxconf *rx_conf = &ports[pid].rxq[0].conf;
+		struct rte_eth_txconf *tx_conf = &ports[pid].txq[0].conf;
 		uint16_t *nb_rx_desc = &ports[pid].nb_rx_desc[0];
 		uint16_t *nb_tx_desc = &ports[pid].nb_tx_desc[0];
 		struct rte_eth_rxq_info rx_qinfo;
diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c
index 282e87092f..8adac07cb6 100644
--- a/app/test-pmd/csumonly.c
+++ b/app/test-pmd/csumonly.c
@@ -1165,9 +1165,22 @@ tunnel_update:
 	get_end_cycles(fs, start_tsc);
 }
 
+static void
+stream_init_checksum_forward(struct fwd_stream *fs)
+{
+	bool rx_stopped, tx_stopped;
+
+	rx_stopped = ports[fs->rx_port].rxq[fs->rx_queue].state ==
+						RTE_ETH_QUEUE_STATE_STOPPED;
+	tx_stopped = ports[fs->tx_port].txq[fs->tx_queue].state ==
+						RTE_ETH_QUEUE_STATE_STOPPED;
+	fs->disabled = rx_stopped || tx_stopped;
+}
+
 struct fwd_engine csum_fwd_engine = {
 	.fwd_mode_name  = "csum",
 	.port_fwd_begin = NULL,
 	.port_fwd_end   = NULL,
+	.stream_init    = stream_init_checksum_forward,
 	.packet_fwd     = pkt_burst_checksum_forward,
 };
diff --git a/app/test-pmd/flowgen.c b/app/test-pmd/flowgen.c
index bb4bf85519..506ff07086 100644
--- a/app/test-pmd/flowgen.c
+++ b/app/test-pmd/flowgen.c
@@ -206,9 +206,22 @@ pkt_burst_flow_gen(struct fwd_stream *fs)
 	get_end_cycles(fs, start_tsc);
 }
 
+static void
+flowgen_stream_init(struct fwd_stream *fs)
+{
+	bool rx_stopped, tx_stopped;
+
+	rx_stopped = ports[fs->rx_port].rxq[fs->rx_queue].state ==
+						RTE_ETH_QUEUE_STATE_STOPPED;
+	tx_stopped = ports[fs->tx_port].txq[fs->tx_queue].state ==
+						RTE_ETH_QUEUE_STATE_STOPPED;
+	fs->disabled = rx_stopped || tx_stopped;
+}
+
 struct fwd_engine flow_gen_engine = {
 	.fwd_mode_name  = "flowgen",
 	.port_fwd_begin = NULL,
 	.port_fwd_end   = NULL,
+	.stream_init    = flowgen_stream_init,
 	.packet_fwd     = pkt_burst_flow_gen,
 };
diff --git a/app/test-pmd/icmpecho.c b/app/test-pmd/icmpecho.c
index a7b568e46e..989609fa5b 100644
--- a/app/test-pmd/icmpecho.c
+++ b/app/test-pmd/icmpecho.c
@@ -513,9 +513,22 @@ reply_to_icmp_echo_rqsts(struct fwd_stream *fs)
 	get_end_cycles(fs, start_tsc);
 }
 
+static void
+icmpecho_stream_init(struct fwd_stream *fs)
+{
+	bool rx_stopped, tx_stopped;
+
+	rx_stopped = ports[fs->rx_port].rxq[fs->rx_queue].state ==
+						RTE_ETH_QUEUE_STATE_STOPPED;
+	tx_stopped = ports[fs->tx_port].txq[fs->tx_queue].state ==
+						RTE_ETH_QUEUE_STATE_STOPPED;
+	fs->disabled = rx_stopped || tx_stopped;
+}
+
 struct fwd_engine icmp_echo_engine = {
 	.fwd_mode_name  = "icmpecho",
 	.port_fwd_begin = NULL,
 	.port_fwd_end   = NULL,
+	.stream_init    = icmpecho_stream_init,
 	.packet_fwd     = reply_to_icmp_echo_rqsts,
 };
diff --git a/app/test-pmd/ieee1588fwd.c b/app/test-pmd/ieee1588fwd.c
index a949d24d5c..5876aafa5b 100644
--- a/app/test-pmd/ieee1588fwd.c
+++ b/app/test-pmd/ieee1588fwd.c
@@ -211,9 +211,22 @@ port_ieee1588_fwd_end(portid_t pi)
 	rte_eth_timesync_disable(pi);
 }
 
+static void
+port_ieee1588_stream_init(struct fwd_stream *fs)
+{
+	bool rx_stopped, tx_stopped;
+
+	rx_stopped = ports[fs->rx_port].rxq[fs->rx_queue].state ==
+						RTE_ETH_QUEUE_STATE_STOPPED;
+	tx_stopped = ports[fs->tx_port].txq[fs->tx_queue].state ==
+						RTE_ETH_QUEUE_STATE_STOPPED;
+	fs->disabled = rx_stopped || tx_stopped;
+}
+
 struct fwd_engine ieee1588_fwd_engine = {
 	.fwd_mode_name  = "ieee1588",
 	.port_fwd_begin = port_ieee1588_fwd_begin,
 	.port_fwd_end   = port_ieee1588_fwd_end,
+	.stream_init    = port_ieee1588_stream_init,
 	.packet_fwd     = ieee1588_packet_fwd,
 };
diff --git a/app/test-pmd/iofwd.c b/app/test-pmd/iofwd.c
index 83d098adcb..de20d645b5 100644
--- a/app/test-pmd/iofwd.c
+++ b/app/test-pmd/iofwd.c
@@ -89,9 +89,22 @@ pkt_burst_io_forward(struct fwd_stream *fs)
 	get_end_cycles(fs, start_tsc);
 }
 
+static void
+stream_init_forward(struct fwd_stream *fs)
+{
+	bool rx_stopped, tx_stopped;
+
+	rx_stopped = ports[fs->rx_port].rxq[fs->rx_queue].state ==
+						RTE_ETH_QUEUE_STATE_STOPPED;
+	tx_stopped = ports[fs->tx_port].txq[fs->tx_queue].state ==
+						RTE_ETH_QUEUE_STATE_STOPPED;
+	fs->disabled = rx_stopped || tx_stopped;
+}
+
 struct fwd_engine io_fwd_engine = {
 	.fwd_mode_name  = "io",
 	.port_fwd_begin = NULL,
 	.port_fwd_end   = NULL,
+	.stream_init    = stream_init_forward,
 	.packet_fwd     = pkt_burst_io_forward,
 };
diff --git a/app/test-pmd/macfwd.c b/app/test-pmd/macfwd.c
index 0568ea794d..f8f55023b8 100644
--- a/app/test-pmd/macfwd.c
+++ b/app/test-pmd/macfwd.c
@@ -120,9 +120,22 @@ pkt_burst_mac_forward(struct fwd_stream *fs)
 	get_end_cycles(fs, start_tsc);
 }
 
+static void
+stream_init_mac_forward(struct fwd_stream *fs)
+{
+	bool rx_stopped, tx_stopped;
+
+	rx_stopped = ports[fs->rx_port].rxq[fs->rx_queue].state ==
+						RTE_ETH_QUEUE_STATE_STOPPED;
+	tx_stopped = ports[fs->tx_port].txq[fs->tx_queue].state ==
+						RTE_ETH_QUEUE_STATE_STOPPED;
+	fs->disabled = rx_stopped || tx_stopped;
+}
+
 struct fwd_engine mac_fwd_engine = {
 	.fwd_mode_name  = "mac",
 	.port_fwd_begin = NULL,
 	.port_fwd_end   = NULL,
+	.stream_init    = stream_init_mac_forward,
 	.packet_fwd     = pkt_burst_mac_forward,
 };
diff --git a/app/test-pmd/macswap.c b/app/test-pmd/macswap.c
index 310bca06af..ba9a148e1c 100644
--- a/app/test-pmd/macswap.c
+++ b/app/test-pmd/macswap.c
@@ -98,9 +98,22 @@ pkt_burst_mac_swap(struct fwd_stream *fs)
 	get_end_cycles(fs, start_tsc);
 }
 
+static void
+stream_init_mac_swap(struct fwd_stream *fs)
+{
+	bool rx_stopped, tx_stopped;
+
+	rx_stopped = ports[fs->rx_port].rxq[fs->rx_queue].state ==
+						RTE_ETH_QUEUE_STATE_STOPPED;
+	tx_stopped = ports[fs->tx_port].txq[fs->tx_queue].state ==
+						RTE_ETH_QUEUE_STATE_STOPPED;
+	fs->disabled = rx_stopped || tx_stopped;
+}
+
 struct fwd_engine mac_swap_engine = {
 	.fwd_mode_name  = "macswap",
 	.port_fwd_begin = NULL,
 	.port_fwd_end   = NULL,
+	.stream_init    = stream_init_mac_swap,
 	.packet_fwd     = pkt_burst_mac_swap,
 };
diff --git a/app/test-pmd/noisy_vnf.c b/app/test-pmd/noisy_vnf.c
index e4434bea95..a92e810190 100644
--- a/app/test-pmd/noisy_vnf.c
+++ b/app/test-pmd/noisy_vnf.c
@@ -277,9 +277,22 @@ noisy_fwd_begin(portid_t pi)
 	return 0;
 }
 
+static void
+stream_init_noisy_vnf(struct fwd_stream *fs)
+{
+	bool rx_stopped, tx_stopped;
+
+	rx_stopped = ports[fs->rx_port].rxq[fs->rx_queue].state ==
+						RTE_ETH_QUEUE_STATE_STOPPED;
+	tx_stopped = ports[fs->tx_port].txq[fs->tx_queue].state ==
+						RTE_ETH_QUEUE_STATE_STOPPED;
+	fs->disabled = rx_stopped || tx_stopped;
+}
+
 struct fwd_engine noisy_vnf_engine = {
 	.fwd_mode_name  = "noisy",
 	.port_fwd_begin = noisy_fwd_begin,
 	.port_fwd_end   = noisy_fwd_end,
+	.stream_init    = stream_init_noisy_vnf,
 	.packet_fwd     = pkt_burst_noisy_vnf,
 };
diff --git a/app/test-pmd/rxonly.c b/app/test-pmd/rxonly.c
index c78fc4609a..83d0dcf670 100644
--- a/app/test-pmd/rxonly.c
+++ b/app/test-pmd/rxonly.c
@@ -69,9 +69,17 @@ pkt_burst_receive(struct fwd_stream *fs)
 	get_end_cycles(fs, start_tsc);
 }
 
+static void
+stream_init_receive(struct fwd_stream *fs)
+{
+	fs->disabled = ports[fs->rx_port].rxq[fs->rx_queue].state ==
+						RTE_ETH_QUEUE_STATE_STOPPED;
+}
+
 struct fwd_engine rx_only_engine = {
 	.fwd_mode_name  = "rxonly",
 	.port_fwd_begin = NULL,
 	.port_fwd_end   = NULL,
+	.stream_init    = stream_init_receive,
 	.packet_fwd     = pkt_burst_receive,
 };
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index 5da22fab57..0e553d19b9 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -1429,10 +1429,10 @@ init_config_port_offloads(portid_t pid, uint32_t socket_id)
 
 	/* Apply Rx offloads configuration */
 	for (i = 0; i < port->dev_info.max_rx_queues; i++)
-		port->rx_conf[i].offloads = port->dev_conf.rxmode.offloads;
+		port->rxq[i].conf.offloads = port->dev_conf.rxmode.offloads;
 	/* Apply Tx offloads configuration */
 	for (i = 0; i < port->dev_info.max_tx_queues; i++)
-		port->tx_conf[i].offloads = port->dev_conf.txmode.offloads;
+		port->txq[i].conf.offloads = port->dev_conf.txmode.offloads;
 
 	/* set flag to initialize port/queue */
 	port->need_reconfig = 1;
@@ -1600,7 +1600,6 @@ reconfig(portid_t new_port_id, unsigned socket_id)
 	init_port_config();
 }
 
-
 int
 init_fwd_streams(void)
 {
@@ -1990,6 +1989,12 @@ flush_fwd_rx_queues(void)
 		for (rxp = 0; rxp < cur_fwd_config.nb_fwd_ports; rxp++) {
 			for (rxq = 0; rxq < nb_rxq; rxq++) {
 				port_id = fwd_ports_ids[rxp];
+
+				/* Polling stopped queues is prohibited. */
+				if (ports[port_id].rxq[rxq].state ==
+				    RTE_ETH_QUEUE_STATE_STOPPED)
+					continue;
+
 				/**
 				* testpmd can stuck in the below do while loop
 				* if rte_eth_rx_burst() always returns nonzero
@@ -2035,7 +2040,8 @@ run_pkt_fwd_on_lcore(struct fwd_lcore *fc, packet_fwd_t pkt_fwd)
 	nb_fs = fc->stream_nb;
 	do {
 		for (sm_id = 0; sm_id < nb_fs; sm_id++)
-			(*pkt_fwd)(fsm[sm_id]);
+			if (!fsm[sm_id]->disabled)
+				(*pkt_fwd)(fsm[sm_id]);
 #ifdef RTE_LIB_BITRATESTATS
 		if (bitrate_enabled != 0 &&
 				bitrate_lcore_id == rte_lcore_id()) {
@@ -2116,6 +2122,7 @@ start_packet_forwarding(int with_tx_first)
 {
 	port_fwd_begin_t port_fwd_begin;
 	port_fwd_end_t  port_fwd_end;
+	stream_init_t stream_init = cur_fwd_eng->stream_init;
 	unsigned int i;
 
 	if (strcmp(cur_fwd_eng->fwd_mode_name, "rxonly") == 0 && !nb_rxq)
@@ -2142,6 +2149,10 @@ start_packet_forwarding(int with_tx_first)
 
 	fwd_config_setup();
 
+	if (stream_init != NULL)
+		for (i = 0; i < cur_fwd_config.nb_fwd_streams; i++)
+			stream_init(fwd_streams[i]);
+
 	port_fwd_begin = cur_fwd_config.fwd_eng->port_fwd_begin;
 	if (port_fwd_begin != NULL) {
 		for (i = 0; i < cur_fwd_config.nb_fwd_ports; i++) {
@@ -2404,7 +2415,7 @@ rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
 		ret = rte_eth_rx_queue_setup(port_id, rx_queue_id,
 					     nb_rx_desc, socket_id,
 					     rx_conf, mp);
-		return ret;
+		goto exit;
 	}
 	for (i = 0; i < rx_pkt_nb_segs; i++) {
 		struct rte_eth_rxseg_split *rx_seg = &rx_useg[i].split;
@@ -2429,6 +2440,10 @@ rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
 				    socket_id, rx_conf, NULL);
 	rx_conf->rx_seg = NULL;
 	rx_conf->rx_nseg = 0;
+exit:
+	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;
 }
 
@@ -2508,20 +2523,28 @@ 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,
 						port->nb_tx_desc[qi],
 						txring_numa[pi],
-						&(port->tx_conf[qi]));
+						&(port->txq[qi].conf));
 				else
 					diag = rte_eth_tx_queue_setup(pi, qi,
 						port->nb_tx_desc[qi],
 						port->socket_id,
-						&(port->tx_conf[qi]));
+						&(port->txq[qi].conf));
 
-				if (diag == 0)
+				if (diag == 0) {
+					port->txq[qi].state =
+						conf->tx_deferred_start ?
+						RTE_ETH_QUEUE_STATE_STOPPED :
+						RTE_ETH_QUEUE_STATE_STARTED;
 					continue;
+				}
 
 				/* Fail to setup tx queue, return */
 				if (rte_atomic16_cmpset(&(port->port_status),
@@ -2553,7 +2576,7 @@ start_port(portid_t pid)
 					diag = rx_queue_setup(pi, qi,
 					     port->nb_rx_desc[qi],
 					     rxring_numa[pi],
-					     &(port->rx_conf[qi]),
+					     &(port->rxq[qi].conf),
 					     mp);
 				} else {
 					struct rte_mempool *mp =
@@ -2569,7 +2592,7 @@ start_port(portid_t pid)
 					diag = rx_queue_setup(pi, qi,
 					     port->nb_rx_desc[qi],
 					     port->socket_id,
-					     &(port->rx_conf[qi]),
+					     &(port->rxq[qi].conf),
 					     mp);
 				}
 				if (diag == 0)
@@ -3293,51 +3316,51 @@ rxtx_port_config(struct rte_port *port)
 	uint64_t offloads;
 
 	for (qid = 0; qid < nb_rxq; qid++) {
-		offloads = port->rx_conf[qid].offloads;
-		port->rx_conf[qid] = port->dev_info.default_rxconf;
+		offloads = port->rxq[qid].conf.offloads;
+		port->rxq[qid].conf = port->dev_info.default_rxconf;
 		if (offloads != 0)
-			port->rx_conf[qid].offloads = offloads;
+			port->rxq[qid].conf.offloads = offloads;
 
 		/* Check if any Rx parameters have been passed */
 		if (rx_pthresh != RTE_PMD_PARAM_UNSET)
-			port->rx_conf[qid].rx_thresh.pthresh = rx_pthresh;
+			port->rxq[qid].conf.rx_thresh.pthresh = rx_pthresh;
 
 		if (rx_hthresh != RTE_PMD_PARAM_UNSET)
-			port->rx_conf[qid].rx_thresh.hthresh = rx_hthresh;
+			port->rxq[qid].conf.rx_thresh.hthresh = rx_hthresh;
 
 		if (rx_wthresh != RTE_PMD_PARAM_UNSET)
-			port->rx_conf[qid].rx_thresh.wthresh = rx_wthresh;
+			port->rxq[qid].conf.rx_thresh.wthresh = rx_wthresh;
 
 		if (rx_free_thresh != RTE_PMD_PARAM_UNSET)
-			port->rx_conf[qid].rx_free_thresh = rx_free_thresh;
+			port->rxq[qid].conf.rx_free_thresh = rx_free_thresh;
 
 		if (rx_drop_en != RTE_PMD_PARAM_UNSET)
-			port->rx_conf[qid].rx_drop_en = rx_drop_en;
+			port->rxq[qid].conf.rx_drop_en = rx_drop_en;
 
 		port->nb_rx_desc[qid] = nb_rxd;
 	}
 
 	for (qid = 0; qid < nb_txq; qid++) {
-		offloads = port->tx_conf[qid].offloads;
-		port->tx_conf[qid] = port->dev_info.default_txconf;
+		offloads = port->txq[qid].conf.offloads;
+		port->txq[qid].conf = port->dev_info.default_txconf;
 		if (offloads != 0)
-			port->tx_conf[qid].offloads = offloads;
+			port->txq[qid].conf.offloads = offloads;
 
 		/* Check if any Tx parameters have been passed */
 		if (tx_pthresh != RTE_PMD_PARAM_UNSET)
-			port->tx_conf[qid].tx_thresh.pthresh = tx_pthresh;
+			port->txq[qid].conf.tx_thresh.pthresh = tx_pthresh;
 
 		if (tx_hthresh != RTE_PMD_PARAM_UNSET)
-			port->tx_conf[qid].tx_thresh.hthresh = tx_hthresh;
+			port->txq[qid].conf.tx_thresh.hthresh = tx_hthresh;
 
 		if (tx_wthresh != RTE_PMD_PARAM_UNSET)
-			port->tx_conf[qid].tx_thresh.wthresh = tx_wthresh;
+			port->txq[qid].conf.tx_thresh.wthresh = tx_wthresh;
 
 		if (tx_rs_thresh != RTE_PMD_PARAM_UNSET)
-			port->tx_conf[qid].tx_rs_thresh = tx_rs_thresh;
+			port->txq[qid].conf.tx_rs_thresh = tx_rs_thresh;
 
 		if (tx_free_thresh != RTE_PMD_PARAM_UNSET)
-			port->tx_conf[qid].tx_free_thresh = tx_free_thresh;
+			port->txq[qid].conf.tx_free_thresh = tx_free_thresh;
 
 		port->nb_tx_desc[qid] = nb_txd;
 	}
@@ -3396,9 +3419,9 @@ update_jumbo_frame_offload(portid_t portid)
 		/* Apply JUMBO_FRAME offload configuration to Rx queue(s) */
 		for (qid = 0; qid < port->dev_info.nb_rx_queues; qid++) {
 			if (on)
-				port->rx_conf[qid].offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
+				port->rxq[qid].conf.offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
 			else
-				port->rx_conf[qid].offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
+				port->rxq[qid].conf.offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
 		}
 	}
 
@@ -3610,7 +3633,7 @@ init_port_dcb_config(portid_t pid,
 	if (port_conf.rxmode.mq_mode == ETH_MQ_RX_VMDQ_DCB) {
 		port_conf.rxmode.offloads &= ~DEV_RX_OFFLOAD_RSS_HASH;
 		for (i = 0; i < nb_rxq; i++)
-			rte_port->rx_conf[i].offloads &=
+			rte_port->rxq[i].conf.offloads &=
 				~DEV_RX_OFFLOAD_RSS_HASH;
 	}
 
diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
index 2a6312217d..5fa898eb96 100644
--- a/app/test-pmd/testpmd.h
+++ b/app/test-pmd/testpmd.h
@@ -128,6 +128,7 @@ struct fwd_stream {
 	portid_t   tx_port;   /**< forwarding port of received packets */
 	queueid_t  tx_queue;  /**< TX queue to send forwarded packets */
 	streamid_t peer_addr; /**< index of peer ethernet address of packets */
+	bool       disabled;  /**< the stream is disabled and should not run */
 
 	unsigned int retry_enabled;
 
@@ -195,6 +196,18 @@ struct tunnel_ops {
 	uint32_t items:1;
 };
 
+/** RX queue configuration and state. */
+struct port_rxqueue {
+	struct rte_eth_rxconf conf;
+	uint8_t state; /**< RTE_ETH_QUEUE_STATE_* value. */
+};
+
+/** TX queue configuration and state. */
+struct port_txqueue {
+	struct rte_eth_txconf conf;
+	uint8_t state; /**< RTE_ETH_QUEUE_STATE_* value. */
+};
+
 /**
  * The data structure associated with each port.
  */
@@ -217,8 +230,8 @@ struct rte_port {
 	uint8_t                 dcb_flag;   /**< enable dcb */
 	uint16_t                nb_rx_desc[RTE_MAX_QUEUES_PER_PORT+1]; /**< per queue rx desc number */
 	uint16_t                nb_tx_desc[RTE_MAX_QUEUES_PER_PORT+1]; /**< per queue tx desc number */
-	struct rte_eth_rxconf   rx_conf[RTE_MAX_QUEUES_PER_PORT+1]; /**< per queue rx configuration */
-	struct rte_eth_txconf   tx_conf[RTE_MAX_QUEUES_PER_PORT+1]; /**< per queue tx configuration */
+	struct port_rxqueue     rxq[RTE_MAX_QUEUES_PER_PORT+1]; /**< per queue Rx config and state */
+	struct port_txqueue     txq[RTE_MAX_QUEUES_PER_PORT+1]; /**< per queue Tx config and state */
 	struct rte_ether_addr   *mc_addr_pool; /**< pool of multicast addrs */
 	uint32_t                mc_addr_nb; /**< nb. of addr. in mc_addr_pool */
 	uint8_t                 slave_flag; /**< bonding slave port */
@@ -271,12 +284,14 @@ struct fwd_lcore {
  */
 typedef int (*port_fwd_begin_t)(portid_t pi);
 typedef void (*port_fwd_end_t)(portid_t pi);
+typedef void (*stream_init_t)(struct fwd_stream *fs);
 typedef void (*packet_fwd_t)(struct fwd_stream *fs);
 
 struct fwd_engine {
 	const char       *fwd_mode_name; /**< Forwarding mode name. */
 	port_fwd_begin_t port_fwd_begin; /**< NULL if nothing special to do. */
 	port_fwd_end_t   port_fwd_end;   /**< NULL if nothing special to do. */
+	stream_init_t    stream_init;    /**< NULL if nothing special to do. */
 	packet_fwd_t     packet_fwd;     /**< Mandatory. */
 };
 
diff --git a/app/test-pmd/txonly.c b/app/test-pmd/txonly.c
index 9f5087d215..a7cd3bff0d 100644
--- a/app/test-pmd/txonly.c
+++ b/app/test-pmd/txonly.c
@@ -493,9 +493,17 @@ tx_only_begin(portid_t pi)
 	return 0;
 }
 
+static void
+tx_only_stream_init(struct fwd_stream *fs)
+{
+	fs->disabled = ports[fs->tx_port].txq[fs->tx_queue].state ==
+						RTE_ETH_QUEUE_STATE_STOPPED;
+}
+
 struct fwd_engine tx_only_engine = {
 	.fwd_mode_name  = "txonly",
 	.port_fwd_begin = tx_only_begin,
 	.port_fwd_end   = NULL,
+	.stream_init    = tx_only_stream_init,
 	.packet_fwd     = pkt_burst_transmit,
 };
diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
index dd7eef908d..5e8331da1c 100644
--- a/lib/librte_ethdev/rte_ethdev.h
+++ b/lib/librte_ethdev/rte_ethdev.h
@@ -1561,6 +1561,13 @@ struct rte_eth_dev_info {
 	void *reserved_ptrs[2];   /**< Reserved for future fields */
 };
 
+/**
+ * RX/TX queue states
+ */
+#define RTE_ETH_QUEUE_STATE_STOPPED 0
+#define RTE_ETH_QUEUE_STATE_STARTED 1
+#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
+
 /**
  * Ethernet device RX queue information structure.
  * Used to retrieve information about configured queue.
diff --git a/lib/librte_ethdev/rte_ethdev_driver.h b/lib/librte_ethdev/rte_ethdev_driver.h
index afee4b8b80..6764ffb854 100644
--- a/lib/librte_ethdev/rte_ethdev_driver.h
+++ b/lib/librte_ethdev/rte_ethdev_driver.h
@@ -923,13 +923,6 @@ struct eth_dev_ops {
 	/**< Disconnect the hairpin queues of a pair from each other. */
 };
 
-/**
- * RX/TX queue states
- */
-#define RTE_ETH_QUEUE_STATE_STOPPED 0
-#define RTE_ETH_QUEUE_STATE_STARTED 1
-#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
-
 /**
  * @internal
  * Check if the selected Rx queue is hairpin queue.
-- 
2.35.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2022-06-21 15:37:52.871831919 +0800
+++ 0080-app-testpmd-do-not-poll-stopped-queues.patch	2022-06-21 15:37:49.164451701 +0800
@@ -1 +1 @@
-From 3c4426db54fc24e7a97f2b4000a0a4f30897a104 Mon Sep 17 00:00:00 2001
+From bdf2967cd5c84e5df7691a3c87a66cf5529f6134 Mon Sep 17 00:00:00 2001
@@ -4,0 +5,3 @@
+Cc: Xueming Li <xuemingl@nvidia.com>
+
+[ upstream commit 3c4426db54fc24e7a97f2b4000a0a4f30897a104 ]
@@ -19 +21,0 @@
-Cc: stable@dpdk.org
@@ -24,17 +26,18 @@
- app/test-pmd/5tswap.c         | 13 ++++++
- app/test-pmd/cmdline.c        | 45 ++++++++++--------
- app/test-pmd/config.c         |  8 ++--
- app/test-pmd/csumonly.c       | 13 ++++++
- app/test-pmd/flowgen.c        | 13 ++++++
- app/test-pmd/icmpecho.c       | 13 ++++++
- app/test-pmd/ieee1588fwd.c    | 13 ++++++
- app/test-pmd/iofwd.c          | 13 ++++++
- app/test-pmd/macfwd.c         | 13 ++++++
- app/test-pmd/macswap.c        | 13 ++++++
- app/test-pmd/noisy_vnf.c      | 13 ++++++
- app/test-pmd/rxonly.c         |  8 ++++
- app/test-pmd/shared_rxq_fwd.c |  8 ++++
- app/test-pmd/testpmd.c        | 87 ++++++++++++++++++++++-------------
- app/test-pmd/testpmd.h        | 19 +++++++-
- app/test-pmd/txonly.c         |  8 ++++
- 16 files changed, 244 insertions(+), 56 deletions(-)
+ app/test-pmd/5tswap.c                 | 13 +++++
+ app/test-pmd/cmdline.c                | 45 +++++++++------
+ app/test-pmd/config.c                 |  4 +-
+ app/test-pmd/csumonly.c               | 13 +++++
+ app/test-pmd/flowgen.c                | 13 +++++
+ app/test-pmd/icmpecho.c               | 13 +++++
+ app/test-pmd/ieee1588fwd.c            | 13 +++++
+ app/test-pmd/iofwd.c                  | 13 +++++
+ app/test-pmd/macfwd.c                 | 13 +++++
+ app/test-pmd/macswap.c                | 13 +++++
+ app/test-pmd/noisy_vnf.c              | 13 +++++
+ app/test-pmd/rxonly.c                 |  8 +++
+ app/test-pmd/testpmd.c                | 81 +++++++++++++++++----------
+ app/test-pmd/testpmd.h                | 19 ++++++-
+ app/test-pmd/txonly.c                 |  8 +++
+ lib/librte_ethdev/rte_ethdev.h        |  7 +++
+ lib/librte_ethdev/rte_ethdev_driver.h |  7 ---
+ 17 files changed, 238 insertions(+), 58 deletions(-)
@@ -43 +46 @@
-index 629d3e0d31..f041a5e1d5 100644
+index e8cef9623b..090798d68b 100644
@@ -70 +73 @@
-index 1e5b294ab3..d8900a0d07 100644
+index 481821b40a..b868081770 100644
@@ -73 +76 @@
-@@ -2654,8 +2654,10 @@ cmd_config_rxtx_queue_parsed(void *parsed_result,
+@@ -2557,8 +2557,10 @@ cmd_config_rxtx_queue_parsed(void *parsed_result,
@@ -84 +87 @@
-@@ -2703,8 +2705,15 @@ cmd_config_rxtx_queue_parsed(void *parsed_result,
+@@ -2606,8 +2608,15 @@ cmd_config_rxtx_queue_parsed(void *parsed_result,
@@ -101 +104 @@
-@@ -2773,11 +2782,11 @@ cmd_config_deferred_start_rxtx_queue_parsed(void *parsed_result,
+@@ -2676,11 +2685,11 @@ cmd_config_deferred_start_rxtx_queue_parsed(void *parsed_result,
@@ -117 +120 @@
-@@ -2895,7 +2904,7 @@ cmd_setup_rxtx_queue_parsed(
+@@ -2799,7 +2808,7 @@ cmd_setup_rxtx_queue_parsed(
@@ -125,2 +128,2 @@
- 			fprintf(stderr, "Failed to setup RX queue\n");
-@@ -2913,7 +2922,7 @@ cmd_setup_rxtx_queue_parsed(
+ 			printf("Failed to setup RX queue\n");
+@@ -2816,7 +2825,7 @@ cmd_setup_rxtx_queue_parsed(
@@ -133 +136 @@
- 			fprintf(stderr, "Failed to setup TX queue\n");
+ 			printf("Failed to setup TX queue\n");
@@ -135 +138 @@
-@@ -4689,7 +4698,7 @@ cmd_config_queue_tx_offloads(struct rte_port *port)
+@@ -4569,7 +4578,7 @@ cmd_config_queue_tx_offloads(struct rte_port *port)
@@ -144 +147 @@
-@@ -16201,7 +16210,7 @@ cmd_rx_offload_get_configuration_parsed(
+@@ -15412,7 +15421,7 @@ cmd_rx_offload_get_configuration_parsed(
@@ -153 +156 @@
-@@ -16321,11 +16330,11 @@ cmd_config_per_port_rx_offload_parsed(void *parsed_result,
+@@ -15531,11 +15540,11 @@ cmd_config_per_port_rx_offload_parsed(void *parsed_result,
@@ -167 +170 @@
-@@ -16431,9 +16440,9 @@ cmd_config_per_queue_rx_offload_parsed(void *parsed_result,
+@@ -15639,9 +15648,9 @@ cmd_config_per_queue_rx_offload_parsed(void *parsed_result,
@@ -179 +182 @@
-@@ -16620,7 +16629,7 @@ cmd_tx_offload_get_configuration_parsed(
+@@ -15823,7 +15832,7 @@ cmd_tx_offload_get_configuration_parsed(
@@ -188 +191 @@
-@@ -16744,11 +16753,11 @@ cmd_config_per_port_tx_offload_parsed(void *parsed_result,
+@@ -15946,11 +15955,11 @@ cmd_config_per_port_tx_offload_parsed(void *parsed_result,
@@ -202 +205 @@
-@@ -16857,9 +16866,9 @@ cmd_config_per_queue_tx_offload_parsed(void *parsed_result,
+@@ -16057,9 +16066,9 @@ cmd_config_per_queue_tx_offload_parsed(void *parsed_result,
@@ -215 +218 @@
-index dc9ef1e868..72d2606d19 100644
+index d6b43baaf4..ee2f560b61 100644
@@ -218 +221 @@
-@@ -3643,8 +3643,8 @@ rxtx_config_display(void)
+@@ -2816,8 +2816,8 @@ rxtx_config_display(void)
@@ -229,18 +231,0 @@
-@@ -3902,7 +3902,7 @@ fwd_stream_on_other_lcores(uint16_t domain_id, lcoreid_t src_lc,
- 			fs = fwd_streams[sm_id];
- 			port = &ports[fs->rx_port];
- 			dev_info = &port->dev_info;
--			rxq_conf = &port->rx_conf[fs->rx_queue];
-+			rxq_conf = &port->rxq[fs->rx_queue].conf;
- 			if ((dev_info->dev_capa & RTE_ETH_DEV_CAPA_RXQ_SHARE)
- 			    == 0 || rxq_conf->share_group == 0)
- 				/* Not shared rxq. */
-@@ -3962,7 +3962,7 @@ pkt_fwd_shared_rxq_check(void)
- 			fs->lcore = fwd_lcores[lc_id];
- 			port = &ports[fs->rx_port];
- 			dev_info = &port->dev_info;
--			rxq_conf = &port->rx_conf[fs->rx_queue];
-+			rxq_conf = &port->rxq[fs->rx_queue].conf;
- 			if ((dev_info->dev_capa & RTE_ETH_DEV_CAPA_RXQ_SHARE)
- 			    == 0 || rxq_conf->share_group == 0)
- 				/* Not shared rxq. */
@@ -248 +233 @@
-index 05763a71e8..7df201e047 100644
+index 282e87092f..8adac07cb6 100644
@@ -251 +236 @@
-@@ -1203,9 +1203,22 @@ tunnel_update:
+@@ -1165,9 +1165,22 @@ tunnel_update:
@@ -275 +260 @@
-index 9ceef3b54a..1e01120ae9 100644
+index bb4bf85519..506ff07086 100644
@@ -278,2 +263,2 @@
-@@ -207,9 +207,22 @@ flowgen_begin(portid_t pi)
- 	return 0;
+@@ -206,9 +206,22 @@ pkt_burst_flow_gen(struct fwd_stream *fs)
+ 	get_end_cycles(fs, start_tsc);
@@ -296 +281 @@
- 	.port_fwd_begin = flowgen_begin,
+ 	.port_fwd_begin = NULL,
@@ -302 +287 @@
-index 99c94cb282..066f2a3ab7 100644
+index a7b568e46e..989609fa5b 100644
@@ -305 +290 @@
-@@ -512,9 +512,22 @@ reply_to_icmp_echo_rqsts(struct fwd_stream *fs)
+@@ -513,9 +513,22 @@ reply_to_icmp_echo_rqsts(struct fwd_stream *fs)
@@ -329 +314 @@
-index 9ff817aa68..fc4e2d014c 100644
+index a949d24d5c..5876aafa5b 100644
@@ -356 +341 @@
-index 19cd920f70..71849aaf96 100644
+index 83d098adcb..de20d645b5 100644
@@ -359 +344 @@
-@@ -88,9 +88,22 @@ pkt_burst_io_forward(struct fwd_stream *fs)
+@@ -89,9 +89,22 @@ pkt_burst_io_forward(struct fwd_stream *fs)
@@ -383 +368 @@
-index 812a0c721f..79c9241d00 100644
+index 0568ea794d..f8f55023b8 100644
@@ -386 +371 @@
-@@ -119,9 +119,22 @@ pkt_burst_mac_forward(struct fwd_stream *fs)
+@@ -120,9 +120,22 @@ pkt_burst_mac_forward(struct fwd_stream *fs)
@@ -410 +395 @@
-index 4627ff83e9..acb0fd7fb4 100644
+index 310bca06af..ba9a148e1c 100644
@@ -413 +398 @@
-@@ -97,9 +97,22 @@ pkt_burst_mac_swap(struct fwd_stream *fs)
+@@ -98,9 +98,22 @@ pkt_burst_mac_swap(struct fwd_stream *fs)
@@ -464 +449 @@
-index d1a579d8d8..04457010f4 100644
+index c78fc4609a..83d0dcf670 100644
@@ -467 +452 @@
-@@ -68,9 +68,17 @@ pkt_burst_receive(struct fwd_stream *fs)
+@@ -69,9 +69,17 @@ pkt_burst_receive(struct fwd_stream *fs)
@@ -485,22 +469,0 @@
-diff --git a/app/test-pmd/shared_rxq_fwd.c b/app/test-pmd/shared_rxq_fwd.c
-index da54a383fd..2e9047804b 100644
---- a/app/test-pmd/shared_rxq_fwd.c
-+++ b/app/test-pmd/shared_rxq_fwd.c
-@@ -107,9 +107,17 @@ shared_rxq_fwd(struct fwd_stream *fs)
- 	get_end_cycles(fs, start_tsc);
- }
- 
-+static void
-+shared_rxq_stream_init(struct fwd_stream *fs)
-+{
-+	fs->disabled = ports[fs->rx_port].rxq[fs->rx_queue].state ==
-+						RTE_ETH_QUEUE_STATE_STOPPED;
-+}
-+
- struct fwd_engine shared_rxq_engine = {
- 	.fwd_mode_name  = "shared_rxq",
- 	.port_fwd_begin = NULL,
- 	.port_fwd_end   = NULL,
-+	.stream_init    = shared_rxq_stream_init,
- 	.packet_fwd     = shared_rxq_fwd,
- };
@@ -508 +471 @@
-index 5b742911a8..99f2a31bb8 100644
+index 5da22fab57..0e553d19b9 100644
@@ -511 +474 @@
-@@ -1638,10 +1638,10 @@ init_config_port_offloads(portid_t pid, uint32_t socket_id)
+@@ -1429,10 +1429,10 @@ init_config_port_offloads(portid_t pid, uint32_t socket_id)
@@ -522,3 +485,3 @@
- 	if (eth_link_speed)
- 		port->dev_conf.link_speeds = eth_link_speed;
-@@ -1828,7 +1828,6 @@ reconfig(portid_t new_port_id, unsigned socket_id)
+ 	/* set flag to initialize port/queue */
+ 	port->need_reconfig = 1;
+@@ -1600,7 +1600,6 @@ reconfig(portid_t new_port_id, unsigned socket_id)
@@ -532 +495 @@
-@@ -2233,6 +2232,12 @@ flush_fwd_rx_queues(void)
+@@ -1990,6 +1989,12 @@ flush_fwd_rx_queues(void)
@@ -545 +508 @@
-@@ -2278,7 +2283,8 @@ run_pkt_fwd_on_lcore(struct fwd_lcore *fc, packet_fwd_t pkt_fwd)
+@@ -2035,7 +2040,8 @@ run_pkt_fwd_on_lcore(struct fwd_lcore *fc, packet_fwd_t pkt_fwd)
@@ -555 +518 @@
-@@ -2360,6 +2366,7 @@ start_packet_forwarding(int with_tx_first)
+@@ -2116,6 +2122,7 @@ start_packet_forwarding(int with_tx_first)
@@ -563,3 +526,3 @@
-@@ -2390,6 +2397,10 @@ start_packet_forwarding(int with_tx_first)
- 	if (!pkt_fwd_shared_rxq_check())
- 		return;
+@@ -2142,6 +2149,10 @@ start_packet_forwarding(int with_tx_first)
+ 
+ 	fwd_config_setup();
@@ -574 +537 @@
-@@ -2651,7 +2662,7 @@ rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
+@@ -2404,7 +2415,7 @@ rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
@@ -583 +546 @@
-@@ -2676,6 +2687,10 @@ rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
+@@ -2429,6 +2440,10 @@ rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
@@ -594,19 +557 @@
-@@ -2878,7 +2893,7 @@ start_port(portid_t pid)
- 				for (k = 0;
- 				     k < port->dev_info.max_rx_queues;
- 				     k++)
--					port->rx_conf[k].offloads |=
-+					port->rxq[k].conf.offloads |=
- 						dev_conf.rxmode.offloads;
- 			}
- 			/* Apply Tx offloads configuration */
-@@ -2889,7 +2904,7 @@ start_port(portid_t pid)
- 				for (k = 0;
- 				     k < port->dev_info.max_tx_queues;
- 				     k++)
--					port->tx_conf[k].offloads |=
-+					port->txq[k].conf.offloads |=
- 						dev_conf.txmode.offloads;
- 			}
- 		}
-@@ -2897,20 +2912,28 @@ start_port(portid_t pid)
+@@ -2508,20 +2523,28 @@ start_port(portid_t pid)
@@ -643,2 +588,2 @@
- 				if (port->port_status == RTE_PORT_HANDLING)
-@@ -2943,7 +2966,7 @@ start_port(portid_t pid)
+ 				if (rte_atomic16_cmpset(&(port->port_status),
+@@ -2553,7 +2576,7 @@ start_port(portid_t pid)
@@ -653 +598 @@
-@@ -2958,7 +2981,7 @@ start_port(portid_t pid)
+@@ -2569,7 +2592,7 @@ start_port(portid_t pid)
@@ -662,2 +607,2 @@
-@@ -3734,59 +3757,59 @@ rxtx_port_config(portid_t pid)
- 	struct rte_port *port = &ports[pid];
+@@ -3293,51 +3316,51 @@ rxtx_port_config(struct rte_port *port)
+ 	uint64_t offloads;
@@ -670,10 +614,0 @@
- 
- 		if (rxq_share > 0 &&
- 		    (port->dev_info.dev_capa & RTE_ETH_DEV_CAPA_RXQ_SHARE)) {
- 			/* Non-zero share group to enable RxQ share. */
--			port->rx_conf[qid].share_group = pid / rxq_share + 1;
--			port->rx_conf[qid].share_qid = qid; /* Equal mapping. */
-+			port->rxq[qid].conf.share_group = pid / rxq_share + 1;
-+			port->rxq[qid].conf.share_qid = qid; /* Equal mapping. */
- 		}
- 
@@ -740,8 +675,9 @@
-@@ -3867,7 +3890,7 @@ init_port_config(void)
- 				for (i = 0;
- 				     i < port->dev_info.nb_rx_queues;
- 				     i++)
--					port->rx_conf[i].offloads &=
-+					port->rxq[i].conf.offloads &=
- 						~RTE_ETH_RX_OFFLOAD_RSS_HASH;
- 			}
+@@ -3396,9 +3419,9 @@ update_jumbo_frame_offload(portid_t portid)
+ 		/* Apply JUMBO_FRAME offload configuration to Rx queue(s) */
+ 		for (qid = 0; qid < port->dev_info.nb_rx_queues; qid++) {
+ 			if (on)
+-				port->rx_conf[qid].offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
++				port->rxq[qid].conf.offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
+ 			else
+-				port->rx_conf[qid].offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
++				port->rxq[qid].conf.offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
@@ -749,3 +685,5 @@
-@@ -4041,7 +4064,7 @@ init_port_dcb_config(portid_t pid,
- 	if (port_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_VMDQ_DCB) {
- 		port_conf.rxmode.offloads &= ~RTE_ETH_RX_OFFLOAD_RSS_HASH;
+ 	}
+ 
+@@ -3610,7 +3633,7 @@ init_port_dcb_config(portid_t pid,
+ 	if (port_conf.rxmode.mq_mode == ETH_MQ_RX_VMDQ_DCB) {
+ 		port_conf.rxmode.offloads &= ~DEV_RX_OFFLOAD_RSS_HASH;
@@ -755 +693 @@
- 				~RTE_ETH_RX_OFFLOAD_RSS_HASH;
+ 				~DEV_RX_OFFLOAD_RSS_HASH;
@@ -759 +697 @@
-index 8ee682b362..63e19c9aef 100644
+index 2a6312217d..5fa898eb96 100644
@@ -762 +700 @@
-@@ -136,6 +136,7 @@ struct fwd_stream {
+@@ -128,6 +128,7 @@ struct fwd_stream {
@@ -770,2 +708,2 @@
-@@ -240,6 +241,18 @@ struct xstat_display_info {
- 	bool	 allocated;
+@@ -195,6 +196,18 @@ struct tunnel_ops {
+ 	uint32_t items:1;
@@ -789 +727 @@
-@@ -262,8 +275,8 @@ struct rte_port {
+@@ -217,8 +230,8 @@ struct rte_port {
@@ -799,2 +737,2 @@
- 	queueid_t               queue_nb; /**< nb. of queues for flow rules */
-@@ -326,12 +339,14 @@ struct fwd_lcore {
+ 	uint8_t                 slave_flag; /**< bonding slave port */
+@@ -271,12 +284,14 @@ struct fwd_lcore {
@@ -816 +754 @@
-index fc039a622c..e1bc78b73d 100644
+index 9f5087d215..a7cd3bff0d 100644
@@ -819 +757 @@
-@@ -504,9 +504,17 @@ tx_only_begin(portid_t pi)
+@@ -493,9 +493,17 @@ tx_only_begin(portid_t pi)
@@ -836,0 +775,36 @@
+diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
+index dd7eef908d..5e8331da1c 100644
+--- a/lib/librte_ethdev/rte_ethdev.h
++++ b/lib/librte_ethdev/rte_ethdev.h
+@@ -1561,6 +1561,13 @@ struct rte_eth_dev_info {
+ 	void *reserved_ptrs[2];   /**< Reserved for future fields */
+ };
+ 
++/**
++ * RX/TX queue states
++ */
++#define RTE_ETH_QUEUE_STATE_STOPPED 0
++#define RTE_ETH_QUEUE_STATE_STARTED 1
++#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
++
+ /**
+  * Ethernet device RX queue information structure.
+  * Used to retrieve information about configured queue.
+diff --git a/lib/librte_ethdev/rte_ethdev_driver.h b/lib/librte_ethdev/rte_ethdev_driver.h
+index afee4b8b80..6764ffb854 100644
+--- a/lib/librte_ethdev/rte_ethdev_driver.h
++++ b/lib/librte_ethdev/rte_ethdev_driver.h
+@@ -923,13 +923,6 @@ struct eth_dev_ops {
+ 	/**< Disconnect the hairpin queues of a pair from each other. */
+ };
+ 
+-/**
+- * RX/TX queue states
+- */
+-#define RTE_ETH_QUEUE_STATE_STOPPED 0
+-#define RTE_ETH_QUEUE_STATE_STARTED 1
+-#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
+-
+ /**
+  * @internal
+  * Check if the selected Rx queue is hairpin queue.

  parent reply	other threads:[~2022-06-21  8:10 UTC|newest]

Thread overview: 180+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-21  8:01 patch " Xueming Li
2022-06-21  8:01 ` patch 'crypto/ipsec_mb: fix length and offset settings' " Xueming Li
2022-06-21  8:01 ` patch 'crypto/ipsec_mb: fix GMAC parameters setting' " Xueming Li
2022-06-21  8:01 ` patch 'eal/windows: fix data race when creating threads' " Xueming Li
2022-06-21  8:01 ` patch 'eal/windows: add missing C++ include guards' " Xueming Li
2022-06-21  8:01 ` patch 'examples/bond: fix invalid use of trylock' " Xueming Li
2022-06-21  8:01 ` patch 'net/iavf: fix HW ring scan method selection' " Xueming Li
2022-06-21  8:01 ` patch 'net/i40e: populate error in flow director parser' " Xueming Li
2022-06-21  8:01 ` patch 'net/netvsc: fix calculation of checksums based on mbuf flag' " Xueming Li
2022-06-21  8:01 ` patch 'net/mlx5: fix Tx when inlining is impossible' " Xueming Li
2022-06-21  8:01 ` patch 'net/mlx5: fix GTP handling in header modify action' " Xueming Li
2022-06-21  8:01 ` patch 'net/mlx5: fix Rx/Tx stats concurrency' " Xueming Li
2022-06-21  8:01 ` patch 'test/table: fix buffer overflow on lpm entry' " Xueming Li
2022-06-21  8:01 ` patch 'mem: skip attaching external memory in secondary process' " Xueming Li
2022-06-21  8:01 ` patch 'eal: fix C++ include for device event and DMA' " Xueming Li
2022-06-21  8:01 ` patch 'crypto/dpaa_sec: fix digest size' " Xueming Li
2022-06-21  8:01 ` patch 'crypto/dpaa2_sec: fix fle buffer leak' " Xueming Li
2022-06-21  8:01 ` patch 'crypto/dpaa2_sec: fix buffer pool ID check' " Xueming Li
2022-06-21  8:01 ` patch 'crypto/dpaa_sec: fix secondary process probing' " Xueming Li
2022-06-21  8:01 ` patch 'crypto/dpaa2_sec: fix operation status for simple FD' " Xueming Li
2022-06-21  8:01 ` patch 'common/dpaax: fix short MAC-I IV calculation for ZUC' " Xueming Li
2022-06-21  8:01 ` patch 'examples/l2fwd-crypto: fix stats refresh rate' " Xueming Li
2022-06-21  8:01 ` patch 'test/hash: report non HTM numbers for single thread' " Xueming Li
2022-06-21  8:01 ` patch 'net/nfp: remove unneeded header inclusion' " Xueming Li
2022-06-21  8:01 ` patch 'net/bonding: fix RSS key config with extended key length' " Xueming Li
2022-06-21  8:01 ` patch 'net/cxgbe: fix port ID in Rx mbuf' " Xueming Li
2022-06-21  8:01 ` patch 'net/cxgbe: fix Tx queue stuck with mbuf chain coalescing' " Xueming Li
2022-06-21  8:01 ` patch 'net/vhost: fix access to freed memory' " Xueming Li
2022-06-21  8:01 ` patch 'net/virtio: restore some optimisations with AVX512' " Xueming Li
2022-06-21  8:01 ` patch 'net/vhost: fix TSO feature default disablement' " Xueming Li
2022-06-21  8:01 ` patch 'vhost: fix missing virtqueue lock protection' " Xueming Li
2022-06-21  8:01 ` patch 'vdpa/mlx5: fix interrupt trash that leads to crash' " Xueming Li
2022-06-21  8:01 ` patch 'vdpa/mlx5: fix dead loop when process interrupted' " Xueming Li
2022-06-21  8:01 ` patch 'net/dpaa: fix event queue detach' " Xueming Li
2022-06-21  8:01 ` patch 'doc: update matching versions in ice guide' " Xueming Li
2022-06-21  8:01 ` patch 'net/bonding: fix stopping non-active slaves' " Xueming Li
2022-06-21  8:01 ` patch 'net/bonding: fix slave stop and remove on port close' " Xueming Li
2022-06-21  8:01 ` patch 'net/hns3: fix RSS disable' " Xueming Li
2022-06-21  8:01 ` patch 'net/hns3: fix rollback on RSS hash update' " Xueming Li
2022-06-21  8:01 ` patch 'net/hns3: remove redundant RSS tuple field' " Xueming Li
2022-06-21  8:01 ` patch 'net/hns3: remove unnecessary RSS switch' " Xueming Li
2022-06-21  8:01 ` patch 'app/testpmd: check statistics query before printing' " Xueming Li
2022-06-21  8:01 ` patch 'net/bnxt: fix reordering in NEON Rx' " Xueming Li
2022-06-21  8:01 ` patch 'net/bnxt: remove unused macro' " Xueming Li
2022-06-21  8:01 ` patch 'net/bnxt: fix device capability reporting' " Xueming Li
2022-06-21  8:01 ` patch 'net/bnxt: fix Rx configuration' " Xueming Li
2022-06-21  8:01 ` patch 'net/bnxt: fix ring group on Rx restart' " Xueming Li
2022-06-21  8:01 ` patch 'net/bnxt: avoid unnecessary endianness conversion' " Xueming Li
2022-06-21  8:01 ` patch 'net/bnxt: fix speed autonegotiation' " Xueming Li
2022-06-21  8:01 ` patch 'net/bnxt: force PHY update on certain configurations' " Xueming Li
2022-06-21  8:01 ` patch 'net/bnxt: fix link status when port is stopped' " Xueming Li
2022-06-21  8:01 ` patch 'net/bnxt: recheck FW readiness if in reset process' " Xueming Li
2022-06-21  8:01 ` patch 'net/bnxt: fix freeing VNIC filters' " Xueming Li
2022-06-21  8:01 ` patch 'eal/x86: fix unaligned access for small memcpy' " Xueming Li
2022-06-21  8:02 ` patch 'examples/l3fwd: fix scalar LPM' " Xueming Li
2022-06-21  8:02 ` patch 'test/ring: remove excessive inlining' " Xueming Li
2022-06-21  8:02 ` patch 'eal/freebsd: fix use of newer cpuset macros' " Xueming Li
2022-06-21  8:02 ` patch 'test: avoid hang if queues are full and Tx fails' " Xueming Li
2022-06-21  8:02 ` patch 'acl: fix rules with 8-byte field size' " Xueming Li
2022-06-21  8:02 ` patch 'rib: fix traversal with /32 route' " Xueming Li
2022-06-21  8:02 ` patch 'mbuf: dump outer VLAN' " Xueming Li
2022-06-21  8:02 ` patch 'doc: fix API index Markdown syntax' " Xueming Li
2022-06-21  8:02 ` patch 'devtools: fix null test for NUMA systems' " Xueming Li
2022-06-21  8:02 ` patch 'examples/ipsec-secgw: fix uninitialized memory access' " Xueming Li
2022-06-21  8:02 ` patch 'examples/ipsec-secgw: fix promiscuous mode option' " Xueming Li
2022-06-21  8:02 ` patch 'test/crypto: fix null check for ZUC authentication' " Xueming Li
2022-06-21  8:02 ` patch 'drivers/crypto: fix warnings for OpenSSL version' " Xueming Li
2022-06-21  8:02 ` patch 'doc: add missing auth algo for IPsec example' " Xueming Li
2022-06-21  8:02 ` patch 'app/testpmd: perform SW IP checksum for GRO/GSO packets' " Xueming Li
2022-06-21  8:02 ` patch 'app/testpmd: remove useless pointer checks' " Xueming Li
2022-06-21  8:02 ` patch 'ethdev: clarify null location case in xstats get' " Xueming Li
2022-06-21  8:02 ` patch 'net/hns3: fix xstats get return if xstats is null' " Xueming Li
2022-06-21  8:02 ` patch 'net/ipn3ke: " Xueming Li
2022-06-21  8:02 ` patch 'net/mvpp2: " Xueming Li
2022-06-21  8:02 ` patch 'net/axgbe: " Xueming Li
2022-06-21  8:02 ` patch 'ethdev: fix memory leak in xstats telemetry' " Xueming Li
2022-06-21  8:02 ` patch 'ethdev: fix possible null pointer access' " Xueming Li
2022-06-21  8:02 ` patch 'app/testpmd: replace hardcoded min mbuf number with macro' " Xueming Li
2022-06-21  8:02 ` patch 'app/testpmd: fix metering and policing command for RFC4115' " Xueming Li
2022-06-21  8:02 ` patch 'ethdev: prohibit polling stopped queue' " Xueming Li
2022-06-21  8:02 ` Xueming Li [this message]
2022-06-21  8:02 ` patch 'net/bonding: fix mbuf fast free usage' " Xueming Li
2022-06-21  8:02 ` patch 'net/memif: fix overwriting of head segment' " Xueming Li
2022-06-21  8:02 ` patch 'ethdev: fix port state when stop' " Xueming Li
2022-06-21  8:02 ` patch 'net/txgbe: fix max number of queues for SR-IOV' " Xueming Li
2022-06-21  8:02 ` patch 'net/nfp: fix disabling VLAN stripping' " Xueming Li
2022-06-21  8:02 ` patch 'ethdev: fix port close in secondary process' " Xueming Li
2022-06-21  8:02 ` patch 'net/bnxt: fix compatibility with some old firmwares' " Xueming Li
2022-06-21  8:02 ` patch 'doc: fix vhost multi-queue reconnection' " Xueming Li
2022-06-21  8:02 ` patch 'vhost: fix deadlock when message handling failed' " Xueming Li
2022-06-21  8:02 ` patch 'examples/vhost: fix crash when no VMDq' " Xueming Li
2022-06-21  8:02 ` patch 'net/mlx5: fix Tx recovery' " Xueming Li
2022-06-21  8:02 ` patch 'kni: fix build with Linux 5.18' " Xueming Li
2022-06-21  8:02 ` patch 'net/iavf: fix data path selection' " Xueming Li
2022-06-21  8:02 ` patch 'net/ixgbe: add option for link up check on pin SDP3' " Xueming Li
2022-06-21  8:02 ` patch 'net/ice/base: fix getting sched node from ID type' " Xueming Li
2022-06-21  8:02 ` patch 'net/ice: fix MTU info for DCF' " Xueming Li
2022-06-21  8:02 ` patch 'net/i40e: fix max frame size config at port level' " Xueming Li
2022-06-21  8:02 ` patch 'net/iavf: fix queue start exception handling' " Xueming Li
2022-06-21  8:02 ` patch 'net/iavf: fix mbuf release in multi-process' " Xueming Li
2022-06-21  8:02 ` patch 'net/iavf: fix Rx queue interrupt setting' " Xueming Li
2022-06-21  8:02 ` patch 'doc: update matching versions in i40e guide' " Xueming Li
2022-06-21  8:02 ` patch 'net/ice: fix outer L4 checksum in scalar Rx' " Xueming Li
2022-06-21  8:02 ` patch 'net/iavf: increase reset complete wait count' " Xueming Li
2022-06-21  8:02 ` patch 'examples/dma: fix Tx drop statistics' " Xueming Li
2022-06-21  8:02 ` patch 'raw/ifpga: unregister interrupt on close' " Xueming Li
2022-06-21  8:02 ` patch 'bus/fslmc: fix VFIO setup' " Xueming Li
2022-06-21  8:02 ` patch 'doc: fix formatting and link in BPF library guide' " Xueming Li
2022-06-21  8:02 ` patch 'app/testpmd: fix packet segment allocation' " Xueming Li
2022-06-21  8:02 ` patch 'app/testpmd: fix multicast address pool leak' " Xueming Li
2022-06-21  8:02 ` patch 'kni: use dedicated function to set random MAC address' " Xueming Li
2022-06-21  8:02 ` patch 'kni: use dedicated function to set " Xueming Li
2022-06-21  8:02 ` patch 'raw/ifpga: remove virtual devices on close' " Xueming Li
2022-06-21  8:02 ` patch 'vhost: fix async access' " Xueming Li
2022-06-21  8:03 ` patch 'net/bnxt: fix tunnel stateless offloads' " Xueming Li
2022-06-21  8:03 ` patch 'net/mlx5: fix RSS hash types adjustment' " Xueming Li
2022-07-20  8:20 ` patch 'vdpa/ifc: fix build with GCC 12' " Xueming Li
2022-07-20  8:20   ` patch 'app/flow-perf: " Xueming Li
2022-07-20  8:20   ` patch 'trace: fix init with long file prefix' " Xueming Li
2022-07-20  8:20   ` patch 'eal/x86: drop export of internal alignment macro' " Xueming Li
2022-07-20  8:20   ` patch 'baseband/acc100: update companion PF configure function' " Xueming Li
2022-07-20  8:20   ` patch 'baseband/acc100: add protection for some negative scenario' " Xueming Li
2022-07-20  8:20   ` patch 'baseband/acc100: remove RTE prefix for internal macros' " Xueming Li
2022-07-20  8:20   ` patch 'common/cpt: fix build with GCC 12' " Xueming Li
2022-07-20  8:20   ` patch 'test/ipsec: " Xueming Li
2022-07-20  8:20   ` patch 'crypto/scheduler: fix queue pair in scheduler failover' " Xueming Li
2022-07-20  8:20   ` patch 'test/crypto: fix cipher offset for ZUC' " Xueming Li
2022-07-20  8:20   ` patch 'test/ipsec: fix performance test' " Xueming Li
2022-07-20  8:20   ` patch 'eventdev/eth_tx: fix adapter creation' " Xueming Li
2022-07-20  8:20   ` patch 'net/bonding: fix RSS inconsistency between ports' " Xueming Li
2022-07-20  8:20   ` patch 'test/bonding: fix RSS test when disable RSS' " Xueming Li
2022-07-20  8:20   ` patch 'net/hns3: fix an unreasonable memset' " Xueming Li
2022-07-20  8:20   ` patch 'net/hns3: remove duplicate definition' " Xueming Li
2022-07-20  8:20   ` patch 'net/hns3: fix return value for unsupported tuple' " Xueming Li
2022-07-20  8:20   ` patch 'app/testpmd: fix bonding slave devices not released' " Xueming Li
2022-07-20  8:20   ` patch 'net/txgbe: fix register polling' " Xueming Li
2022-07-20  8:20   ` patch 'app/testpmd: revert MAC update in checksum forwarding' " Xueming Li
2022-07-20  8:20   ` patch 'vhost: fix missing enqueue pseudo-header calculation' " Xueming Li
2022-07-20  8:20   ` patch 'vhost/crypto: fix build with GCC 12' " Xueming Li
2022-07-20  8:20   ` patch 'vhost/crypto: fix descriptor processing' " Xueming Li
2022-07-20  8:20   ` patch 'malloc: fix allocation of almost hugepage size' " Xueming Li
2022-07-20  8:20   ` patch 'config: fix C++ cross compiler for Arm and PPC' " Xueming Li
2022-07-20  8:20   ` patch 'ci: enable C++ check " Xueming Li
2022-07-20  8:20   ` patch 'net/octeontx: fix port close' " Xueming Li
2022-07-20  8:20   ` patch 'net/qede: fix build with GCC 13' " Xueming Li
2022-07-20  8:20   ` patch 'net/ice/base: fix build with GCC 12' " Xueming Li
2022-07-20  8:21   ` patch 'net/qede: " Xueming Li
2022-07-20  8:21   ` patch 'net/mlx5: fix build with clang 14' " Xueming Li
2022-07-20  8:21   ` patch 'net/mlx5: fix RSS expansion for patterns with ICMP item' " Xueming Li
2022-07-20  8:21   ` patch 'net/mlx5: fix stack buffer overflow in drop action' " Xueming Li
2022-07-20  8:21   ` patch 'raw/ioat: fix build when ioat dmadev enabled' " Xueming Li
2022-07-20  8:21   ` patch 'rib: fix references for IPv6 implementation' " Xueming Li
2022-07-20  8:21   ` patch 'test/hash: fix out of bound access' " Xueming Li
2022-07-20  8:21   ` patch 'app/procinfo: show all non-owned ports' " Xueming Li
2022-07-20  8:21   ` patch 'test: check memory allocation for CRC' " Xueming Li
2022-07-20  8:21   ` patch 'net/hns3: fix descriptors check with SVE' " Xueming Li
2022-07-20  8:21   ` patch 'examples/distributor: fix distributor on Rx core' " Xueming Li
2022-07-20  8:21   ` patch 'doc: add more instructions for running as non-root' " Xueming Li
2022-08-01 12:21     ` Dmitry Kozlyuk
2022-07-20  8:21   ` patch 'net/bnxt: fix switch domain allocation' " Xueming Li
2022-07-20  8:21   ` patch 'net/bnxt: allow Tx only or Rx only' " Xueming Li
2022-07-20  8:21   ` patch 'net/bnxt: fix setting forced speed' " Xueming Li
2022-07-20  8:21   ` patch 'test/crypto: fix authentication IV for ZUC SGL' " Xueming Li
2022-07-20  8:21   ` patch 'test/crypto: fix ZUC vector IV format' " Xueming Li
2022-07-20  8:21   ` patch 'test/crypto: fix SNOW3G " Xueming Li
2022-07-20  8:21   ` patch 'baseband/acc100: remove prefix of internal file' " Xueming Li
2022-07-20  8:21   ` patch 'examples/fips_validation: handle empty payload' " Xueming Li
2022-07-20  8:21   ` patch 'crypto/qat: fix DOCSIS crash' " Xueming Li
2022-07-20  8:21   ` patch 'doc: fix grammar and formatting in compressdev guide' " Xueming Li
2022-07-20  8:21   ` patch 'doc: fix grammar and parameters in l2fwd-crypto " Xueming Li
2022-07-20  8:21   ` patch 'eventdev/eth_tx: fix queue delete' " Xueming Li
2022-07-20  8:21   ` patch 'app/testpmd: fix supported RSS offload display' " Xueming Li
2022-07-20  8:21   ` patch 'net/netvsc: fix vmbus device reference in multi-process' " Xueming Li
2022-07-20  8:21   ` patch 'doc: fix readability in vhost guide' " Xueming Li
2022-07-20  8:21   ` patch 'net/vhost: fix deadlock on vring state change' " Xueming Li
2022-07-20  8:21   ` patch 'vhost: add some trailing newline in log messages' " Xueming Li
2022-07-20  8:21   ` patch 'net/igc: support multi-process' " Xueming Li
2022-07-20  8:21   ` patch 'service: fix lingering active status' " Xueming Li
2022-07-20  8:21   ` patch 'gro: fix identifying fragmented packets' " Xueming Li
2022-07-20  8:21   ` patch 'examples/link_status_interrupt: fix stats refresh rate' " Xueming Li

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=20220621080301.2315720-81-xuemingl@nvidia.com \
    --to=xuemingl@nvidia.com \
    --cc=dkozlyuk@nvidia.com \
    --cc=matan@nvidia.com \
    --cc=stable@dpdk.org \
    /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).