Commit a07d3619 authored by Senthil Balasubramanian's avatar Senthil Balasubramanian Committed by John W. Linville

ath9k: BH shouldn't be enabled when hardirqs are disabled.

ath_tx_complete_buf uses a BH version of spinlock and so releasing
the lock enables BH which is incorrect when called from sta_notify
callback as MAC80211 disables hardirqs before the driver callback
is called.

As ath_tx_complete_buf is shared between user and softirq context
using normal spinlock may not be appropriate. Though the proper
fix would be to cleanup the context properly in the driver code,
this would be an interim fix to avoid kernel warning.
Signed-off-by: default avatarSenthil Balasubramanian <senthilkumar@atheros.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent b1439236
...@@ -310,6 +310,7 @@ static void ath_tx_complete_buf(struct ath_softc *sc, ...@@ -310,6 +310,7 @@ static void ath_tx_complete_buf(struct ath_softc *sc,
{ {
struct sk_buff *skb = bf->bf_mpdu; struct sk_buff *skb = bf->bf_mpdu;
struct ath_xmit_status tx_status; struct ath_xmit_status tx_status;
unsigned long flags;
/* /*
* Set retry information. * Set retry information.
...@@ -340,9 +341,9 @@ static void ath_tx_complete_buf(struct ath_softc *sc, ...@@ -340,9 +341,9 @@ static void ath_tx_complete_buf(struct ath_softc *sc,
/* /*
* Return the list of ath_buf of this mpdu to free queue * Return the list of ath_buf of this mpdu to free queue
*/ */
spin_lock_bh(&sc->sc_txbuflock); spin_lock_irqsave(&sc->sc_txbuflock, flags);
list_splice_tail_init(bf_q, &sc->sc_txbuf); list_splice_tail_init(bf_q, &sc->sc_txbuf);
spin_unlock_bh(&sc->sc_txbuflock); spin_unlock_irqrestore(&sc->sc_txbuflock, flags);
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment