Patchwork net: Ensure tx watchdog failures always print.

login
register
mail settings
Submitter Ben Greear
Date June 14, 2011, 4:50 p.m.
Message ID <1308070213-13244-1-git-send-email-greearb@candelatech.com>
Download mbox | patch
Permalink /patch/100372/
State Rejected
Delegated to: David Miller
Headers show

Comments

Ben Greear - June 14, 2011, 4:50 p.m.
From: Ben Greear <greearb@candelatech.com>

These are too important to not have some log message
generated.  But, keep the logic that only prints
a single stack dump.

Signed-off-by: Ben Greear <greearb@candelatech.com>
---
:100644 100644 90939ba... fce5558... M	net/sched/sch_generic.c
 net/sched/sch_generic.c |   16 ++++++++++++++--
 1 files changed, 14 insertions(+), 2 deletions(-)
Eric Dumazet - June 14, 2011, 5:14 p.m.
Le mardi 14 juin 2011 à 09:50 -0700, greearb@candelatech.com a écrit :
> From: Ben Greear <greearb@candelatech.com>
> 
> These are too important to not have some log message
> generated.  But, keep the logic that only prints
> a single stack dump.
> 
> Signed-off-by: Ben Greear <greearb@candelatech.com>
> ---
> :100644 100644 90939ba... fce5558... M	net/sched/sch_generic.c
>  net/sched/sch_generic.c |   16 ++++++++++++++--
>  1 files changed, 14 insertions(+), 2 deletions(-)
> 
> diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
> index 90939ba..fce5558 100644
> --- a/net/sched/sch_generic.c
> +++ b/net/sched/sch_generic.c
> @@ -252,8 +252,20 @@ static void dev_watchdog(unsigned long arg)
>  
>  			if (some_queue_timedout) {
>  				char drivername[64];
> -				WARN_ONCE(1, KERN_INFO "NETDEV WATCHDOG: %s (%s): transmit queue %u timed out\n",
> -				       dev->name, netdev_drivername(dev, drivername, 64), i);
> +				static bool do_once = true;
> +				printk(KERN_INFO "NETDEV WATCHDOG: %s (%s):"
> +				       " transmit queue %u timed out,"
> +				       " trans_start: %lu, wd-timeout: %i"
> +				       " jiffies: %lu tx-queues: %i\n",
> +				       dev->name,
> +				       netdev_drivername(dev, drivername, 64),
> +				       i,
> +				       trans_start, dev->watchdog_timeo,
> +				       jiffies, dev->num_tx_queues);
> +				if (do_once) {
> +					do_once = false;
> +					WARN_ON(1);

You could use WARN_ON_ONCE(1) here 

> +				}
>  				dev->netdev_ops->ndo_tx_timeout(dev);
>  			}
>  			if (!mod_timer(&dev->watchdog_timer,


--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Ben Greear - June 14, 2011, 5:25 p.m.
On 06/14/2011 10:14 AM, Eric Dumazet wrote:
> Le mardi 14 juin 2011 à 09:50 -0700, greearb@candelatech.com a écrit :
>> From: Ben Greear<greearb@candelatech.com>
>>
>> These are too important to not have some log message
>> generated.  But, keep the logic that only prints
>> a single stack dump.
>>
>> Signed-off-by: Ben Greear<greearb@candelatech.com>
>> ---
>> :100644 100644 90939ba... fce5558... M	net/sched/sch_generic.c
>>   net/sched/sch_generic.c |   16 ++++++++++++++--
>>   1 files changed, 14 insertions(+), 2 deletions(-)
>>
>> diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
>> index 90939ba..fce5558 100644
>> --- a/net/sched/sch_generic.c
>> +++ b/net/sched/sch_generic.c
>> @@ -252,8 +252,20 @@ static void dev_watchdog(unsigned long arg)
>>
>>   			if (some_queue_timedout) {
>>   				char drivername[64];
>> -				WARN_ONCE(1, KERN_INFO "NETDEV WATCHDOG: %s (%s): transmit queue %u timed out\n",
>> -				       dev->name, netdev_drivername(dev, drivername, 64), i);
>> +				static bool do_once = true;
>> +				printk(KERN_INFO "NETDEV WATCHDOG: %s (%s):"
>> +				       " transmit queue %u timed out,"
>> +				       " trans_start: %lu, wd-timeout: %i"
>> +				       " jiffies: %lu tx-queues: %i\n",
>> +				       dev->name,
>> +				       netdev_drivername(dev, drivername, 64),
>> +				       i,
>> +				       trans_start, dev->watchdog_timeo,
>> +				       jiffies, dev->num_tx_queues);
>> +				if (do_once) {
>> +					do_once = false;
>> +					WARN_ON(1);
>
> You could use WARN_ON_ONCE(1) here

Er, right..don't know what I was thinking.

Will re-send.

Thanks,
Ben

>
>> +				}
>>   				dev->netdev_ops->ndo_tx_timeout(dev);
>>   			}
>>   			if (!mod_timer(&dev->watchdog_timer,
>
David Miller - June 14, 2011, 5:33 p.m.
From: greearb@candelatech.com
Date: Tue, 14 Jun 2011 09:50:13 -0700

> From: Ben Greear <greearb@candelatech.com>
> 
> These are too important to not have some log message
> generated.  But, keep the logic that only prints
> a single stack dump.
> 
> Signed-off-by: Ben Greear <greearb@candelatech.com>

We specifically made this print out only once, and yes
all of it.

Because it spams people's logs to the point that the message
is not useful and only scrolls out other more important
messages.

I'm not applying this, sorry.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Miller - June 14, 2011, 5:34 p.m.
From: Ben Greear <greearb@candelatech.com>
Date: Tue, 14 Jun 2011 10:25:13 -0700

> Will re-send.

Please, don't bother, see my other reply.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Ben Greear - June 14, 2011, 5:41 p.m.
On 06/14/2011 10:33 AM, David Miller wrote:
> From: greearb@candelatech.com
> Date: Tue, 14 Jun 2011 09:50:13 -0700
>
>> From: Ben Greear<greearb@candelatech.com>
>>
>> These are too important to not have some log message
>> generated.  But, keep the logic that only prints
>> a single stack dump.
>>
>> Signed-off-by: Ben Greear<greearb@candelatech.com>
>
> We specifically made this print out only once, and yes
> all of it.
>
> Because it spams people's logs to the point that the message
> is not useful and only scrolls out other more important
> messages.
>
> I'm not applying this, sorry.

Is it really legit for a driver to spam this message?  I hit
this due to bugs in my code that sent pkts to the wrong
driver queue, but aside from that, we rarely if ever see
the message print.

Thanks,
Ben

Patch

diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
index 90939ba..fce5558 100644
--- a/net/sched/sch_generic.c
+++ b/net/sched/sch_generic.c
@@ -252,8 +252,20 @@  static void dev_watchdog(unsigned long arg)
 
 			if (some_queue_timedout) {
 				char drivername[64];
-				WARN_ONCE(1, KERN_INFO "NETDEV WATCHDOG: %s (%s): transmit queue %u timed out\n",
-				       dev->name, netdev_drivername(dev, drivername, 64), i);
+				static bool do_once = true;
+				printk(KERN_INFO "NETDEV WATCHDOG: %s (%s):"
+				       " transmit queue %u timed out,"
+				       " trans_start: %lu, wd-timeout: %i"
+				       " jiffies: %lu tx-queues: %i\n",
+				       dev->name,
+				       netdev_drivername(dev, drivername, 64),
+				       i,
+				       trans_start, dev->watchdog_timeo,
+				       jiffies, dev->num_tx_queues);
+				if (do_once) {
+					do_once = false;
+					WARN_ON(1);
+				}
 				dev->netdev_ops->ndo_tx_timeout(dev);
 			}
 			if (!mod_timer(&dev->watchdog_timer,