Skip to content

Commit 2f0f946

Browse files
Yajun Dengdavem330
authored andcommitted
net: sched: Print msecs when transmit queue time out
The kernel will print several warnings in a short period of time when it stalls. Like this: First warning: [ 7100.097547] ------------[ cut here ]------------ [ 7100.097550] NETDEV WATCHDOG: eno2 (xxx): transmit queue 8 timed out [ 7100.097571] WARNING: CPU: 8 PID: 0 at net/sched/sch_generic.c:467 dev_watchdog+0x260/0x270 ... Second warning: [ 7147.756952] rcu: INFO: rcu_preempt self-detected stall on CPU [ 7147.756958] rcu: 24-....: (59999 ticks this GP) idle=546/1/0x400000000000000 softirq=367 3137/3673146 fqs=13844 [ 7147.756960] (t=60001 jiffies g=4322709 q=133381) [ 7147.756962] NMI backtrace for cpu 24 ... We calculate that the transmit queue start stall should occur before 7095s according to watchdog_timeo, the rcu start stall at 7087s. These two times are close together, it is difficult to confirm which happened first. To let users know the exact time the stall started, print msecs when the transmit queue time out. Signed-off-by: Yajun Deng <yajun.deng@linux.dev> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 00266b3 commit 2f0f946

1 file changed

Lines changed: 5 additions & 5 deletions

File tree

net/sched/sch_generic.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -502,7 +502,7 @@ static void dev_watchdog(struct timer_list *t)
502502
if (netif_device_present(dev) &&
503503
netif_running(dev) &&
504504
netif_carrier_ok(dev)) {
505-
int some_queue_timedout = 0;
505+
unsigned int timedout_ms = 0;
506506
unsigned int i;
507507
unsigned long trans_start;
508508

@@ -514,16 +514,16 @@ static void dev_watchdog(struct timer_list *t)
514514
if (netif_xmit_stopped(txq) &&
515515
time_after(jiffies, (trans_start +
516516
dev->watchdog_timeo))) {
517-
some_queue_timedout = 1;
517+
timedout_ms = jiffies_to_msecs(jiffies - trans_start);
518518
atomic_long_inc(&txq->trans_timeout);
519519
break;
520520
}
521521
}
522522

523-
if (unlikely(some_queue_timedout)) {
523+
if (unlikely(timedout_ms)) {
524524
trace_net_dev_xmit_timeout(dev, i);
525-
WARN_ONCE(1, KERN_INFO "NETDEV WATCHDOG: %s (%s): transmit queue %u timed out\n",
526-
dev->name, netdev_drivername(dev), i);
525+
WARN_ONCE(1, "NETDEV WATCHDOG: %s (%s): transmit queue %u timed out %u ms\n",
526+
dev->name, netdev_drivername(dev), i, timedout_ms);
527527
netif_freeze_queues(dev);
528528
dev->netdev_ops->ndo_tx_timeout(dev, i);
529529
netif_unfreeze_queues(dev);

0 commit comments

Comments
 (0)