Re: [patch 10/14] ath9k: Use tasklet_disable_in_atomic()

2021-03-09 Thread Kalle Valo
Thomas Gleixner  writes:

> From: Sebastian Andrzej Siewior 
>
> All callers of ath9k_beacon_ensure_primary_slot() are preemptible /
> acquire a mutex except for this callchain:
>
>   spin_lock_bh(>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 
> Signed-off-by: Thomas Gleixner 
> Cc: ath9k-de...@qca.qualcomm.com
> Cc: Kalle Valo 
> Cc: "David S. Miller" 
> Cc: Jakub Kicinski 
> Cc: linux-wirel...@vger.kernel.org
> Cc: net...@vger.kernel.org
> ---
>  drivers/net/wireless/ath/ath9k/beacon.c |2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

I assume this goes via some other tree:

Acked-by: Kalle Valo 

-- 
https://patchwork.kernel.org/project/linux-wireless/list/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches


[patch 10/14] ath9k: Use tasklet_disable_in_atomic()

2021-03-09 Thread Thomas Gleixner
From: Sebastian Andrzej Siewior 

All callers of ath9k_beacon_ensure_primary_slot() are preemptible /
acquire a mutex except for this callchain:

  spin_lock_bh(>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 
Signed-off-by: Thomas Gleixner 
Cc: ath9k-de...@qca.qualcomm.com
Cc: Kalle Valo 
Cc: "David S. Miller" 
Cc: Jakub Kicinski 
Cc: linux-wirel...@vger.kernel.org
Cc: net...@vger.kernel.org
---
 drivers/net/wireless/ath/ath9k/beacon.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- 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(st
int first_slot = ATH_BCBUF;
int slot;
 
-   tasklet_disable(>bcon_tasklet);
+   tasklet_disable_in_atomic(>bcon_tasklet);
 
/* Find first taken slot. */
for (slot = 0; slot < ATH_BCBUF; slot++) {