| Submitter | Rafael J. Wysocki |
|---|---|
| Date | Oct. 25, 2010, 11:01 p.m. |
| Message ID | <201010260101.56128.rjw@sisk.pl> |
| Download | mbox | patch |
| Permalink | /patch/69147/ |
| State | Accepted |
| Delegated to: | David Miller |
| Headers | show |
Comments
From: "Rafael J. Wysocki" <rjw@sisk.pl> Date: Tue, 26 Oct 2010 01:01:55 +0200 > From: Rafael J. Wysocki <rjw@sisk.pl> > > The tg3 driver calls device_set_wakeup_enable() under spin_lock_bh, > which causes a problem to happen after the recent core power > management changes, because this function can sleep now. Fix this > by moving the device_set_wakeup_enable() call out of the > spin_lock_bh-protected area. > > Reported-by: Maxim Levitsky <maximlevitsky@gmail.com> > Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> Applied, thanks a lot. -- 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
Patch
Index: linux-2.6/drivers/net/tg3.c =================================================================== --- linux-2.6.orig/drivers/net/tg3.c +++ linux-2.6/drivers/net/tg3.c @@ -9732,16 +9732,16 @@ static int tg3_set_wol(struct net_device !((tp->tg3_flags & TG3_FLAG_WOL_CAP) && device_can_wakeup(dp))) return -EINVAL; + device_set_wakeup_enable(dp, wol->wolopts & WAKE_MAGIC); + spin_lock_bh(&tp->lock); - if (wol->wolopts & WAKE_MAGIC) { + if (device_may_wakeup(dp)) tp->tg3_flags |= TG3_FLAG_WOL_ENABLE; - device_set_wakeup_enable(dp, true); - } else { + else tp->tg3_flags &= ~TG3_FLAG_WOL_ENABLE; - device_set_wakeup_enable(dp, false); - } spin_unlock_bh(&tp->lock); + return 0; }