Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f2dc0d18 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki Committed by David S. Miller
Browse files

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: default avatarMaxim Levitsky <maximlevitsky@gmail.com>
Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 78fd9c44
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -9948,16 +9948,16 @@ static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
	    !((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;
}