mac80211: fix suspend
authorJohannes Berg <johannes@sipsolutions.net>
Tue, 28 Jul 2009 16:10:17 +0000 (18:10 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 29 Jul 2009 18:52:01 +0000 (14:52 -0400)
commit89c3a8aca28e6d57f2ae945d97858a372d624b81
treee6ab04353cfc202bc7ecbd58d57c2d1790381a7c
parent57921c312e8cef72ba35a4cfe870b376da0b1b87
mac80211: fix suspend

Jan reported that his b43-based laptop hangs during suspend.
The problem turned out to be mac80211 asking the driver to
stop the hardware before removing interfaces, and interface
removal caused b43 to touch the hardware (while down, which
causes the hang).

This patch fixes mac80211 to do reorder these operations to
have them in the correct order -- first remove interfaces
and then stop the hardware. Some more code is necessary to
be able to do so in a race-free manner, in particular it is
necessary to not process frames received during quiescing.

Fixes http://bugzilla.kernel.org/show_bug.cgi?id=13337.

Reported-by: Jan Scholz <scholz@fias.uni-frankfurt.de>
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/pm.c
net/mac80211/rx.c