aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorRajkumar Manoharan <rmanoharan@atheros.com>2011-04-08 07:36:25 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-04-12 16:58:43 -0400
commitf60c49b67dd6db2ccb740a6a671414f9dab00c4f (patch)
treefe447a905fbe88cd5972015ea452a971d22001c1 /drivers
parentd0ef824b9a712b866e38212089ade3a7114225a4 (diff)
ath9k: Fix kernel panic on module unload
The commit "ath9k: configure beacons based on hw opmode" introduced a regression which leads to kernel panic. Failed to stop ani timer during the driver unload while any of the beaconing vif is running. Signed-off-by: Rajkumar Manoharan <rmanoharan@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/ath/ath9k/beacon.c1
-rw-r--r--drivers/net/wireless/ath/ath9k/main.c3
2 files changed, 4 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath9k/beacon.c b/drivers/net/wireless/ath/ath9k/beacon.c
index eccb0ec87adb..b56f69e7677b 100644
--- a/drivers/net/wireless/ath/ath9k/beacon.c
+++ b/drivers/net/wireless/ath/ath9k/beacon.c
@@ -320,6 +320,7 @@ void ath_beacon_return(struct ath_softc *sc, struct ath_vif *avp)
320 if (avp->av_bcbuf != NULL) { 320 if (avp->av_bcbuf != NULL) {
321 struct ath_buf *bf; 321 struct ath_buf *bf;
322 322
323 avp->is_bslot_active = false;
323 if (avp->av_bslot != -1) { 324 if (avp->av_bslot != -1) {
324 sc->beacon.bslot[avp->av_bslot] = NULL; 325 sc->beacon.bslot[avp->av_bslot] = NULL;
325 sc->nbcnvifs--; 326 sc->nbcnvifs--;
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index 93b9fa2cbaf8..a55a8929810b 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -1375,6 +1375,9 @@ static void ath9k_calculate_summary_state(struct ieee80211_hw *hw,
1375 if ((iter_data.naps + iter_data.nadhocs) > 0) { 1375 if ((iter_data.naps + iter_data.nadhocs) > 0) {
1376 sc->sc_flags |= SC_OP_ANI_RUN; 1376 sc->sc_flags |= SC_OP_ANI_RUN;
1377 ath_start_ani(common); 1377 ath_start_ani(common);
1378 } else {
1379 sc->sc_flags &= ~SC_OP_ANI_RUN;
1380 del_timer_sync(&common->ani.timer);
1378 } 1381 }
1379} 1382}
1380 1383