diff options
| -rw-r--r-- | drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 12 | ||||
| -rw-r--r-- | drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 2 | ||||
| -rw-r--r-- | include/net/netdev_queues.h | 11 |
3 files changed, 17 insertions, 8 deletions
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c index 7a0654e2d3dd..7b9269f6fdfc 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c @@ -25,6 +25,7 @@ #include <net/tcp.h> #include <net/vxlan.h> #include <net/geneve.h> +#include <net/netdev_queues.h> #include "hnae3.h" #include "hns3_enet.h" @@ -2807,14 +2808,12 @@ static int hns3_get_timeout_queue(struct net_device *ndev) /* 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 long trans_start; q = netdev_get_tx_queue(ndev, i); - trans_start = READ_ONCE(q->trans_start); - if (netif_xmit_stopped(q) && - time_after(jiffies, - (trans_start + ndev->watchdog_timeo))) { + timedout_ms = netif_xmit_timeout_ms(q); + if (timedout_ms) { #ifdef CONFIG_BQL struct dql *dql = &q->dql; @@ -2823,8 +2822,7 @@ static int hns3_get_timeout_queue(struct net_device *ndev) dql->adj_limit, dql->num_completed); #endif netdev_info(ndev, "queue state: 0x%lx, delta msecs: %u\n", - q->state, - jiffies_to_msecs(jiffies - trans_start)); + q->state, timedout_ms); break; } } diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c index 3ac47df83ac8..7dbcf71404d8 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c @@ -5137,7 +5137,7 @@ static void mlx5e_tx_timeout_work(struct work_struct *work) netdev_get_tx_queue(netdev, i); struct mlx5e_txqsq *sq = priv->txq2sq[i]; - if (!netif_xmit_stopped(dev_queue)) + if (!netif_xmit_timeout_ms(dev_queue)) continue; if (mlx5e_reporter_tx_timeout(sq)) diff --git a/include/net/netdev_queues.h b/include/net/netdev_queues.h index cd00e0406cf4..b55d3b9cb9c2 100644 --- a/include/net/netdev_queues.h +++ b/include/net/netdev_queues.h @@ -310,6 +310,17 @@ static inline void netif_subqueue_sent(const struct net_device *dev, netdev_tx_sent_queue(txq, bytes); } +static inline unsigned int netif_xmit_timeout_ms(struct netdev_queue *txq) +{ + unsigned long trans_start = READ_ONCE(txq->trans_start); + + if (netif_xmit_stopped(txq) && + time_after(jiffies, trans_start + txq->dev->watchdog_timeo)) + return jiffies_to_msecs(jiffies - trans_start); + + return 0; +} + #define netif_subqueue_maybe_stop(dev, idx, get_desc, stop_thrs, start_thrs) \ ({ \ struct netdev_queue *_txq; \ |
