All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH wireless-2.6 v2] rt2x00: fix rmmod crash
@ 2011-06-04 14:48 Stanislaw Gruszka
  2011-06-04 17:29 ` Stanislaw Gruszka
  2011-06-04 18:56 ` [PATCH wireless-2.6 v2] rt2x00: fix rmmod crash Ivo Van Doorn
  0 siblings, 2 replies; 9+ messages in thread
From: Stanislaw Gruszka @ 2011-06-04 14:48 UTC (permalink / raw)
  To: Ivo van Doorn; +Cc: Helmut Schaa, linux-wireless, Gertjan van Wingerde

Avoid queue and run autowakeup_work when device is not present anymore.
That prevent rmmod and device remove crash introduced by:

commit 1c0bcf89d85cc97a0d9ce4cd909351a81fa4fdde
Author: Ivo van Doorn <ivdoorn@gmail.com>
Date:   Sat Apr 30 17:18:18 2011 +0200

    rt2x00: Add autowake support for USB hardware

Signed-off-by: Stanislaw Gruszka <stf_xl@wp.pl>
---
 drivers/net/wireless/rt2x00/rt2x00config.c |    3 ++-
 drivers/net/wireless/rt2x00/rt2x00dev.c    |    4 ++++
 2 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/drivers/net/wireless/rt2x00/rt2x00config.c b/drivers/net/wireless/rt2x00/rt2x00config.c
index 555180d..b704e5b 100644
--- a/drivers/net/wireless/rt2x00/rt2x00config.c
+++ b/drivers/net/wireless/rt2x00/rt2x00config.c
@@ -250,7 +250,8 @@ void rt2x00lib_config(struct rt2x00_dev *rt2x00dev,
 	if (ieee80211_flags & IEEE80211_CONF_CHANGE_CHANNEL)
 		rt2x00link_reset_tuner(rt2x00dev, false);
 
-	if (test_bit(REQUIRE_PS_AUTOWAKE, &rt2x00dev->cap_flags) &&
+	if (test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags) &&
+	    test_bit(REQUIRE_PS_AUTOWAKE, &rt2x00dev->cap_flags) &&
 	    (ieee80211_flags & IEEE80211_CONF_CHANGE_PS) &&
 	    (conf->flags & IEEE80211_CONF_PS)) {
 		beacon_diff = (long)jiffies - (long)rt2x00dev->last_beacon;
diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c
index c018d67..939821b 100644
--- a/drivers/net/wireless/rt2x00/rt2x00dev.c
+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
@@ -146,6 +146,9 @@ static void rt2x00lib_autowakeup(struct work_struct *work)
 	struct rt2x00_dev *rt2x00dev =
 	    container_of(work, struct rt2x00_dev, autowakeup_work.work);
 
+	if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
+		return;
+
 	if (rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_AWAKE))
 		ERROR(rt2x00dev, "Device failed to wakeup.\n");
 	clear_bit(CONFIG_POWERSAVING, &rt2x00dev->flags);
@@ -1160,6 +1163,7 @@ void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev)
 	 * Stop all work.
 	 */
 	cancel_work_sync(&rt2x00dev->intf_work);
+	cancel_delayed_work_sync(&rt2x00dev->autowakeup_work);
 	if (rt2x00_is_usb(rt2x00dev)) {
 		del_timer_sync(&rt2x00dev->txstatus_timer);
 		cancel_work_sync(&rt2x00dev->rxdone_work);
-- 
1.7.4


^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2011-06-20 18:13 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-06-04 14:48 [PATCH wireless-2.6 v2] rt2x00: fix rmmod crash Stanislaw Gruszka
2011-06-04 17:29 ` Stanislaw Gruszka
2011-06-05 11:30   ` Stanislaw Gruszka
2011-06-19 17:44   ` Stanislaw Gruszka
2011-06-19 17:46   ` [PATCH 1/2] rt2x00: fix possible memory corruption in case of invalid rxdesc.size Stanislaw Gruszka
2011-06-19 17:47     ` [PATCH 2/2] rt2x00: reset usb devices at probe Stanislaw Gruszka
2011-06-20 18:13       ` Ivo Van Doorn
2011-06-20 18:12     ` [PATCH 1/2] rt2x00: fix possible memory corruption in case of invalid rxdesc.size Ivo Van Doorn
2011-06-04 18:56 ` [PATCH wireless-2.6 v2] rt2x00: fix rmmod crash Ivo Van Doorn

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.