close race between ath_tx_start and ath_tx_processq

Reviewed by:	apatti
MFC after:	1 week
This commit is contained in:
Sam Leffler 2006-02-15 18:12:24 +00:00
parent 14d5e8363f
commit 1539af1ef5

View File

@ -3766,7 +3766,6 @@ ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq)
txq->axq_intrcnt = 0; /* reset periodic desc intr count */ txq->axq_intrcnt = 0; /* reset periodic desc intr count */
bf = STAILQ_FIRST(&txq->axq_q); bf = STAILQ_FIRST(&txq->axq_q);
if (bf == NULL) { if (bf == NULL) {
txq->axq_link = NULL;
ATH_TXQ_UNLOCK(txq); ATH_TXQ_UNLOCK(txq);
break; break;
} }
@ -3782,6 +3781,8 @@ ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq)
break; break;
} }
ATH_TXQ_REMOVE_HEAD(txq, bf_list); ATH_TXQ_REMOVE_HEAD(txq, bf_list);
if (txq->axq_depth == 0)
txq->axq_link = NULL;
ATH_TXQ_UNLOCK(txq); ATH_TXQ_UNLOCK(txq);
ni = bf->bf_node; ni = bf->bf_node;