浏览代码

ath9k: re-order cancelling of work on mac80211 workqueue

ath9k uses the mac80211 workqueue for 4 different types of work:

 * Led blink work
 * TX hang monitoring work
 * internal wiphy schedular work
 * channel change work done for internal wiphy schedular

Since the internal wiphy schedular can end up kicking off some
channel channel change work we should first cancel the wiphy
schedular work and then the channel change work.

The TX hang work can be cancelled second since we're going down
anyway.

Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Luis R. Rodriguez 16 年之前
父节点
当前提交
9851bad7a3
共有 1 个文件被更改,包括 2 次插入2 次删除
  1. 2 2
      drivers/net/wireless/ath/ath9k/main.c

+ 2 - 2
drivers/net/wireless/ath/ath9k/main.c

@@ -1252,9 +1252,9 @@ void ath_detach(struct ath_softc *sc)
 	DPRINTF(sc, ATH_DBG_CONFIG, "Detach ATH hw\n");
 	DPRINTF(sc, ATH_DBG_CONFIG, "Detach ATH hw\n");
 
 
 	ath_deinit_leds(sc);
 	ath_deinit_leds(sc);
-	cancel_work_sync(&sc->chan_work);
-	cancel_delayed_work_sync(&sc->wiphy_work);
 	cancel_delayed_work_sync(&sc->tx_complete_work);
 	cancel_delayed_work_sync(&sc->tx_complete_work);
+	cancel_delayed_work_sync(&sc->wiphy_work);
+	cancel_work_sync(&sc->chan_work);
 
 
 	for (i = 0; i < sc->num_sec_wiphy; i++) {
 	for (i = 0; i < sc->num_sec_wiphy; i++) {
 		struct ath_wiphy *aphy = sc->sec_wiphy[i];
 		struct ath_wiphy *aphy = sc->sec_wiphy[i];