Changeset 27433


Ignore:
Timestamp:
2011-07-04T05:03:12+02:00 (7 years ago)
Author:
nbd
Message:

ath9k: merge an upstream change to fix false tx hangs on ar9003

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/mac80211/patches/300-pending_work.patch

    r27432 r27433  
    261261--- a/drivers/net/wireless/ath/ath9k/beacon.c 
    262262+++ b/drivers/net/wireless/ath/ath9k/beacon.c 
    263 @@ -384,7 +384,9 @@ void ath_beacon_tasklet(unsigned long da 
     263@@ -360,6 +360,7 @@ void ath_beacon_tasklet(unsigned long da 
     264        struct ath_common *common = ath9k_hw_common(ah); 
     265        struct ath_buf *bf = NULL; 
     266        struct ieee80211_vif *vif; 
     267+       struct ath_tx_status ts; 
     268        int slot; 
     269        u32 bfaddr, bc = 0; 
     270  
     271@@ -384,7 +385,9 @@ void ath_beacon_tasklet(unsigned long da 
    264272                        ath_dbg(common, ATH_DBG_BSTUCK, 
    265273                                "beacon is officially stuck\n"); 
     
    271279  
    272280                return; 
     281@@ -464,6 +467,11 @@ void ath_beacon_tasklet(unsigned long da 
     282                ath9k_hw_txstart(ah, sc->beacon.beaconq); 
     283  
     284                sc->beacon.ast_be_xmit += bc;     /* XXX per-vif? */ 
     285+               if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) { 
     286+                       spin_lock_bh(&sc->sc_pcu_lock); 
     287+                       ath9k_hw_txprocdesc(ah, bf->bf_desc, (void *)&ts); 
     288+                       spin_unlock_bh(&sc->sc_pcu_lock); 
     289+               } 
     290        } 
     291 } 
     292  
    273293--- a/drivers/net/wireless/ath/ath9k/main.c 
    274294+++ b/drivers/net/wireless/ath/ath9k/main.c 
     
    482502  
    483503                kfree(chinfo[pier].pd_curves); 
     504--- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c 
     505+++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c 
     506@@ -229,6 +229,7 @@ static void ar9003_hw_fill_txdesc(struct 
     507 static int ar9003_hw_proc_txdesc(struct ath_hw *ah, void *ds, 
     508                                 struct ath_tx_status *ts) 
     509 { 
     510+       struct ar9003_txc *txc = (struct ar9003_txc *) ds; 
     511        struct ar9003_txs *ads; 
     512        u32 status; 
     513  
     514@@ -238,7 +239,11 @@ static int ar9003_hw_proc_txdesc(struct  
     515        if ((status & AR_TxDone) == 0) 
     516                return -EINPROGRESS; 
     517  
     518-       ah->ts_tail = (ah->ts_tail + 1) % ah->ts_size; 
     519+       ts->qid = MS(ads->ds_info, AR_TxQcuNum); 
     520+       if (!txc || (MS(txc->info, AR_TxQcuNum) == ts->qid)) 
     521+               ah->ts_tail = (ah->ts_tail + 1) % ah->ts_size; 
     522+       else 
     523+               return -ENOENT; 
     524  
     525        if ((MS(ads->ds_info, AR_DescId) != ATHEROS_VENDOR_ID) || 
     526            (MS(ads->ds_info, AR_TxRxDesc) != 1)) { 
     527@@ -254,7 +259,6 @@ static int ar9003_hw_proc_txdesc(struct  
     528        ts->ts_seqnum = MS(status, AR_SeqNum); 
     529        ts->tid = MS(status, AR_TxTid); 
     530  
     531-       ts->qid = MS(ads->ds_info, AR_TxQcuNum); 
     532        ts->desc_id = MS(ads->status1, AR_TxDescId); 
     533        ts->ts_tstamp = ads->status4; 
     534        ts->ts_status = 0; 
Note: See TracChangeset for help on using the changeset viewer.