Ticket #1368: ff_flushdone.diff
| File ff_flushdone.diff, 1.3 kB (added by dyqith, 2 years ago) |
|---|
-
ath/if_ath.c
old new 2546 2546 goto hardstart_fail; 2547 2547 } 2548 2548 2549 /* NB: use this lock to protect an->an_ ff_txbuf in athff_can_aggregate()2550 * call too.2549 /* NB: use this lock to protect an->an_tx_ffbuf (and txq->axq_stageq) 2550 * in athff_can_aggregate() call too. 2551 2551 */ 2552 2552 ATH_TXQ_LOCK_IRQ(txq); 2553 2553 if (athff_can_aggregate(sc, eh, an, skb, vap->iv_fragthreshold, &ff_flush)) { … … 2604 2604 TAILQ_REMOVE(&txq->axq_stageq, bf_ff, bf_stagelist); 2605 2605 an->an_tx_ffbuf[skb->priority] = NULL; 2606 2606 2607 /* NB: ath_tx_start -> ath_tx_txqaddbuf uses ATH_TXQ_LOCK too */ 2608 ATH_TXQ_UNLOCK_IRQ_EARLY(txq); 2609 2607 2610 /* encap and xmit */ 2608 2611 bf_ff->bf_skb = ieee80211_encap(ni, bf_ff->bf_skb, &framecnt); 2609 2612 … … 2632 2635 STAILQ_INSERT_TAIL(&sc->sc_txbuf, bf_ff, bf_list); 2633 2636 ATH_TXBUF_UNLOCK_IRQ(sc); 2634 2637 } 2638 2639 ATH_HARDSTART_GET_TX_BUF_WITH_LOCK; 2640 if (bf == NULL) { 2641 goto hardstart_fail; 2642 } 2643 2644 goto ff_flush_done; 2645 2646 2635 2647 } 2636 2648 /* 2637 2649 * XXX: out-of-order condition only occurs for AP mode and multicast. … … 2651 2663 2652 2664 ATH_TXQ_UNLOCK_IRQ(txq); 2653 2665 2666 ff_flush_done: 2654 2667 ff_bypass: 2655 2668 2656 2669 #else /* ATH_SUPERG_FF */
