patches for DPDK stable branches
 help / color / mirror / Atom feed
From: Kevin Traynor <ktraynor@redhat.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 21.11.2
Date: Thu,  9 Jun 2022 12:36:19 +0100	[thread overview]
Message-ID: <20220609113701.386938-32-ktraynor@redhat.com> (raw)
In-Reply-To: <20220609113701.386938-1-ktraynor@redhat.com>

Hi,

FYI, your patch has been queued to stable release 21.11.2

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/13/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/kevintraynor/dpdk-stable

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

Thanks.

Kevin

---
From fa7ae869320cccab03969a7a679ce2c554e488f6 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

[ 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         |  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(-)

diff --git a/app/test-pmd/5tswap.c b/app/test-pmd/5tswap.c
index 629d3e0d31..f041a5e1d5 100644
--- a/app/test-pmd/5tswap.c
+++ b/app/test-pmd/5tswap.c
@@ -186,8 +186,21 @@ pkt_burst_5tuple_swap(struct fwd_stream *fs)
 }
 
+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 7e4efbf4db..35da020129 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -2648,6 +2648,8 @@ cmd_config_rxtx_queue_parsed(void *parsed_result,
 {
 	struct cmd_config_rxtx_queue *res = parsed_result;
+	struct rte_port *port;
 	uint8_t isrx;
 	uint8_t isstart;
+	uint8_t *state;
 	int ret = 0;
 
@@ -2697,6 +2699,13 @@ cmd_config_rxtx_queue_parsed(void *parsed_result,
 		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;
 }
 
@@ -2767,9 +2776,9 @@ 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;
 	}
@@ -2889,5 +2898,5 @@ cmd_setup_rxtx_queue_parsed(
 				     port->nb_rx_desc[res->qid],
 				     socket_id,
-				     &port->rx_conf[res->qid],
+				     &port->rxq[res->qid].conf,
 				     mp);
 		if (ret)
@@ -2907,5 +2916,5 @@ cmd_setup_rxtx_queue_parsed(
 					     port->nb_tx_desc[res->qid],
 					     socket_id,
-					     &port->tx_conf[res->qid]);
+					     &port->txq[res->qid].conf);
 		if (ret)
 			fprintf(stderr, "Failed to setup TX queue\n");
@@ -4683,5 +4692,5 @@ 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;
 }
@@ -16080,5 +16089,5 @@ 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);
@@ -16200,9 +16209,9 @@ cmd_config_per_port_rx_offload_parsed(void *parsed_result,
 		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;
 	}
 
@@ -16310,7 +16319,7 @@ 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);
@@ -16499,5 +16508,5 @@ 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);
@@ -16623,9 +16632,9 @@ cmd_config_per_port_tx_offload_parsed(void *parsed_result,
 		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;
 	}
 
@@ -16736,7 +16745,7 @@ 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 ae2ace42cc..3855a6809f 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -2865,6 +2865,6 @@ rxtx_config_display(void)
 
 	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];
@@ -3124,5 +3124,5 @@ fwd_stream_on_other_lcores(uint16_t domain_id, lcoreid_t src_lc,
 			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)
@@ -3184,5 +3184,5 @@ pkt_fwd_shared_rxq_check(void)
 			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)
diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c
index 24265ce4de..aaaec17841 100644
--- a/app/test-pmd/csumonly.c
+++ b/app/test-pmd/csumonly.c
@@ -1193,8 +1193,21 @@ tunnel_update:
 }
 
+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 9ceef3b54a..1e01120ae9 100644
--- a/app/test-pmd/flowgen.c
+++ b/app/test-pmd/flowgen.c
@@ -208,8 +208,21 @@ flowgen_begin(portid_t pi)
 }
 
+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 = flowgen_begin,
 	.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 99c94cb282..066f2a3ab7 100644
--- a/app/test-pmd/icmpecho.c
+++ b/app/test-pmd/icmpecho.c
@@ -513,8 +513,21 @@ reply_to_icmp_echo_rqsts(struct fwd_stream *fs)
 }
 
+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 9ff817aa68..fc4e2d014c 100644
--- a/app/test-pmd/ieee1588fwd.c
+++ b/app/test-pmd/ieee1588fwd.c
@@ -212,8 +212,21 @@ port_ieee1588_fwd_end(portid_t 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 19cd920f70..71849aaf96 100644
--- a/app/test-pmd/iofwd.c
+++ b/app/test-pmd/iofwd.c
@@ -89,8 +89,21 @@ pkt_burst_io_forward(struct fwd_stream *fs)
 }
 
