lkml.org 
[lkml]   [2021]   [Mar]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip: irq/core] ath9k: Use tasklet_disable_in_atomic()
    The following commit has been merged into the irq/core branch of tip:

    Commit-ID: 3250aa8a293b1859d76577714a3e1fe95732c721
    Gitweb: https://git.kernel.org/tip/3250aa8a293b1859d76577714a3e1fe95732c721
    Author: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    AuthorDate: Tue, 09 Mar 2021 09:42:13 +01:00
    Committer: Thomas Gleixner <tglx@linutronix.de>
    CommitterDate: Wed, 17 Mar 2021 16:34:02 +01:00

    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>
    Acked-by: Kalle Valo <kvalo@codeaurora.org>
    Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20210309084242.313899703@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 71e2ada..72e2e71 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++) {
    \
     
     \ /
      Last update: 2021-03-17 16:51    [W:4.391 / U:0.092 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site