diff mbox

[e1000_netpoll] BUG: sleeping function called from invalid context at kernel/irq/manage.c:110

Message ID 8578bb16-cd04-e8a5-c7f4-be061ede95b4@gmail.com
State Not Applicable
Headers show

Commit Message

Nicholas Krause July 26, 2016, 12:48 p.m. UTC
On 2016-07-26 05:50 AM, Thomas Gleixner wrote:
> On Tue, 26 Jul 2016, Fengguang Wu wrote:
>> --- a/drivers/net/ethernet/intel/e1000/e1000_main.c
>> +++ b/drivers/net/ethernet/intel/e1000/e1000_main.c
>> @@ -3797,7 +3797,7 @@ static irqreturn_t e1000_intr(int irq, void *data)
>> 		hw->get_link_status = 1;
>> 		/* guard against interrupt when we're going down */
>> 		if (!test_bit(__E1000_DOWN, &adapter->flags))
>> -			schedule_delayed_work(&adapter->watchdog_task, 1);
>> +			mod_timer(&adapter->watchdog_timer, jiffies + 1);
> 
> ROTFL ....
> 
Thomas,
Yes it's a pretty funny typo, below is a patch that fixes the build error
 as reported by kbuild robot:
From 013dbc315c452d37d565e9c27b90b02239b5a1bb Mon Sep 17 00:00:00 2001
From: Nicholas Krause <xerofoify@gmail.com>
Date: Tue, 26 Jul 2016 08:43:56 -0400
Subject: [PATCH] use atomic mod timer rather then schedule work

Signed-off-by: Nicholas Krause <xerofoify@gmail.com>
---
 drivers/net/ethernet/intel/e1000/e1000_main.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Thomas Gleixner July 28, 2016, 7:45 a.m. UTC | #1
On Tue, 26 Jul 2016, nick wrote:
> diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c
> index f42129d..e1830af 100644
> --- a/drivers/net/ethernet/intel/e1000/e1000_main.c
> +++ b/drivers/net/ethernet/intel/e1000/e1000_main.c
> @@ -3797,7 +3797,7 @@ static irqreturn_t e1000_intr(int irq, void *data)
>  		hw->get_link_status = 1;
>  		/* guard against interrupt when we're going down */
>  		if (!test_bit(__E1000_DOWN, &adapter->flags))
> -			schedule_delayed_work(&adapter->watchdog_task, 1);
> +			mod_work(&adapter->watchdog_task, jiffies + 1);

And that's not even funny anymore. Are you using a random generator to create
these patches?
Valdis Kl ē tnieks July 28, 2016, 9:46 a.m. UTC | #2
On Thu, 28 Jul 2016 09:45:12 +0200, Thomas Gleixner said:
> On Tue, 26 Jul 2016, nick wrote:
> > diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c
> > index f42129d..e1830af 100644
> > --- a/drivers/net/ethernet/intel/e1000/e1000_main.c
> > +++ b/drivers/net/ethernet/intel/e1000/e1000_main.c
> > @@ -3797,7 +3797,7 @@ static irqreturn_t e1000_intr(int irq, void *data)
> >  		hw->get_link_status = 1;
> >  		/* guard against interrupt when we're going down */
> >  		if (!test_bit(__E1000_DOWN, &adapter->flags))
> > -			schedule_delayed_work(&adapter->watchdog_task, 1);
> > +			mod_work(&adapter->watchdog_task, jiffies + 1);
>
> And that's not even funny anymore. Are you using a random generator to create
> these patches?

At some point, we need to decide if the occasional accidentally-correct
trivial patch from Nick is worth all the wasted maintainer time.
diff mbox

Patch

diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c
index f42129d..e1830af 100644
--- a/drivers/net/ethernet/intel/e1000/e1000_main.c
+++ b/drivers/net/ethernet/intel/e1000/e1000_main.c
@@ -3797,7 +3797,7 @@  static irqreturn_t e1000_intr(int irq, void *data)
 		hw->get_link_status = 1;
 		/* guard against interrupt when we're going down */
 		if (!test_bit(__E1000_DOWN, &adapter->flags))
-			schedule_delayed_work(&adapter->watchdog_task, 1);
+			mod_work(&adapter->watchdog_task, jiffies + 1);
 	}
 
 	/* disable interrupts, without the synchronize_irq bit */