ath9k: stop rx dma before stopping tx
It has been found that active Rx can interfere with stopping tx DMA, which could result in at least parts of those "Failed to stop Tx DMA!" messages. Stopping rx before tx should prevent that. Signed-off-by: Felix Fietkau <nbd@openwrt.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
Родитель
9b4760e301
Коммит
ceea2a5196
|
@ -239,7 +239,7 @@ static bool ath_prepare_reset(struct ath_softc *sc, bool retry_tx, bool flush)
|
||||||
{
|
{
|
||||||
struct ath_hw *ah = sc->sc_ah;
|
struct ath_hw *ah = sc->sc_ah;
|
||||||
struct ath_common *common = ath9k_hw_common(ah);
|
struct ath_common *common = ath9k_hw_common(ah);
|
||||||
bool ret;
|
bool ret = true;
|
||||||
|
|
||||||
ieee80211_stop_queues(sc->hw);
|
ieee80211_stop_queues(sc->hw);
|
||||||
|
|
||||||
|
@ -250,11 +250,12 @@ static bool ath_prepare_reset(struct ath_softc *sc, bool retry_tx, bool flush)
|
||||||
ath9k_debug_samp_bb_mac(sc);
|
ath9k_debug_samp_bb_mac(sc);
|
||||||
ath9k_hw_disable_interrupts(ah);
|
ath9k_hw_disable_interrupts(ah);
|
||||||
|
|
||||||
ret = ath_drain_all_txq(sc, retry_tx);
|
|
||||||
|
|
||||||
if (!ath_stoprecv(sc))
|
if (!ath_stoprecv(sc))
|
||||||
ret = false;
|
ret = false;
|
||||||
|
|
||||||
|
if (!ath_drain_all_txq(sc, retry_tx))
|
||||||
|
ret = false;
|
||||||
|
|
||||||
if (!flush) {
|
if (!flush) {
|
||||||
if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
|
if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
|
||||||
ath_rx_tasklet(sc, 1, true);
|
ath_rx_tasklet(sc, 1, true);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче