diff options
Diffstat (limited to 'package/kernel/mac80211/patches/305-ath9k-make-DMA-stop-related-messages-debug-only.patch')
-rw-r--r-- | package/kernel/mac80211/patches/305-ath9k-make-DMA-stop-related-messages-debug-only.patch | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/305-ath9k-make-DMA-stop-related-messages-debug-only.patch b/package/kernel/mac80211/patches/305-ath9k-make-DMA-stop-related-messages-debug-only.patch new file mode 100644 index 0000000000..c4f394d220 --- /dev/null +++ b/package/kernel/mac80211/patches/305-ath9k-make-DMA-stop-related-messages-debug-only.patch @@ -0,0 +1,74 @@ +From: Felix Fietkau <nbd@openwrt.org> +Date: Thu, 2 Jul 2015 13:35:05 +0200 +Subject: [PATCH] ath9k: make DMA stop related messages debug-only + +A long time ago, ath9k had issues during reset where the DMA engine +would stay active and could potentially corrupt memory. +To debug those issues, the driver would print warnings whenever they +occur. + +Nowadays, these issues are gone and the primary cause of these messages +is if the MAC is stuck during reset or busy processing a long +transmission. This is fairly harmless, yet these messages continue to +worry users. + +To reduce the number of bogus bug reports, turn these messages into +debug messages and count their occurence in the "reset" debugfs file. + +Signed-off-by: Felix Fietkau <nbd@openwrt.org> +--- + +--- a/drivers/net/wireless/ath/ath9k/debug.c ++++ b/drivers/net/wireless/ath/ath9k/debug.c +@@ -765,6 +765,8 @@ static int read_file_reset(struct seq_fi + [RESET_TYPE_BEACON_STUCK] = "Stuck Beacon", + [RESET_TYPE_MCI] = "MCI Reset", + [RESET_TYPE_CALIBRATION] = "Calibration error", ++ [RESET_TX_DMA_ERROR] = "Tx DMA stop error", ++ [RESET_RX_DMA_ERROR] = "Rx DMA stop error", + }; + int i; + +--- a/drivers/net/wireless/ath/ath9k/debug.h ++++ b/drivers/net/wireless/ath/ath9k/debug.h +@@ -50,6 +50,8 @@ enum ath_reset_type { + RESET_TYPE_BEACON_STUCK, + RESET_TYPE_MCI, + RESET_TYPE_CALIBRATION, ++ RESET_TX_DMA_ERROR, ++ RESET_RX_DMA_ERROR, + __RESET_TYPE_MAX + }; + +--- a/drivers/net/wireless/ath/ath9k/recv.c ++++ b/drivers/net/wireless/ath/ath9k/recv.c +@@ -491,10 +491,9 @@ bool ath_stoprecv(struct ath_softc *sc) + + if (!(ah->ah_flags & AH_UNPLUGGED) && + unlikely(!stopped)) { +- ath_err(ath9k_hw_common(sc->sc_ah), +- "Could not stop RX, we could be " +- "confusing the DMA engine when we start RX up\n"); +- ATH_DBG_WARN_ON_ONCE(!stopped); ++ ath_dbg(ath9k_hw_common(sc->sc_ah), RESET, ++ "Failed to stop Rx DMA\n"); ++ RESET_STAT_INC(sc, RESET_RX_DMA_ERROR); + } + return stopped && !reset; + } +--- a/drivers/net/wireless/ath/ath9k/xmit.c ++++ b/drivers/net/wireless/ath/ath9k/xmit.c +@@ -1883,8 +1883,11 @@ bool ath_drain_all_txq(struct ath_softc + npend |= BIT(i); + } + +- if (npend) +- ath_err(common, "Failed to stop TX DMA, queues=0x%03x!\n", npend); ++ if (npend) { ++ RESET_STAT_INC(sc, RESET_TX_DMA_ERROR); ++ ath_dbg(common, RESET, ++ "Failed to stop TX DMA, queues=0x%03x!\n", npend); ++ } + + for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) { + if (!ATH_TXQ_SETUP(sc, i)) |