diff options
Diffstat (limited to 'features/rt/ath9k-Use-tasklet_disable_in_atomic.patch')
-rw-r--r-- | features/rt/ath9k-Use-tasklet_disable_in_atomic.patch | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/features/rt/ath9k-Use-tasklet_disable_in_atomic.patch b/features/rt/ath9k-Use-tasklet_disable_in_atomic.patch new file mode 100644 index 00000000..d14560b6 --- /dev/null +++ b/features/rt/ath9k-Use-tasklet_disable_in_atomic.patch @@ -0,0 +1,47 @@ +From 0fdf02e085f667a14612fe8555ffffcdc7b3044e Mon Sep 17 00:00:00 2001 +From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +Date: Tue, 9 Mar 2021 09:42:13 +0100 +Subject: [PATCH 050/191] ath9k: Use tasklet_disable_in_atomic() + +All callers of ath9k_beacon_ensure_primary_slot() are preemptible / +acquire a mutex except for this callchain: + + spin_lock_bh(&sc->sc_pcu_lock); + ath_complete_reset() + -> ath9k_calculate_summary_state() + -> ath9k_beacon_ensure_primary_slot() + +It's unclear how that can be distangled, so use tasklet_disable_in_atomic() +for now. This allows tasklet_disable() to become sleepable once the +remaining atomic users are cleaned up. + +Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +Signed-off-by: Thomas Gleixner <tglx@linutronix.de> +Cc: ath9k-devel@qca.qualcomm.com +Cc: Kalle Valo <kvalo@codeaurora.org> +Cc: "David S. Miller" <davem@davemloft.net> +Cc: Jakub Kicinski <kuba@kernel.org> +Cc: linux-wireless@vger.kernel.org +Cc: netdev@vger.kernel.org +Acked-by: Kalle Valo <kvalo@codeaurora.org> +Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +--- + drivers/net/wireless/ath/ath9k/beacon.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/net/wireless/ath/ath9k/beacon.c b/drivers/net/wireless/ath/ath9k/beacon.c +index 71e2ada86793..72e2e71aac0e 100644 +--- a/drivers/net/wireless/ath/ath9k/beacon.c ++++ b/drivers/net/wireless/ath/ath9k/beacon.c +@@ -251,7 +251,7 @@ void ath9k_beacon_ensure_primary_slot(struct ath_softc *sc) + int first_slot = ATH_BCBUF; + int slot; + +- tasklet_disable(&sc->bcon_tasklet); ++ tasklet_disable_in_atomic(&sc->bcon_tasklet); + + /* Find first taken slot. */ + for (slot = 0; slot < ATH_BCBUF; slot++) { +-- +2.19.1 + |