* number of BSSIDs) if a given beacon does not go out even after waiting this
  * number of beacon intervals, the game's up.
  */
-#define BSTUCK_THRESH                  (9 * ATH_BCBUF)
+#define BSTUCK_THRESH                  9
 #define        ATH_BCBUF                       4
 #define ATH_DEFAULT_BINTVAL            100 /* TU */
 #define ATH_DEFAULT_BMISS_LIMIT        10
 
        if (ath9k_hw_numtxpending(ah, sc->beacon.beaconq) != 0) {
                sc->beacon.bmisscnt++;
 
-               if (sc->beacon.bmisscnt < BSTUCK_THRESH) {
+               if (sc->beacon.bmisscnt < BSTUCK_THRESH * sc->nbcnvifs) {
                        ath_dbg(common, ATH_DBG_BSTUCK,
                                "missed %u consecutive beacons\n",
                                sc->beacon.bmisscnt);
                return;
        }
 
-       if (sc->beacon.bmisscnt != 0) {
-               ath_dbg(common, ATH_DBG_BSTUCK,
-                       "resume beacon xmit after %u misses\n",
-                       sc->beacon.bmisscnt);
-               sc->beacon.bmisscnt = 0;
-       }
-
        /*
         * Generate beacon frames. we are sending frames
         * staggered so calculate the slot for this frame based
                        bfaddr = bf->bf_daddr;
                        bc = 1;
                }
+
+               if (sc->beacon.bmisscnt != 0) {
+                       ath_dbg(common, ATH_DBG_BSTUCK,
+                               "resume beacon xmit after %u misses\n",
+                               sc->beacon.bmisscnt);
+                       sc->beacon.bmisscnt = 0;
+               }
        }
 
        /*