ath9k: skip beaconing when reset work is pending
authorRajkumar Manoharan <rmanohar@qca.qualcomm.com>
Fri, 13 Apr 2012 11:14:21 +0000 (16:44 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 16 Apr 2012 18:38:45 +0000 (14:38 -0400)
Whenever the reset work is queued up, do not generate beacon. And also
clear the beacon miss count once the beacon stuck was observed.

Signed-off-by: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/beacon.c

index 1bf2f57b091c980536aaf5dcbe25658581c82b2f..f20610b1d2ce8e0e226d01affc05f0d183956106 100644 (file)
@@ -359,6 +359,11 @@ void ath_beacon_tasklet(unsigned long data)
        int slot;
        u32 bfaddr, bc = 0;
 
+       if (work_pending(&sc->hw_reset_work)) {
+               ath_dbg(common, RESET,
+                       "reset work is pending, skip beaconing now\n");
+               return;
+       }
        /*
         * Check if the previous beacon has gone out.  If
         * not don't try to post another, skip this period
@@ -381,6 +386,7 @@ void ath_beacon_tasklet(unsigned long data)
                                ath9k_hw_bstuck_nfcal(ah);
                } else if (sc->beacon.bmisscnt >= BSTUCK_THRESH) {
                        ath_dbg(common, BSTUCK, "beacon is officially stuck\n");
+                       sc->beacon.bmisscnt = 0;
                        sc->sc_flags |= SC_OP_TSF_RESET;
                        ieee80211_queue_work(sc->hw, &sc->hw_reset_work);
                }