diff options
Diffstat (limited to 'drivers/net/wireless/ath9k/xmit.c')
-rw-r--r-- | drivers/net/wireless/ath9k/xmit.c | 27 |
1 files changed, 2 insertions, 25 deletions
diff --git a/drivers/net/wireless/ath9k/xmit.c b/drivers/net/wireless/ath9k/xmit.c index 9fa395418a6c..8073c71b3a67 100644 --- a/drivers/net/wireless/ath9k/xmit.c +++ b/drivers/net/wireless/ath9k/xmit.c | |||
@@ -286,7 +286,8 @@ static int ath_tx_prepare(struct ath_softc *sc, | |||
286 | 286 | ||
287 | /* Fill flags */ | 287 | /* Fill flags */ |
288 | 288 | ||
289 | txctl->flags |= ATH9K_TXDESC_CLRDMASK; /* needed for crypto errors */ | 289 | txctl->flags |= ATH9K_TXDESC_CLRDMASK /* needed for crypto errors */ |
290 | | ATH9K_TXDESC_INTREQ; /* Generate an interrupt */ | ||
290 | 291 | ||
291 | if (tx_info->flags & IEEE80211_TX_CTL_NO_ACK) | 292 | if (tx_info->flags & IEEE80211_TX_CTL_NO_ACK) |
292 | txctl->flags |= ATH9K_TXDESC_NOACK; | 293 | txctl->flags |= ATH9K_TXDESC_NOACK; |
@@ -363,28 +364,6 @@ static int ath_tx_prepare(struct ath_softc *sc, | |||
363 | rcs[0].tries = ATH_TXMAXTRY; | 364 | rcs[0].tries = ATH_TXMAXTRY; |
364 | } | 365 | } |
365 | 366 | ||
366 | /* | ||
367 | * Determine if a tx interrupt should be generated for | ||
368 | * this descriptor. We take a tx interrupt to reap | ||
369 | * descriptors when the h/w hits an EOL condition or | ||
370 | * when the descriptor is specifically marked to generate | ||
371 | * an interrupt. We periodically mark descriptors in this | ||
372 | * way to insure timely replenishing of the supply needed | ||
373 | * for sending frames. Defering interrupts reduces system | ||
374 | * load and potentially allows more concurrent work to be | ||
375 | * done but if done to aggressively can cause senders to | ||
376 | * backup. | ||
377 | * | ||
378 | * NB: use >= to deal with sc_txintrperiod changing | ||
379 | * dynamically through sysctl. | ||
380 | */ | ||
381 | spin_lock_bh(&txq->axq_lock); | ||
382 | if ((++txq->axq_intrcnt >= sc->sc_txintrperiod)) { | ||
383 | txctl->flags |= ATH9K_TXDESC_INTREQ; | ||
384 | txq->axq_intrcnt = 0; | ||
385 | } | ||
386 | spin_unlock_bh(&txq->axq_lock); | ||
387 | |||
388 | if (is_multicast_ether_addr(hdr->addr1)) { | 367 | if (is_multicast_ether_addr(hdr->addr1)) { |
389 | antenna = sc->sc_mcastantenna + 1; | 368 | antenna = sc->sc_mcastantenna + 1; |
390 | sc->sc_mcastantenna = (sc->sc_mcastantenna + 1) & 0x1; | 369 | sc->sc_mcastantenna = (sc->sc_mcastantenna + 1) & 0x1; |
@@ -1166,7 +1145,6 @@ static int ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq) | |||
1166 | nacked = 0; | 1145 | nacked = 0; |
1167 | for (;;) { | 1146 | for (;;) { |
1168 | spin_lock_bh(&txq->axq_lock); | 1147 | spin_lock_bh(&txq->axq_lock); |
1169 | txq->axq_intrcnt = 0; /* reset periodic desc intr count */ | ||
1170 | if (list_empty(&txq->axq_q)) { | 1148 | if (list_empty(&txq->axq_q)) { |
1171 | txq->axq_link = NULL; | 1149 | txq->axq_link = NULL; |
1172 | txq->axq_linkbuf = NULL; | 1150 | txq->axq_linkbuf = NULL; |
@@ -2164,7 +2142,6 @@ struct ath_txq *ath_txq_setup(struct ath_softc *sc, int qtype, int subtype) | |||
2164 | txq->axq_depth = 0; | 2142 | txq->axq_depth = 0; |
2165 | txq->axq_aggr_depth = 0; | 2143 | txq->axq_aggr_depth = 0; |
2166 | txq->axq_totalqueued = 0; | 2144 | txq->axq_totalqueued = 0; |
2167 | txq->axq_intrcnt = 0; | ||
2168 | txq->axq_linkbuf = NULL; | 2145 | txq->axq_linkbuf = NULL; |
2169 | sc->sc_txqsetup |= 1<<qnum; | 2146 | sc->sc_txqsetup |= 1<<qnum; |
2170 | } | 2147 | } |