[PATCH net-next 3/3] net: hns3: use txqueue parameter directly in ndo_tx_timeout
From: Jijie Shao
Date: Tue Aug 04 2026 - 09:19:58 EST
From: Jian Shen <shenjian15@xxxxxxxxxx>
The ndo_tx_timeout callback already provides the timed out txqueue
index. Use it directly instead of iterating all tx queues to find
the timed out one.
Signed-off-by: Jian Shen <shenjian15@xxxxxxxxxx>
Signed-off-by: Jijie Shao <shaojijie@xxxxxxxxxx>
---
.../net/ethernet/hisilicon/hns3/hns3_enet.c | 47 ++++++++-----------
1 file changed, 20 insertions(+), 27 deletions(-)
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
index 6ecb32e28e79..d0656289d68e 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
@@ -2825,32 +2825,25 @@ static int hns3_nic_change_mtu(struct net_device *netdev, int new_mtu)
return ret;
}
-static int hns3_get_timeout_queue(struct net_device *ndev)
+static void hns3_dump_timeout_queue(struct net_device *ndev,
+ unsigned int txqueue)
{
- unsigned int i;
-
- /* Find the stopped queue the same way the stack does */
- for (i = 0; i < ndev->num_tx_queues; i++) {
- unsigned int timedout_ms;
- struct netdev_queue *q;
+ unsigned int timedout_ms;
+ struct netdev_queue *q;
- q = netdev_get_tx_queue(ndev, i);
- timedout_ms = netif_xmit_timeout_ms(q);
- if (timedout_ms) {
+ q = netdev_get_tx_queue(ndev, txqueue);
+ timedout_ms = netif_xmit_timeout_ms(q);
+ if (timedout_ms) {
#ifdef CONFIG_BQL
- struct dql *dql = &q->dql;
+ struct dql *dql = &q->dql;
- netdev_info(ndev, "DQL info last_cnt: %u, queued: %u, adj_limit: %u, completed: %u\n",
- dql->last_obj_cnt, dql->num_queued,
- dql->adj_limit, dql->num_completed);
+ netdev_info(ndev, "DQL info last_cnt: %u, queued: %u, adj_limit: %u, completed: %u\n",
+ dql->last_obj_cnt, dql->num_queued,
+ dql->adj_limit, dql->num_completed);
#endif
- netdev_info(ndev, "queue state: 0x%lx, delta msecs: %u\n",
- q->state, timedout_ms);
- break;
- }
+ netdev_info(ndev, "queue state: 0x%lx, delta msecs: %u\n",
+ q->state, timedout_ms);
}
-
- return i;
}
static void hns3_dump_queue_stats(struct net_device *ndev,
@@ -2900,25 +2893,25 @@ static void hns3_dump_queue_reg(struct net_device *ndev,
HNS3_RING_TX_RING_EBD_OFFSET_REG));
}
-static bool hns3_get_tx_timeo_queue_info(struct net_device *ndev)
+static bool hns3_get_tx_timeo_queue_info(struct net_device *ndev,
+ unsigned int txqueue)
{
struct hns3_nic_priv *priv = netdev_priv(ndev);
struct hnae3_handle *h = hns3_get_handle(ndev);
struct hns3_enet_ring *tx_ring;
- u32 timeout_queue;
- timeout_queue = hns3_get_timeout_queue(ndev);
- if (timeout_queue >= ndev->num_tx_queues) {
+ if (txqueue >= ndev->num_tx_queues) {
netdev_info(ndev,
"no netdev TX timeout queue found, timeout count: %llu\n",
priv->tx_timeout_count);
return false;
}
+ hns3_dump_timeout_queue(ndev, txqueue);
priv->tx_timeout_count++;
- tx_ring = &priv->ring[timeout_queue];
- hns3_dump_queue_stats(ndev, tx_ring, timeout_queue);
+ tx_ring = &priv->ring[txqueue];
+ hns3_dump_queue_stats(ndev, tx_ring, txqueue);
/* When mac received many pause frames continuous, it's unable to send
* packets, which may cause tx timeout
@@ -2941,7 +2934,7 @@ static void hns3_nic_net_timeout(struct net_device *ndev, unsigned int txqueue)
struct hns3_nic_priv *priv = netdev_priv(ndev);
struct hnae3_handle *h = priv->ae_handle;
- if (!hns3_get_tx_timeo_queue_info(ndev))
+ if (!hns3_get_tx_timeo_queue_info(ndev, txqueue))
return;
/* request the reset, and let the hclge to determine
--
2.43.0