[PATCH 21.11 1/2] net/axgbe: fix Rx and Tx queue state

Jie Hai haijie1 at huawei.com
Thu Apr 11 10:49:53 CEST 2024


[ upstream commit 0236016c029de914c6ae083b1fa8ef2555d4c798 ]

The DPDK framework reports the queue state, which is stored in
dev->data->tx_queue_state and dev->data->rx_queue_state. The
state is maintained by the driver. Users may determine whether
a queue participates in packet forwarding based on the state.
Therefore, the driver needs to modify the queue state in time
according to the actual situation.

Fixes: 9ad9ff476cac ("ethdev: add queue state in queried queue information")
Cc: stable at dpdk.org

Signed-off-by: Jie Hai <haijie1 at huawei.com>
Acked-by: Ferruh Yigit <ferruh.yigit at amd.com>
---
 drivers/net/axgbe/axgbe_ethdev.c | 6 ++++++
 drivers/net/axgbe/axgbe_rxtx.c   | 2 ++
 2 files changed, 8 insertions(+)

diff --git a/drivers/net/axgbe/axgbe_ethdev.c b/drivers/net/axgbe/axgbe_ethdev.c
index 5add4032354c..a7812f03c1c2 100644
--- a/drivers/net/axgbe/axgbe_ethdev.c
+++ b/drivers/net/axgbe/axgbe_ethdev.c
@@ -353,6 +353,7 @@ axgbe_dev_start(struct rte_eth_dev *dev)
 	int ret;
 	struct rte_eth_dev_data *dev_data = dev->data;
 	uint16_t max_pkt_len;
+	uint16_t i;
 
 	dev->dev_ops = &axgbe_eth_dev_ops;
 
@@ -397,6 +398,11 @@ axgbe_dev_start(struct rte_eth_dev *dev)
 	else
 		dev->rx_pkt_burst = &axgbe_recv_pkts;
 
+	for (i = 0; i < dev->data->nb_rx_queues; i++)
+		dev->data->rx_queue_state[i] = RTE_ETH_QUEUE_STATE_STARTED;
+	for (i = 0; i < dev->data->nb_tx_queues; i++)
+		dev->data->tx_queue_state[i] = RTE_ETH_QUEUE_STATE_STARTED;
+
 	return 0;
 }
 
diff --git a/drivers/net/axgbe/axgbe_rxtx.c b/drivers/net/axgbe/axgbe_rxtx.c
index 1de5b29f06c8..f993919637b1 100644
--- a/drivers/net/axgbe/axgbe_rxtx.c
+++ b/drivers/net/axgbe/axgbe_rxtx.c
@@ -928,6 +928,7 @@ void axgbe_dev_clear_queues(struct rte_eth_dev *dev)
 			axgbe_rx_queue_release(rxq);
 			dev->data->rx_queues[i] = NULL;
 		}
+		dev->data->rx_queue_state[i] = RTE_ETH_QUEUE_STATE_STOPPED;
 	}
 
 	for (i = 0; i < dev->data->nb_tx_queues; i++) {
@@ -937,6 +938,7 @@ void axgbe_dev_clear_queues(struct rte_eth_dev *dev)
 			axgbe_tx_queue_release(txq);
 			dev->data->tx_queues[i] = NULL;
 		}
+		dev->data->tx_queue_state[i] = RTE_ETH_QUEUE_STATE_STOPPED;
 	}
 }
 
-- 
2.30.0



More information about the stable mailing list