From: Jesper Dangaard Brouer Add the per-queue timeout counter (trans_timeout) to the core NETDEV WATCHDOG log message. This makes it easy to determine how frequently a particular queue is stalling from a single log line, without having to search through and correlate spaced-out log entries. Useful for production monitoring where timeouts are spaced by the watchdog interval, making frequency hard to judge. Suggested-by: Jakub Kicinski Link: https://lore.kernel.org/all/20251107175445.58eba452@kernel.org/ Signed-off-by: Jesper Dangaard Brouer Tested-by: Jonas Köppeler --- net/sched/sch_generic.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index 69d5ac4f17d1..da97cda1a1e7 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c @@ -533,13 +533,12 @@ static void dev_watchdog(struct timer_list *t) netif_running(dev) && netif_carrier_ok(dev)) { unsigned int timedout_ms = 0; + struct netdev_queue *txq; unsigned int i; unsigned long trans_start; unsigned long oldest_start = jiffies; for (i = 0; i < dev->num_tx_queues; i++) { - struct netdev_queue *txq; - txq = netdev_get_tx_queue(dev, i); if (!netif_xmit_stopped(txq)) continue; @@ -561,9 +560,10 @@ static void dev_watchdog(struct timer_list *t) if (unlikely(timedout_ms)) { trace_net_dev_xmit_timeout(dev, i); - netdev_crit(dev, "NETDEV WATCHDOG: CPU: %d: transmit queue %u timed out %u ms\n", + netdev_crit(dev, "NETDEV WATCHDOG: CPU: %d: transmit queue %u timed out %u ms (n:%ld)\n", raw_smp_processor_id(), - i, timedout_ms); + i, timedout_ms, + atomic_long_read(&txq->trans_timeout)); netif_freeze_queues(dev); dev->netdev_ops->ndo_tx_timeout(dev, i); netif_unfreeze_queues(dev); -- 2.43.0