diff options
author | Rafael J. Wysocki <rjw@sisk.pl> | 2010-10-25 09:01:55 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-10-26 14:34:09 -0400 |
commit | f2dc0d1809ab7e0147c7e4ac837be1682f706538 (patch) | |
tree | 1b97e8fda5b7893cf3e227f091b91c92e8cc8334 /drivers/net/tg3.c | |
parent | 78fd9c4491a9c4cf8b401f1c5a516d3d28d3b42b (diff) |
tg3: Do not call device_set_wakeup_enable() under spin_lock_bh
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>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/tg3.c')
-rw-r--r-- | drivers/net/tg3.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 852e917778f8..30ccbb6d097a 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -9948,16 +9948,16 @@ static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) | |||
9948 | !((tp->tg3_flags & TG3_FLAG_WOL_CAP) && device_can_wakeup(dp))) | 9948 | !((tp->tg3_flags & TG3_FLAG_WOL_CAP) && device_can_wakeup(dp))) |
9949 | return -EINVAL; | 9949 | return -EINVAL; |
9950 | 9950 | ||
9951 | device_set_wakeup_enable(dp, wol->wolopts & WAKE_MAGIC); | ||
9952 | |||
9951 | spin_lock_bh(&tp->lock); | 9953 | spin_lock_bh(&tp->lock); |
9952 | if (wol->wolopts & WAKE_MAGIC) { | 9954 | if (device_may_wakeup(dp)) |
9953 | tp->tg3_flags |= TG3_FLAG_WOL_ENABLE; | 9955 | tp->tg3_flags |= TG3_FLAG_WOL_ENABLE; |
9954 | device_set_wakeup_enable(dp, true); | 9956 | else |
9955 | } else { | ||
9956 | tp->tg3_flags &= ~TG3_FLAG_WOL_ENABLE; | 9957 | tp->tg3_flags &= ~TG3_FLAG_WOL_ENABLE; |
9957 | device_set_wakeup_enable(dp, false); | ||
9958 | } | ||
9959 | spin_unlock_bh(&tp->lock); | 9958 | spin_unlock_bh(&tp->lock); |
9960 | 9959 | ||
9960 | |||
9961 | return 0; | 9961 | return 0; |
9962 | } | 9962 | } |
9963 | 9963 | ||