ath9k: fix mac80211 queue lookup for waking up queues
ath_get_mac80211_qnum() expects the queue 'subtype' (internal ID for the WMM AC) as argument when looking up the mac80211 queue, however ath_wake_mac80211_queue provides txq->axq_qnum instead, which contains the hardware queue number. Fix this by keeping track of the WMM class ID in the txq data structure. Signed-off-by: Felix Fietkau <nbd@openwrt.org> Cc: stable@kernel.org Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
1cc5c4b56e
commit
293f2ba897
@@ -194,6 +194,7 @@ enum ATH_AGGR_STATUS {
|
|||||||
|
|
||||||
#define ATH_TXFIFO_DEPTH 8
|
#define ATH_TXFIFO_DEPTH 8
|
||||||
struct ath_txq {
|
struct ath_txq {
|
||||||
|
int axq_class;
|
||||||
u32 axq_qnum;
|
u32 axq_qnum;
|
||||||
u32 *axq_link;
|
u32 *axq_link;
|
||||||
struct list_head axq_q;
|
struct list_head axq_q;
|
||||||
|
@@ -941,6 +941,7 @@ struct ath_txq *ath_txq_setup(struct ath_softc *sc, int qtype, int subtype)
|
|||||||
if (!ATH_TXQ_SETUP(sc, qnum)) {
|
if (!ATH_TXQ_SETUP(sc, qnum)) {
|
||||||
struct ath_txq *txq = &sc->tx.txq[qnum];
|
struct ath_txq *txq = &sc->tx.txq[qnum];
|
||||||
|
|
||||||
|
txq->axq_class = subtype;
|
||||||
txq->axq_qnum = qnum;
|
txq->axq_qnum = qnum;
|
||||||
txq->axq_link = NULL;
|
txq->axq_link = NULL;
|
||||||
INIT_LIST_HEAD(&txq->axq_q);
|
INIT_LIST_HEAD(&txq->axq_q);
|
||||||
@@ -2047,7 +2048,7 @@ static void ath_wake_mac80211_queue(struct ath_softc *sc, struct ath_txq *txq)
|
|||||||
|
|
||||||
spin_lock_bh(&txq->axq_lock);
|
spin_lock_bh(&txq->axq_lock);
|
||||||
if (txq->stopped && txq->pending_frames < ATH_MAX_QDEPTH) {
|
if (txq->stopped && txq->pending_frames < ATH_MAX_QDEPTH) {
|
||||||
qnum = ath_get_mac80211_qnum(txq->axq_qnum, sc);
|
qnum = ath_get_mac80211_qnum(txq->axq_class, sc);
|
||||||
if (qnum != -1) {
|
if (qnum != -1) {
|
||||||
ath_mac80211_start_queue(sc, qnum);
|
ath_mac80211_start_queue(sc, qnum);
|
||||||
txq->stopped = 0;
|
txq->stopped = 0;
|
||||||
|
Reference in New Issue
Block a user