Changeset 38249


Ignore:
Timestamp:
2013-09-29T13:07:58+02:00 (4 years ago)
Author:
nbd
Message:

ath9k: fix an AP mode powersave issue with aggregation

Signed-off-by: Felix Fietkau <nbd@…>

File:
1 edited

Legend:

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

    r38034 r38249  
    10281028+               return false; 
    10291029+       } 
    1030 + 
     1030  
     1031-               ath_tx_fill_desc(sc, bf, txq, aggr_len); 
     1032-               ath_tx_txqaddbuf(sc, txq, &bf_q, false); 
     1033-       } while (txq->axq_ampdu_depth < ATH_AGGR_MIN_QDEPTH && 
     1034-                status != ATH_AGGR_BAW_CLOSED); 
    10311035+       ath_set_rates(tid->an->vif, tid->an->sta, bf); 
    10321036+       if (aggr) 
     
    10431047+               tx_info->flags |= IEEE80211_TX_CTL_CLEAR_PS_FILT; 
    10441048+       } 
    1045   
    1046 -               ath_tx_fill_desc(sc, bf, txq, aggr_len); 
    1047 -               ath_tx_txqaddbuf(sc, txq, &bf_q, false); 
    1048 -       } while (txq->axq_ampdu_depth < ATH_AGGR_MIN_QDEPTH && 
    1049 -                status != ATH_AGGR_BAW_CLOSED); 
     1049+ 
    10501050+       ath_tx_fill_desc(sc, bf, txq, aggr_len); 
    10511051+       ath_tx_txqaddbuf(sc, txq, &bf_q, false); 
     
    12511251  
    12521252        rcu_read_unlock(); 
    1253 @@ -1787,62 +1959,13 @@ static void ath_tx_txqaddbuf(struct ath_ 
     1253@@ -1787,74 +1959,28 @@ static void ath_tx_txqaddbuf(struct ath_ 
    12541254                        if (bf_is_ampdu_not_probing(bf)) 
    12551255                                txq->axq_ampdu_depth++; 
     
    13171317                               struct ath_atx_tid *tid, struct sk_buff *skb) 
    13181318 { 
    1319 @@ -1985,6 +2108,7 @@ static int ath_tx_prepare(struct ieee802 
     1319+       struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb); 
     1320        struct ath_frame_info *fi = get_frame_info(skb); 
     1321        struct list_head bf_head; 
     1322-       struct ath_buf *bf; 
     1323- 
     1324-       bf = fi->bf; 
     1325+       struct ath_buf *bf = fi->bf; 
     1326  
     1327        INIT_LIST_HEAD(&bf_head); 
     1328        list_add_tail(&bf->list, &bf_head); 
     1329        bf->bf_state.bf_type = 0; 
     1330+       if (tid && (tx_info->flags & IEEE80211_TX_CTL_AMPDU)) { 
     1331+               bf->bf_state.bf_type = BUF_AMPDU; 
     1332+               ath_tx_addto_baw(sc, tid, bf); 
     1333+       } 
     1334  
     1335        bf->bf_next = NULL; 
     1336        bf->bf_lastbf = bf; 
     1337@@ -1985,6 +2111,7 @@ static int ath_tx_prepare(struct ieee802 
    13201338        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); 
    13211339        struct ieee80211_sta *sta = txctl->sta; 
     
    13251343        int frmlen = skb->len + FCS_LEN; 
    13261344        int padpos, padsize; 
    1327 @@ -1992,6 +2116,10 @@ static int ath_tx_prepare(struct ieee802 
     1345@@ -1992,6 +2119,10 @@ static int ath_tx_prepare(struct ieee802 
    13281346        /* NOTE:  sta can be NULL according to net/mac80211.h */ 
    13291347        if (sta) 
     
    13361354        if (info->control.hw_key) 
    13371355                frmlen += info->control.hw_key->icv_len; 
    1338 @@ -2041,7 +2169,6 @@ int ath_tx_start(struct ieee80211_hw *hw 
     1356@@ -2041,7 +2172,6 @@ int ath_tx_start(struct ieee80211_hw *hw 
    13391357        struct ath_txq *txq = txctl->txq; 
    13401358        struct ath_atx_tid *tid = NULL; 
     
    13441362        int ret; 
    13451363  
    1346 @@ -2069,27 +2196,31 @@ int ath_tx_start(struct ieee80211_hw *hw 
     1364@@ -2069,27 +2199,31 @@ int ath_tx_start(struct ieee80211_hw *hw 
    13471365                ath_txq_unlock(sc, txq); 
    13481366                txq = sc->tx.uapsdq; 
     
    13871405                        dev_kfree_skb_any(skb); 
    13881406                else 
    1389 @@ -2142,7 +2273,7 @@ void ath_tx_cabq(struct ieee80211_hw *hw 
     1407@@ -2142,7 +2276,7 @@ void ath_tx_cabq(struct ieee80211_hw *hw 
    13901408  
    13911409                bf->bf_lastbf = bf; 
     
    13961414                if (bf_tail) 
    13971415                        bf_tail->bf_next = bf; 
    1398 @@ -2189,7 +2320,7 @@ static void ath_tx_complete(struct ath_s 
     1416@@ -2189,7 +2323,7 @@ static void ath_tx_complete(struct ath_s 
    13991417        struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb); 
    14001418        struct ath_common *common = ath9k_hw_common(sc->sc_ah); 
     
    14051423  
    14061424        ath_dbg(common, XMIT, "TX complete: skb: %p\n", skb); 
    1407 @@ -2225,21 +2356,7 @@ static void ath_tx_complete(struct ath_s 
     1425@@ -2225,21 +2359,7 @@ static void ath_tx_complete(struct ath_s 
    14081426        spin_unlock_irqrestore(&sc->sc_pm_lock, flags); 
    14091427  
     
    14281446  
    14291447 static void ath_tx_complete_buf(struct ath_softc *sc, struct ath_buf *bf, 
    1430 @@ -2360,8 +2477,7 @@ static void ath_tx_processq(struct ath_s 
     1448@@ -2360,8 +2480,7 @@ static void ath_tx_processq(struct ath_s 
    14311449  
    14321450                if (list_empty(&txq->axq_q)) { 
     
    14381456                } 
    14391457                bf = list_first_entry(&txq->axq_q, struct ath_buf, list); 
    1440 @@ -2375,7 +2491,7 @@ static void ath_tx_processq(struct ath_s 
     1458@@ -2375,7 +2494,7 @@ static void ath_tx_processq(struct ath_s 
    14411459                 * it with the STALE flag. 
    14421460                 */ 
     
    14471465                        if (list_is_last(&bf_held->list, &txq->axq_q)) 
    14481466                                break; 
    1449 @@ -2399,7 +2515,7 @@ static void ath_tx_processq(struct ath_s 
     1467@@ -2399,7 +2518,7 @@ static void ath_tx_processq(struct ath_s 
    14501468                 * however leave the last descriptor back as the holding 
    14511469                 * descriptor for hw. 
     
    14561474                if (!list_is_singular(&lastbf->list)) 
    14571475                        list_cut_position(&bf_head, 
    1458 @@ -2470,7 +2586,7 @@ void ath_tx_edma_tasklet(struct ath_soft 
     1476@@ -2470,7 +2589,7 @@ void ath_tx_edma_tasklet(struct ath_soft 
    14591477                } 
    14601478  
     
    14651483                        ath_tx_return_buffer(sc, bf); 
    14661484                        bf = list_first_entry(fifo_list, struct ath_buf, list); 
    1467 @@ -2492,7 +2608,7 @@ void ath_tx_edma_tasklet(struct ath_soft 
     1485@@ -2492,7 +2611,7 @@ void ath_tx_edma_tasklet(struct ath_soft 
    14681486                                ath_tx_txqaddbuf(sc, txq, &bf_q, true); 
    14691487                        } 
     
    14741492                                list_cut_position(&bf_head, fifo_list, 
    14751493                                                  lastbf->list.prev); 
    1476 @@ -2583,6 +2699,7 @@ void ath_tx_node_init(struct ath_softc * 
     1494@@ -2583,6 +2702,7 @@ void ath_tx_node_init(struct ath_softc * 
    14771495                tid->paused    = false; 
    14781496                tid->active        = false; 
     
    14821500                tid->ac = &an->ac[acno]; 
    14831501        } 
    1484 @@ -2590,6 +2707,7 @@ void ath_tx_node_init(struct ath_softc * 
     1502@@ -2590,6 +2710,7 @@ void ath_tx_node_init(struct ath_softc * 
    14851503        for (acno = 0, ac = &an->ac[acno]; 
    14861504             acno < IEEE80211_NUM_ACS; acno++, ac++) { 
Note: See TracChangeset for help on using the changeset viewer.