Message ID | 201010260101.56128.rjw@sisk.pl |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
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
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; }