Ticket #1368: ff_done.diff
| File ff_done.diff, 1.2 kB (added by dyqith, 2 years ago) |
|---|
-
ath/if_ath.c
old new 2542 2542 goto hardstart_fail; 2543 2543 } 2544 2544 2545 /* NB: use this lock to protect an->an_ ff_txbuf in athff_can_aggregate()2546 * call too.2545 /* NB: use this lock to protect an->an_tx_ffbuf (and txq->axq_stageq) 2546 * in athff_can_aggregate() call too. 2547 2547 */ 2548 2548 ATH_TXQ_LOCK_IRQ(txq); 2549 2549 if (athff_can_aggregate(sc, eh, an, skb, vap->iv_fragthreshold, &ff_flush)) { … … 2600 2600 TAILQ_REMOVE(&txq->axq_stageq, bf_ff, bf_stagelist); 2601 2601 an->an_tx_ffbuf[skb->priority] = NULL; 2602 2602 2603 2604 /* NB: ath_tx_start -> ath_tx_txqaddbuf uses ATH_TXQ_LOCK too */ 2605 ATH_TXQ_UNLOCK_IRQ_EARLY(txq); 2606 2603 2607 /* encap and xmit */ 2604 2608 bf_ff->bf_skb = ieee80211_encap(ni, bf_ff->bf_skb, &framecnt); 2605 2609 … … 2628 2632 STAILQ_INSERT_TAIL(&sc->sc_txbuf, bf_ff, bf_list); 2629 2633 ATH_TXBUF_UNLOCK_IRQ(sc); 2630 2634 } 2635 2636 /* NB: Bypass the txq unlock at the end */ 2637 goto ff_done_txq_unlock; 2631 2638 } 2632 2639 /* 2633 2640 * XXX: out-of-order condition only occurs for AP mode and multicast. … … 2647 2654 2648 2655 ATH_TXQ_UNLOCK_IRQ(txq); 2649 2656 2657 ff_done_txq_unlock: 2650 2658 ff_bypass: 2651 2659 2652 2660 #else /* ATH_SUPERG_FF */