+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 812a0c721f..79c9241d00 100644
--- a/app/test-pmd/macfwd.c
+++ b/app/test-pmd/macfwd.c
@@ -120,8 +120,21 @@ pkt_burst_mac_forward(struct fwd_stream *fs)
 }
 
+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 4627ff83e9..acb0fd7fb4 100644
--- a/app/test-pmd/macswap.c
+++ b/app/test-pmd/macswap.c
@@ -98,8 +98,21 @@ pkt_burst_mac_swap(struct fwd_stream *fs)
 }
 
+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
@@ -278,8 +278,21 @@ noisy_fwd_begin(portid_t pi)
 }
 
+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 d1a579d8d8..04457010f4 100644
--- a/app/test-pmd/rxonly.c
+++ b/app/test-pmd/rxonly.c
@@ -69,8 +69,16 @@ pkt_burst_receive(struct fwd_stream *fs)
 }
 
+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/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
@@ -108,8 +108,16 @@ shared_rxq_fwd(struct fwd_stream *fs)
 }
 
+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,
 };
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index 5c62f48efd..fa449183c1 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -1640,8 +1640,8 @@ 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;
 
 	if (eth_link_speed)
@@ -1830,5 +1830,4 @@ reconfig(portid_t new_port_id, unsigned socket_id)
 }
 
-
 int
 init_fwd_streams(void)
@@ -2235,4 +2234,10 @@ flush_fwd_rx_queues(void)
 			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
@@ -2280,5 +2285,6 @@ run_pkt_fwd_on_lcore(struct fwd_lcore *fc, packet_fwd_t pkt_fwd)
 	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 &&
@@ -2362,4 +2368,5 @@ 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;
 
@@ -2392,4 +2399,8 @@ start_packet_forwarding(int with_tx_first)
 		return;
 
+	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) {
@@ -2653,5 +2664,5 @@ rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
 					     nb_rx_desc, socket_id,
 					     rx_conf, mp);
-		return ret;
+		goto exit;
 	}
 	for (i = 0; i < rx_pkt_nb_segs; i++) {
@@ -2678,4 +2689,8 @@ rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
 	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;
 }
@@ -2880,5 +2895,5 @@ start_port(portid_t pid)
 				     k < port->dev_info.max_rx_queues;
 				     k++)
-					port->rx_conf[k].offloads |=
+					port->rxq[k].conf.offloads |=
 						dev_conf.rxmode.offloads;
 			}
@@ -2891,5 +2906,5 @@ start_port(portid_t pid)
 				     k < port->dev_info.max_tx_queues;
 				     k++)
-					port->tx_conf[k].offloads |=
+					port->txq[k].conf.offloads |=
 						dev_conf.txmode.offloads;
 			}
@@ -2899,4 +2914,7 @@ start_port(portid_t pid)
 			/* 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))
@@ -2904,13 +2922,18 @@ start_port(portid_t pid)
 						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 */
@@ -2945,5 +2968,5 @@ start_port(portid_t pid)
 					     port->nb_rx_desc[qi],
 					     rxring_numa[pi],
-					     &(port->rx_conf[qi]),
+					     &(port->rxq[qi].conf),
 					     mp);
 				} else {
@@ -2960,5 +2983,5 @@ start_port(portid_t pid)
 					     port->nb_rx_desc[qi],
 					     port->socket_id,
-					     &(port->rx_conf[qi]),
+					     &(port->rxq[qi].conf),
 					     mp);
 				}
@@ -3736,32 +3759,32 @@ rxtx_port_config(portid_t pid)
 
 	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 (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. */
 		}
 
 		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;
@@ -3769,24 +3792,24 @@ rxtx_port_config(portid_t pid)
 
 	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;
@@ -3869,5 +3892,5 @@ init_port_config(void)
 				     i < port->dev_info.nb_rx_queues;
 				     i++)
-					port->rx_conf[i].offloads &=
+					port->rxq[i].conf.offloads &=
 						~RTE_ETH_RX_OFFLOAD_RSS_HASH;
 			}
