ath9k: move workqueue cancels to stop callback
authorLuis R. Rodriguez <lrodriguez@atheros.com>
Mon, 27 Jul 2009 18:53:04 +0000 (11:53 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 4 Aug 2009 20:43:19 +0000 (16:43 -0400)
We should be cancelling our work at the stop callback since
we are borrowing the mac80211 workqueue for our work. As it
stands mac80211 expects this for suspend purposes.

The ath9k specific virtual wiphy stuff need only be
cancelled only when the we have no secondary virtual wiphys.

Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/main.c

index 7437b4295b2cbecc424edf64bda0f309ea347806..cf44623b5cd2563e321daf64147c17f1cbbe4929 100644 (file)
@@ -1251,11 +1251,6 @@ void ath_detach(struct ath_softc *sc)
 
        DPRINTF(sc, ATH_DBG_CONFIG, "Detach ATH hw\n");
 
-       cancel_delayed_work_sync(&sc->ath_led_blink_work);
-       cancel_delayed_work_sync(&sc->tx_complete_work);
-       cancel_delayed_work_sync(&sc->wiphy_work);
-       cancel_work_sync(&sc->chan_work);
-
        ath_deinit_leds(sc);
 
        for (i = 0; i < sc->num_sec_wiphy; i++) {
@@ -2091,6 +2086,14 @@ static void ath9k_stop(struct ieee80211_hw *hw)
 
        aphy->state = ATH_WIPHY_INACTIVE;
 
+       cancel_delayed_work_sync(&sc->ath_led_blink_work);
+       cancel_delayed_work_sync(&sc->tx_complete_work);
+
+       if (!sc->num_sec_wiphy) {
+               cancel_delayed_work_sync(&sc->wiphy_work);
+               cancel_work_sync(&sc->chan_work);
+       }
+
        if (sc->sc_flags & SC_OP_INVALID) {
                DPRINTF(sc, ATH_DBG_ANY, "Device not present\n");
                return;