aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/314-ath9k-rename-tx_complete_work-to-hw_check_work.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/314-ath9k-rename-tx_complete_work-to-hw_check_work.patch')
-rw-r--r--package/kernel/mac80211/patches/314-ath9k-rename-tx_complete_work-to-hw_check_work.patch175
1 files changed, 0 insertions, 175 deletions
diff --git a/package/kernel/mac80211/patches/314-ath9k-rename-tx_complete_work-to-hw_check_work.patch b/package/kernel/mac80211/patches/314-ath9k-rename-tx_complete_work-to-hw_check_work.patch
deleted file mode 100644
index 5465df3ccf..0000000000
--- a/package/kernel/mac80211/patches/314-ath9k-rename-tx_complete_work-to-hw_check_work.patch
+++ /dev/null
@@ -1,175 +0,0 @@
-From: Felix Fietkau <nbd@nbd.name>
-Date: Wed, 25 Jan 2017 12:57:05 +0100
-Subject: [PATCH] ath9k: rename tx_complete_work to hw_check_work
-
-Also include common MAC alive check. This should make the hang checks
-more reliable for modes where beacons are not sent and is used as a
-starting point for further hang check improvements
-
-Signed-off-by: Felix Fietkau <nbd@nbd.name>
----
-
---- a/drivers/net/wireless/ath/ath9k/ath9k.h
-+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
-@@ -108,7 +108,7 @@ int ath_descdma_setup(struct ath_softc *
- #define ATH_AGGR_MIN_QDEPTH 2
- /* minimum h/w qdepth for non-aggregated traffic */
- #define ATH_NON_AGGR_MIN_QDEPTH 8
--#define ATH_TX_COMPLETE_POLL_INT 1000
-+#define ATH_HW_CHECK_POLL_INT 1000
- #define ATH_TXFIFO_DEPTH 8
- #define ATH_TX_ERROR 0x01
-
-@@ -745,7 +745,7 @@ void ath9k_csa_update(struct ath_softc *
- #define ATH_PAPRD_TIMEOUT 100 /* msecs */
- #define ATH_PLL_WORK_INTERVAL 100
-
--void ath_tx_complete_poll_work(struct work_struct *work);
-+void ath_hw_check_work(struct work_struct *work);
- void ath_reset_work(struct work_struct *work);
- bool ath_hw_check(struct ath_softc *sc);
- void ath_hw_pll_work(struct work_struct *work);
-@@ -1053,7 +1053,7 @@ struct ath_softc {
- #ifdef CPTCFG_ATH9K_DEBUGFS
- struct ath9k_debug debug;
- #endif
-- struct delayed_work tx_complete_work;
-+ struct delayed_work hw_check_work;
- struct delayed_work hw_pll_work;
- struct timer_list sleep_timer;
-
---- a/drivers/net/wireless/ath/ath9k/init.c
-+++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -681,6 +681,7 @@ static int ath9k_init_softc(u16 devid, s
- INIT_WORK(&sc->hw_reset_work, ath_reset_work);
- INIT_WORK(&sc->paprd_work, ath_paprd_calibrate);
- INIT_DELAYED_WORK(&sc->hw_pll_work, ath_hw_pll_work);
-+ INIT_DELAYED_WORK(&sc->hw_check_work, ath_hw_check_work);
-
- ath9k_init_channel_context(sc);
-
---- a/drivers/net/wireless/ath/ath9k/link.c
-+++ b/drivers/net/wireless/ath/ath9k/link.c
-@@ -20,20 +20,13 @@
- * TX polling - checks if the TX engine is stuck somewhere
- * and issues a chip reset if so.
- */
--void ath_tx_complete_poll_work(struct work_struct *work)
-+static bool ath_tx_complete_check(struct ath_softc *sc)
- {
-- struct ath_softc *sc = container_of(work, struct ath_softc,
-- tx_complete_work.work);
- struct ath_txq *txq;
- int i;
-- bool needreset = false;
--
-
-- if (sc->tx99_state) {
-- ath_dbg(ath9k_hw_common(sc->sc_ah), RESET,
-- "skip tx hung detection on tx99\n");
-- return;
-- }
-+ if (sc->tx99_state)
-+ return true;
-
- for (i = 0; i < IEEE80211_NUM_ACS; i++) {
- txq = sc->tx.txq_map[i];
-@@ -41,25 +34,36 @@ void ath_tx_complete_poll_work(struct wo
- ath_txq_lock(sc, txq);
- if (txq->axq_depth) {
- if (txq->axq_tx_inprogress) {
-- needreset = true;
- ath_txq_unlock(sc, txq);
-- break;
-- } else {
-- txq->axq_tx_inprogress = true;
-+ goto reset;
- }
-+
-+ txq->axq_tx_inprogress = true;
- }
- ath_txq_unlock(sc, txq);
- }
-
-- if (needreset) {
-- ath_dbg(ath9k_hw_common(sc->sc_ah), RESET,
-- "tx hung, resetting the chip\n");
-- ath9k_queue_reset(sc, RESET_TYPE_TX_HANG);
-+ return true;
-+
-+reset:
-+ ath_dbg(ath9k_hw_common(sc->sc_ah), RESET,
-+ "tx hung, resetting the chip\n");
-+ ath9k_queue_reset(sc, RESET_TYPE_TX_HANG);
-+ return false;
-+
-+}
-+
-+void ath_hw_check_work(struct work_struct *work)
-+{
-+ struct ath_softc *sc = container_of(work, struct ath_softc,
-+ hw_check_work.work);
-+
-+ if (!ath_hw_check(sc) ||
-+ !ath_tx_complete_check(sc))
- return;
-- }
-
-- ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work,
-- msecs_to_jiffies(ATH_TX_COMPLETE_POLL_INT));
-+ ieee80211_queue_delayed_work(sc->hw, &sc->hw_check_work,
-+ msecs_to_jiffies(ATH_HW_CHECK_POLL_INT));
- }
-
- /*
---- a/drivers/net/wireless/ath/ath9k/main.c
-+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -181,7 +181,7 @@ void ath9k_ps_restore(struct ath_softc *
- static void __ath_cancel_work(struct ath_softc *sc)
- {
- cancel_work_sync(&sc->paprd_work);
-- cancel_delayed_work_sync(&sc->tx_complete_work);
-+ cancel_delayed_work_sync(&sc->hw_check_work);
- cancel_delayed_work_sync(&sc->hw_pll_work);
-
- #ifdef CPTCFG_ATH9K_BTCOEX_SUPPORT
-@@ -198,7 +198,8 @@ void ath_cancel_work(struct ath_softc *s
-
- void ath_restart_work(struct ath_softc *sc)
- {
-- ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work, 0);
-+ ieee80211_queue_delayed_work(sc->hw, &sc->hw_check_work,
-+ ATH_HW_CHECK_POLL_INT);
-
- if (AR_SREV_9340(sc->sc_ah) || AR_SREV_9330(sc->sc_ah))
- ieee80211_queue_delayed_work(sc->hw, &sc->hw_pll_work,
-@@ -2091,7 +2092,7 @@ void __ath9k_flush(struct ieee80211_hw *
- int timeout;
- bool drain_txq;
-
-- cancel_delayed_work_sync(&sc->tx_complete_work);
-+ cancel_delayed_work_sync(&sc->hw_check_work);
-
- if (ah->ah_flags & AH_UNPLUGGED) {
- ath_dbg(common, ANY, "Device has been unplugged!\n");
-@@ -2129,7 +2130,8 @@ void __ath9k_flush(struct ieee80211_hw *
- ath9k_ps_restore(sc);
- }
-
-- ieee80211_queue_delayed_work(hw, &sc->tx_complete_work, 0);
-+ ieee80211_queue_delayed_work(hw, &sc->hw_check_work,
-+ ATH_HW_CHECK_POLL_INT);
- }
-
- static bool ath9k_tx_frames_pending(struct ieee80211_hw *hw)
---- a/drivers/net/wireless/ath/ath9k/xmit.c
-+++ b/drivers/net/wireless/ath/ath9k/xmit.c
-@@ -2916,8 +2916,6 @@ int ath_tx_init(struct ath_softc *sc, in
- return error;
- }
-
-- INIT_DELAYED_WORK(&sc->tx_complete_work, ath_tx_complete_poll_work);
--
- if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
- error = ath_tx_edma_init(sc);
-