dpdk/0050-net-hns3-dump-queue-head-and-tail-pointer-info.patch
Dengdui Huang b27def5172 sync some patchs from upstreaming
Sync some patchs from upstreaming, includind some bugfixes, hns3 pmd
flow rule priority feature, hns3 pmd outer VLAN flow match feature,
and support dump reigser names and filter.
This patch set is modified as follows:
- net/hns3: fix cannot fully use hardware flow director table
- net/hns3: fix error code for repeatedly create counter
- net/hns3: support flow rule priority
- common/nfp: use new kvargs process API
- net/tap: use new kvargs process API
- net/sfc: use new kvargs process API
- kvargs: rework process API
- net/hns3: fix variable type
- net/hns3: fix pointer offset
- net/hns3: fix error log
- net/hns3: support filtering registers by module names
- net/hns3: support reporting names of registers
- net/hns3: refactor register dump
- net/hns3: remove separators between register module
- net/hns3: fix dump counter of registers
- net/hns3: remove some basic address dump
- telemetry: register command with private argument
- ethdev: fix race on ports in telemetry endpoints
- ethdev: add telemetry command for registers
- ethdev: add report of register names and filter
- net/hns3: support outer VLAN flow match
- net/hns3: register VLAN flow match mode parameter
- net/hns3: support general tunnel flow match
- net/hns3: restrict tunnel flow rule to one header
- net/hns3: remove ROH devices
- net/hns3: dump queue head and tail pointer info
- dmadev: fix potential null pointer access
- net/hns3: verify reset type from firmware
- ethdev: verify queue ID in Tx done cleanup

Signed-off-by: Dengdui Huang <huangdengdui@huawei.com>
(cherry picked from commit a1c828e1eb9cf716187d2a7656023e95bdce9b55)
2024-11-22 10:06:01 +08:00

105 lines
3.4 KiB
Diff

From 839eb2318fe2353e6a602ca5398969b501e9cc90 Mon Sep 17 00:00:00 2001
From: Dengdui Huang <huangdengdui@huawei.com>
Date: Thu, 5 Sep 2024 14:48:03 +0800
Subject: [PATCH] net/hns3: dump queue head and tail pointer info
[ upstream commit 364a31b7628536ad7c5fb68603e11c5b166df248 ]
Add dump the head and tail pointer of RxTx queue.
-- Rx queue head and tail info:
qid sw_head sw_hold hw_head hw_tail
0 288 32 256 320
1 248 56 192 280
2 264 72 192 296
3 256 64 192 292
-- Tx queue head and tail info:
qid sw_head sw_tail hw_head hw_tail
0 0 92 84 92
1 32 131 128 139
2 32 128 120 128
3 96 184 176 184
Signed-off-by: Dengdui Huang <huangdengdui@huawei.com>
---
drivers/net/hns3/hns3_dump.c | 57 ++++++++++++++++++++++++++++++++++++
1 file changed, 57 insertions(+)
diff --git a/drivers/net/hns3/hns3_dump.c b/drivers/net/hns3/hns3_dump.c
index cb369be..5fee082 100644
--- a/drivers/net/hns3/hns3_dump.c
+++ b/drivers/net/hns3/hns3_dump.c
@@ -436,6 +436,62 @@ hns3_get_rxtx_queue_enable_state(FILE *file, struct rte_eth_dev *dev)
rte_free(tx_queue_state);
}
+static void
+hns3_get_rxtx_queue_head_tail_pointer(FILE *file, struct rte_eth_dev *dev)
+{
+ struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+ uint32_t reg_offset, queue_id;
+ void **rx_queues, **tx_queues;
+ struct hns3_rx_queue *rxq;
+ struct hns3_tx_queue *txq;
+ uint16_t sw_hold;
+
+ rx_queues = dev->data->rx_queues;
+ if (rx_queues == NULL)
+ return;
+ tx_queues = dev->data->tx_queues;
+ if (tx_queues == NULL)
+ return;
+
+ fprintf(file, "\t -- Rx queue head and tail info:\n");
+ fprintf(file, "\t qid sw_head sw_hold hw_head hw_tail\n");
+ for (queue_id = 0; queue_id < dev->data->nb_rx_queues; queue_id++) {
+ if (rx_queues[queue_id] == NULL)
+ continue;
+ rxq = (struct hns3_rx_queue *)rx_queues[queue_id];
+ if (rxq->rx_deferred_start)
+ continue;
+
+ if (dev->rx_pkt_burst == hns3_recv_pkts_vec ||
+ dev->rx_pkt_burst == hns3_recv_pkts_vec_sve)
+ sw_hold = rxq->rx_rearm_nb;
+ else
+ sw_hold = rxq->rx_free_hold;
+
+ reg_offset = hns3_get_tqp_reg_offset(queue_id);
+ fprintf(file, "\t %-5u%-9u%-9u%-9u%u\n", queue_id,
+ rxq->next_to_use, sw_hold,
+ hns3_read_dev(hw, HNS3_RING_RX_HEAD_REG + reg_offset),
+ hns3_read_dev(hw, HNS3_RING_RX_TAIL_REG + reg_offset));
+ }
+
+ fprintf(file, "\t -- Tx queue head and tail info:\n");
+ fprintf(file, "\t qid sw_head sw_tail hw_head hw_tail\n");
+ for (queue_id = 0; queue_id < dev->data->nb_tx_queues; queue_id++) {
+ if (tx_queues[queue_id] == NULL)
+ continue;
+ txq = (struct hns3_tx_queue *)tx_queues[queue_id];
+ if (txq->tx_deferred_start)
+ continue;
+
+ reg_offset = hns3_get_tqp_reg_offset(queue_id);
+ fprintf(file, "\t %-5u%-9u%-9u%-9u%u\n", queue_id,
+ txq->next_to_clean, txq->next_to_use,
+ hns3_read_dev(hw, HNS3_RING_TX_HEAD_REG + reg_offset),
+ hns3_read_dev(hw, HNS3_RING_TX_TAIL_REG + reg_offset));
+ }
+}
+
static void
hns3_get_rxtx_queue_info(FILE *file, struct rte_eth_dev *dev)
{
@@ -460,6 +516,7 @@ hns3_get_rxtx_queue_info(FILE *file, struct rte_eth_dev *dev)
hns3_get_rxtx_fake_queue_info(file, dev);
hns3_get_rxtx_queue_enable_state(file, dev);
+ hns3_get_rxtx_queue_head_tail_pointer(file, dev);
}
static int
--
2.33.0