Please note: This project is no longer active. The website is kept online for historic purposes only.
If you´re looking for a Linux driver for your Atheros WLAN device, you should continue here .

Ticket #1368: ff_flushdone.diff

File ff_flushdone.diff, 1.3 kB (added by dyqith, 12 years ago)

Better patch for making sure ATH_TXQ_LOCK plays nice.

  • ath/if_ath.c

    old new  
    25462546                goto hardstart_fail; 
    25472547        } 
    25482548 
    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. 
    25512551         */ 
    25522552        ATH_TXQ_LOCK_IRQ(txq); 
    25532553        if (athff_can_aggregate(sc, eh, an, skb, vap->iv_fragthreshold, &ff_flush)) { 
     
    26042604                        TAILQ_REMOVE(&txq->axq_stageq, bf_ff, bf_stagelist); 
    26052605                        an->an_tx_ffbuf[skb->priority] = NULL; 
    26062606 
     2607                        /* NB: ath_tx_start -> ath_tx_txqaddbuf uses ATH_TXQ_LOCK too */ 
     2608                        ATH_TXQ_UNLOCK_IRQ_EARLY(txq); 
     2609 
    26072610                        /* encap and xmit */ 
    26082611                        bf_ff->bf_skb = ieee80211_encap(ni, bf_ff->bf_skb, &framecnt); 
    26092612 
     
    26322635                                STAILQ_INSERT_TAIL(&sc->sc_txbuf, bf_ff, bf_list); 
    26332636                                ATH_TXBUF_UNLOCK_IRQ(sc); 
    26342637                        } 
     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 
    26352647                } 
    26362648                /* 
    26372649                 * XXX: out-of-order condition only occurs for AP mode and multicast. 
     
    26512663 
    26522664        ATH_TXQ_UNLOCK_IRQ(txq); 
    26532665 
     2666ff_flush_done: 
    26542667ff_bypass: 
    26552668 
    26562669#else /* ATH_SUPERG_FF */