Skip to content

Commit

Permalink
ath9k: fix missing ath9k_ps_wakeup/ath9k_ps_restore calls
Browse files Browse the repository at this point in the history
These missing chip wakeups mainly cause crashes on AR5416 cards in MIPS
boards, but have also been reported to cause radio stability issues on
AR9285.

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Cc: stable@kernel.org
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Felix Fietkau authored and John W. Linville committed Apr 8, 2011
1 parent bd39a27 commit 96f372c
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions drivers/net/wireless/ath/ath9k/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1376,7 +1376,6 @@ static void ath9k_calculate_summary_state(struct ieee80211_hw *hw,

ath9k_calculate_iter_data(hw, vif, &iter_data);

ath9k_ps_wakeup(sc);
/* Set BSSID mask. */
memcpy(common->bssidmask, iter_data.mask, ETH_ALEN);
ath_hw_setbssidmask(common);
Expand Down Expand Up @@ -1411,7 +1410,6 @@ static void ath9k_calculate_summary_state(struct ieee80211_hw *hw,
}

ath9k_hw_set_interrupts(ah, ah->imask);
ath9k_ps_restore(sc);

/* Set up ANI */
if ((iter_data.naps + iter_data.nadhocs) > 0) {
Expand Down Expand Up @@ -1457,6 +1455,7 @@ static int ath9k_add_interface(struct ieee80211_hw *hw,
struct ath_vif *avp = (void *)vif->drv_priv;
int ret = 0;

ath9k_ps_wakeup(sc);
mutex_lock(&sc->mutex);

switch (vif->type) {
Expand Down Expand Up @@ -1503,6 +1502,7 @@ static int ath9k_add_interface(struct ieee80211_hw *hw,
ath9k_do_vif_add_setup(hw, vif);
out:
mutex_unlock(&sc->mutex);
ath9k_ps_restore(sc);
return ret;
}

Expand All @@ -1517,6 +1517,7 @@ static int ath9k_change_interface(struct ieee80211_hw *hw,

ath_dbg(common, ATH_DBG_CONFIG, "Change Interface\n");
mutex_lock(&sc->mutex);
ath9k_ps_wakeup(sc);

/* See if new interface type is valid. */
if ((new_type == NL80211_IFTYPE_ADHOC) &&
Expand Down Expand Up @@ -1546,6 +1547,7 @@ static int ath9k_change_interface(struct ieee80211_hw *hw,

ath9k_do_vif_add_setup(hw, vif);
out:
ath9k_ps_restore(sc);
mutex_unlock(&sc->mutex);
return ret;
}
Expand All @@ -1558,6 +1560,7 @@ static void ath9k_remove_interface(struct ieee80211_hw *hw,

ath_dbg(common, ATH_DBG_CONFIG, "Detach Interface\n");

ath9k_ps_wakeup(sc);
mutex_lock(&sc->mutex);

sc->nvifs--;
Expand All @@ -1569,6 +1572,7 @@ static void ath9k_remove_interface(struct ieee80211_hw *hw,
ath9k_calculate_summary_state(hw, NULL);

mutex_unlock(&sc->mutex);
ath9k_ps_restore(sc);
}

static void ath9k_enable_ps(struct ath_softc *sc)
Expand Down Expand Up @@ -1809,6 +1813,7 @@ static int ath9k_conf_tx(struct ieee80211_hw *hw, u16 queue,

txq = sc->tx.txq_map[queue];

ath9k_ps_wakeup(sc);
mutex_lock(&sc->mutex);

memset(&qi, 0, sizeof(struct ath9k_tx_queue_info));
Expand All @@ -1832,6 +1837,7 @@ static int ath9k_conf_tx(struct ieee80211_hw *hw, u16 queue,
ath_beaconq_config(sc);

mutex_unlock(&sc->mutex);
ath9k_ps_restore(sc);

return ret;
}
Expand Down Expand Up @@ -1894,6 +1900,7 @@ static void ath9k_bss_info_changed(struct ieee80211_hw *hw,
int slottime;
int error;

ath9k_ps_wakeup(sc);
mutex_lock(&sc->mutex);

if (changed & BSS_CHANGED_BSSID) {
Expand Down Expand Up @@ -1994,6 +2001,7 @@ static void ath9k_bss_info_changed(struct ieee80211_hw *hw,
}

mutex_unlock(&sc->mutex);
ath9k_ps_restore(sc);
}

static u64 ath9k_get_tsf(struct ieee80211_hw *hw)
Expand Down

0 comments on commit 96f372c

Please sign in to comment.