@@ -4043,5 +4066,5 @@ init_port_dcb_config(portid_t pid,
 		port_conf.rxmode.offloads &= ~RTE_ETH_RX_OFFLOAD_RSS_HASH;
 		for (i = 0; i < nb_rxq; i++)
-			rte_port->rx_conf[i].offloads &=
+			rte_port->rxq[i].conf.offloads &=
 				~RTE_ETH_RX_OFFLOAD_RSS_HASH;
 	}
diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
index 59bb9e3c66..42db6b56df 100644
--- a/app/test-pmd/testpmd.h
+++ b/app/test-pmd/testpmd.h
@@ -137,4 +137,5 @@ struct fwd_stream {
 	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;
@@ -220,4 +221,16 @@ struct xstat_display_info {
 };
 
+/** 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.
@@ -242,6 +255,6 @@ struct rte_port {
 	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 */
@@ -301,4 +314,5 @@ 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);
 
@@ -307,4 +321,5 @@ struct fwd_engine {
 	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 fc039a622c..e1bc78b73d 100644
--- a/app/test-pmd/txonly.c
+++ b/app/test-pmd/txonly.c
@@ -505,8 +505,16 @@ tx_only_begin(portid_t pi)
 }
 
+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,
 };
-- 
2.34.3

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2022-06-09 12:34:30.526371753 +0100
+++ 0032-app-testpmd-do-not-poll-stopped-queues.patch	2022-06-09 12:34:29.732980618 +0100
@@ -1 +1 @@
-From 3c4426db54fc24e7a97f2b4000a0a4f30897a104 Mon Sep 17 00:00:00 2001
+From fa7ae869320cccab03969a7a679ce2c554e488f6 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 3c4426db54fc24e7a97f2b4000a0a4f30897a104 ]
+
@@ -19 +20,0 @@
-Cc: stable@dpdk.org
@@ -69 +70 @@
-index 1e5b294ab3..d8900a0d07 100644
+index 7e4efbf4db..35da020129 100644
@@ -72 +73 @@
-@@ -2655,6 +2655,8 @@ cmd_config_rxtx_queue_parsed(void *parsed_result,
+@@ -2648,6 +2648,8 @@ cmd_config_rxtx_queue_parsed(void *parsed_result,
@@ -81 +82 @@
-@@ -2704,6 +2706,13 @@ cmd_config_rxtx_queue_parsed(void *parsed_result,
+@@ -2697,6 +2699,13 @@ cmd_config_rxtx_queue_parsed(void *parsed_result,
@@ -96 +97 @@
-@@ -2774,9 +2783,9 @@ cmd_config_deferred_start_rxtx_queue_parsed(void *parsed_result,
+@@ -2767,9 +2776,9 @@ cmd_config_deferred_start_rxtx_queue_parsed(void *parsed_result,
@@ -110 +111 @@
-@@ -2896,5 +2905,5 @@ cmd_setup_rxtx_queue_parsed(
+@@ -2889,5 +2898,5 @@ cmd_setup_rxtx_queue_parsed(
@@ -117 +118 @@
-@@ -2914,5 +2923,5 @@ cmd_setup_rxtx_queue_parsed(
+@@ -2907,5 +2916,5 @@ cmd_setup_rxtx_queue_parsed(
@@ -124 +125 @@
-@@ -4690,5 +4699,5 @@ cmd_config_queue_tx_offloads(struct rte_port *port)
+@@ -4683,5 +4692,5 @@ cmd_config_queue_tx_offloads(struct rte_port *port)
@@ -131 +132 @@
-@@ -16202,5 +16211,5 @@ cmd_rx_offload_get_configuration_parsed(
+@@ -16080,5 +16089,5 @@ cmd_rx_offload_get_configuration_parsed(
@@ -138 +139 @@
-@@ -16322,9 +16331,9 @@ cmd_config_per_port_rx_offload_parsed(void *parsed_result,
+@@ -16200,9 +16209,9 @@ cmd_config_per_port_rx_offload_parsed(void *parsed_result,
@@ -150 +151 @@
-@@ -16432,7 +16441,7 @@ cmd_config_per_queue_rx_offload_parsed(void *parsed_result,
+@@ -16310,7 +16319,7 @@ cmd_config_per_queue_rx_offload_parsed(void *parsed_result,
@@ -160 +161 @@
-@@ -16621,5 +16630,5 @@ cmd_tx_offload_get_configuration_parsed(
+@@ -16499,5 +16508,5 @@ cmd_tx_offload_get_configuration_parsed(
@@ -167 +168 @@
-@@ -16745,9 +16754,9 @@ cmd_config_per_port_tx_offload_parsed(void *parsed_result,
+@@ -16623,9 +16632,9 @@ cmd_config_per_port_tx_offload_parsed(void *parsed_result,
@@ -179 +180 @@
-@@ -16858,7 +16867,7 @@ cmd_config_per_queue_tx_offload_parsed(void *parsed_result,
+@@ -16736,7 +16745,7 @@ cmd_config_per_queue_tx_offload_parsed(void *parsed_result,
@@ -190 +191 @@
-index dc9ef1e868..72d2606d19 100644
+index ae2ace42cc..3855a6809f 100644
@@ -193 +194 @@
-@@ -3644,6 +3644,6 @@ rxtx_config_display(void)
+@@ -2865,6 +2865,6 @@ rxtx_config_display(void)
@@ -202 +203 @@
-@@ -3903,5 +3903,5 @@ fwd_stream_on_other_lcores(uint16_t domain_id, lcoreid_t src_lc,
+@@ -3124,5 +3124,5 @@ fwd_stream_on_other_lcores(uint16_t domain_id, lcoreid_t src_lc,
@@ -209 +210 @@
-@@ -3963,5 +3963,5 @@ pkt_fwd_shared_rxq_check(void)
+@@ -3184,5 +3184,5 @@ pkt_fwd_shared_rxq_check(void)
@@ -217 +218 @@
-index 05763a71e8..7df201e047 100644
+index 24265ce4de..aaaec17841 100644
@@ -220 +221 @@
-@@ -1204,8 +1204,21 @@ tunnel_update:
+@@ -1193,8 +1193,21 @@ tunnel_update:
@@ -467 +468 @@
-index 5b742911a8..99f2a31bb8 100644
+index 5c62f48efd..fa449183c1 100644
@@ -470 +471 @@
-@@ -1639,8 +1639,8 @@ init_config_port_offloads(portid_t pid, uint32_t socket_id)
+@@ -1640,8 +1640,8 @@ init_config_port_offloads(portid_t pid, uint32_t socket_id)
@@ -481 +482 @@
-@@ -1829,5 +1829,4 @@ reconfig(portid_t new_port_id, unsigned socket_id)
+@@ -1830,5 +1830,4 @@ reconfig(portid_t new_port_id, unsigned socket_id)
@@ -487 +488 @@
-@@ -2234,4 +2233,10 @@ flush_fwd_rx_queues(void)
+@@ -2235,4 +2234,10 @@ flush_fwd_rx_queues(void)
@@ -498 +499 @@
-@@ -2279,5 +2284,6 @@ run_pkt_fwd_on_lcore(struct fwd_lcore *fc, packet_fwd_t pkt_fwd)
+@@ -2280,5 +2285,6 @@ run_pkt_fwd_on_lcore(struct fwd_lcore *fc, packet_fwd_t pkt_fwd)
@@ -506 +507 @@
-@@ -2361,4 +2367,5 @@ start_packet_forwarding(int with_tx_first)
+@@ -2362,4 +2368,5 @@ start_packet_forwarding(int with_tx_first)
@@ -512 +513 @@
-@@ -2391,4 +2398,8 @@ start_packet_forwarding(int with_tx_first)
+@@ -2392,4 +2399,8 @@ start_packet_forwarding(int with_tx_first)
@@ -521 +522 @@
-@@ -2652,5 +2663,5 @@ rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
+@@ -2653,5 +2664,5 @@ rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
@@ -528 +529 @@
-@@ -2677,4 +2688,8 @@ rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
+@@ -2678,4 +2689,8 @@ rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
@@ -537 +538 @@
-@@ -2879,5 +2894,5 @@ start_port(portid_t pid)
+@@ -2880,5 +2895,5 @@ start_port(portid_t pid)
@@ -544 +545 @@
-@@ -2890,5 +2905,5 @@ start_port(portid_t pid)
+@@ -2891,5 +2906,5 @@ start_port(portid_t pid)
@@ -551 +552 @@
-@@ -2898,4 +2913,7 @@ start_port(portid_t pid)
+@@ -2899,4 +2914,7 @@ start_port(portid_t pid)
@@ -559 +560 @@
-@@ -2903,13 +2921,18 @@ start_port(portid_t pid)
+@@ -2904,13 +2922,18 @@ start_port(portid_t pid)
@@ -581 +582 @@
-@@ -2944,5 +2967,5 @@ start_port(portid_t pid)
+@@ -2945,5 +2968,5 @@ start_port(portid_t pid)
@@ -588 +589 @@
-@@ -2959,5 +2982,5 @@ start_port(portid_t pid)
+@@ -2960,5 +2983,5 @@ start_port(portid_t pid)
@@ -595 +596 @@
-@@ -3735,32 +3758,32 @@ rxtx_port_config(portid_t pid)
+@@ -3736,32 +3759,32 @@ rxtx_port_config(portid_t pid)
@@ -638 +639 @@
-@@ -3768,24 +3791,24 @@ rxtx_port_config(portid_t pid)
+@@ -3769,24 +3792,24 @@ rxtx_port_config(portid_t pid)
@@ -671 +672 @@
-@@ -3868,5 +3891,5 @@ init_port_config(void)
+@@ -3869,5 +3892,5 @@ init_port_config(void)
@@ -678 +679 @@
-@@ -4042,5 +4065,5 @@ init_port_dcb_config(portid_t pid,
+@@ -4043,5 +4066,5 @@ init_port_dcb_config(portid_t pid,
@@ -686 +687 @@
-index 8ee682b362..63e19c9aef 100644
+index 59bb9e3c66..42db6b56df 100644
@@ -695 +696 @@
-@@ -241,4 +242,16 @@ struct xstat_display_info {
+@@ -220,4 +221,16 @@ struct xstat_display_info {
@@ -712 +713 @@
-@@ -263,6 +276,6 @@ struct rte_port {
+@@ -242,6 +255,6 @@ struct rte_port {
@@ -721 +722 @@
-@@ -327,4 +340,5 @@ struct fwd_lcore {
+@@ -301,4 +314,5 @@ struct fwd_lcore {
@@ -727 +728 @@
-@@ -333,4 +347,5 @@ struct fwd_engine {
+@@ -307,4 +321,5 @@ struct fwd_engine {


  parent reply	other threads:[~2022-06-09 11:38 UTC|newest]

Thread overview: 78+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-09 11:35 patch 'examples/l3fwd: fix scalar LPM' " Kevin Traynor
2022-06-09 11:35 ` patch 'test/ring: remove excessive inlining' " Kevin Traynor
2022-06-09 11:35 ` patch 'eal/freebsd: fix use of newer cpuset macros' " Kevin Traynor
2022-06-09 11:35 ` patch 'test: avoid hang if queues are full and Tx fails' " Kevin Traynor
2022-06-09 11:35 ` patch 'acl: fix rules with 8-byte field size' " Kevin Traynor
2022-06-09 11:35 ` patch 'rib: fix traversal with /32 route' " Kevin Traynor
2022-06-09 11:35 ` patch 'mbuf: dump outer VLAN' " Kevin Traynor
2022-06-09 11:35 ` patch 'doc: fix API index Markdown syntax' " Kevin Traynor
2022-06-09 11:35 ` patch 'devtools: fix null test for NUMA systems' " Kevin Traynor
2022-06-09 11:35 ` patch 'pipeline: fix emit instruction for invalid headers' " Kevin Traynor
2022-06-09 11:35 ` patch 'pcapng: fix timestamp wrapping in output files' " Kevin Traynor
2022-06-09 11:35 ` patch 'examples/ipsec-secgw: fix uninitialized memory access' " Kevin Traynor
2022-06-09 11:36 ` patch 'examples/ipsec-secgw: fix promiscuous mode option' " Kevin Traynor
2022-06-09 11:36 ` patch 'test/crypto: fix null check for ZUC authentication' " Kevin Traynor
2022-06-09 11:36 ` patch 'drivers/crypto: fix warnings for OpenSSL version' " Kevin Traynor
2022-06-09 11:36 ` patch 'test/crypto: fix driver name for DPAA raw API test' " Kevin Traynor
2022-06-09 11:36 ` patch 'doc: add missing auth algo for IPsec example' " Kevin Traynor
2022-06-09 11:36 ` patch 'app/testpmd: fix port status of bonding slave device' " Kevin Traynor
2022-06-09 11:36 ` patch 'app/testpmd: perform SW IP checksum for GRO/GSO packets' " Kevin Traynor
2022-06-09 11:36 ` patch 'app/testpmd: remove useless pointer checks' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/hns3: fix xstats get return if xstats is null' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/ipn3ke: " Kevin Traynor
2022-06-09 11:36 ` patch 'net/mvpp2: " Kevin Traynor
2022-06-09 11:36 ` patch 'net/axgbe: " Kevin Traynor
2022-06-09 11:36 ` patch 'ethdev: fix memory leak in xstats telemetry' " Kevin Traynor
2022-06-09 11:36 ` patch 'ethdev: fix possible null pointer access' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/cnxk: fix possible null dereference in telemetry' " Kevin Traynor
2022-06-09 11:36 ` patch 'app/testpmd: replace hardcoded min mbuf number with macro' " Kevin Traynor
2022-06-09 11:36 ` patch 'app/testpmd: fix metering and policing command for RFC4115' " Kevin Traynor
2022-06-09 11:36 ` patch 'ethdev: prohibit polling stopped queue' " Kevin Traynor
2022-06-09 11:36 ` patch 'app/testpmd: fix use of indirect action after port close' " Kevin Traynor
2022-06-09 11:36 ` Kevin Traynor [this message]
2022-06-09 11:36 ` patch 'net/bonding: fix mbuf fast free usage' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/memif: fix overwriting of head segment' " Kevin Traynor
2022-06-09 11:36 ` patch 'ethdev: fix port state when stop' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/ngbe: fix link speed check' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/ngbe: fix reading PHY ID' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/ngbe: fix PCIe related operations with bus API' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/txgbe: fix SGMII mode to link up' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/txgbe: fix max number of queues for SR-IOV' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/nfp: fix disabling VLAN stripping' " Kevin Traynor
2022-06-09 11:36 ` patch 'app/testpmd: fix help of create meter command' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/vmxnet3: fix Rx data ring initialization' " Kevin Traynor
2022-06-09 11:36 ` patch 'common/sfc_efx/base: convert EFX PCIe INTF to MCDI value' " Kevin Traynor
2022-06-09 11:36 ` patch 'ethdev: fix port close in secondary process' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/bnxt: fix compatibility with some old firmwares' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/bnxt: fix ULP parser to ignore segment offset' " Kevin Traynor
2022-06-09 11:36 ` patch 'vhost: fix async access' " Kevin Traynor
2022-06-09 11:36 ` patch 'doc: fix vhost multi-queue reconnection' " Kevin Traynor
2022-06-09 11:36 ` patch 'vhost: fix deadlock when message handling failed' " Kevin Traynor
2022-06-09 11:36 ` patch 'examples/vhost: fix crash when no VMDq' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/mlx5: fix Tx recovery' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/mlx5: fix statistics read on Linux' " Kevin Traynor
2022-06-09 11:36 ` patch 'kni: fix build with Linux 5.18' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/iavf: fix data path selection' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/ixgbe: add option for link up check on pin SDP3' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/ice/base: fix getting sched node from ID type' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/ice/base: fix direction of flow that matches any' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/ice: fix MTU info for DCF' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/i40e: fix max frame size config at port level' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/iavf: fix queue start exception handling' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/iavf: fix mbuf release in multi-process' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/iavf: fix Rx queue interrupt setting' " Kevin Traynor
2022-06-09 11:36 ` patch 'doc: update matching versions in i40e guide' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/iavf: fix device initialization without inline crypto' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/iavf: fix device stop' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/iavf: increase reset complete wait count' " Kevin Traynor
2022-06-09 11:36 ` patch 'net/iavf: remove dead code' " Kevin Traynor
2022-06-09 11:36 ` patch 'common/mlx5: remove unused lcore check' " Kevin Traynor
2022-06-09 11:36 ` patch 'examples/dma: fix MTU configuration' " Kevin Traynor
2022-06-09 11:36 ` patch 'examples/dma: fix Tx drop statistics' " Kevin Traynor
2022-06-09 11:36 ` patch 'dma/hisilicon: fix index returned when no DMA completed' " Kevin Traynor
2022-06-09 11:37 ` patch 'dma/hisilicon: enhance CQ scan robustness' " Kevin Traynor
2022-06-09 11:37 ` patch 'eal/ppc: fix compilation for musl' " Kevin Traynor
2022-06-09 12:53 ` patch 'examples/l3fwd: fix scalar LPM' " Stanisław Kardach
2022-06-09 13:12   ` Kevin Traynor
2022-06-09 13:17     ` Kevin Traynor
2022-06-09 13:21       ` Stanisław Kardach

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=20220609113701.386938-32-ktraynor@redhat.com \
    --to=ktraynor@redhat.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).