Changeset 40586


Ignore:
Timestamp:
2014-04-28T18:35:25+02:00 (4 years ago)
Author:
nbd
Message:

ath9k: add a fix for tx queueing and aggregation

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

Location:
trunk/package/kernel/mac80211/patches
Files:
3 edited

Legend:

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

    r40573 r40586  
     1commit eefb1d6adc4c60d219182b8917e4567484ce07fc 
     2Author: Felix Fietkau <nbd@openwrt.org> 
     3Date:   Mon Apr 28 18:27:41 2014 +0200 
     4 
     5    ath9k: remove tid->paused flag 
     6     
     7    There are some corner cases where the driver could get stuck with a full 
     8    tid queue that is paused, leading to a software tx queue hang. 
     9     
     10    Since the tx queueing rework, pausing per-tid queues on aggregation 
     11    session setup is no longer necessary. The driver will assign sequence 
     12    numbers to buffered frames when a new session is established, in order 
     13    to get the correct starting sequence number. 
     14     
     15    mac80211 prevents new frames from entering the queue during setup. 
     16     
     17    Signed-off-by: Felix Fietkau <nbd@openwrt.org> 
     18 
    119commit 98a713933d8495f4078f561c1e651b738dd5b531 
    220Author: Felix Fietkau <nbd@openwrt.org> 
     
    138156            BEACON_RSSI(ah) <= ATH9K_ANI_RSSI_THR_LOW && 
    139157            immunityLevel > ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI) 
     158--- a/drivers/net/wireless/ath/ath9k/ath9k.h 
     159+++ b/drivers/net/wireless/ath/ath9k/ath9k.h 
     160@@ -251,7 +251,6 @@ struct ath_atx_tid { 
     161  
     162        s8 bar_index; 
     163        bool sched; 
     164-       bool paused; 
     165        bool active; 
     166 }; 
     167  
     168--- a/drivers/net/wireless/ath/ath9k/xmit.c 
     169+++ b/drivers/net/wireless/ath/ath9k/xmit.c 
     170@@ -107,9 +107,6 @@ static void ath_tx_queue_tid(struct ath_ 
     171 { 
     172        struct ath_atx_ac *ac = tid->ac; 
     173  
     174-       if (tid->paused) 
     175-               return; 
     176- 
     177        if (tid->sched) 
     178                return; 
     179  
     180@@ -1407,7 +1404,6 @@ int ath_tx_aggr_start(struct ath_softc * 
     181        ath_tx_tid_change_state(sc, txtid); 
     182  
     183        txtid->active = true; 
     184-       txtid->paused = true; 
     185        *ssn = txtid->seq_start = txtid->seq_next; 
     186        txtid->bar_index = -1; 
     187  
     188@@ -1427,7 +1423,6 @@ void ath_tx_aggr_stop(struct ath_softc * 
     189  
     190        ath_txq_lock(sc, txq); 
     191        txtid->active = false; 
     192-       txtid->paused = false; 
     193        ath_tx_flush_tid(sc, txtid); 
     194        ath_tx_tid_change_state(sc, txtid); 
     195        ath_txq_unlock_complete(sc, txq); 
     196@@ -1487,7 +1482,7 @@ void ath_tx_aggr_wakeup(struct ath_softc 
     197                ath_txq_lock(sc, txq); 
     198                ac->clear_ps_filter = true; 
     199  
     200-               if (!tid->paused && ath_tid_has_buffered(tid)) { 
     201+               if (ath_tid_has_buffered(tid)) { 
     202                        ath_tx_queue_tid(txq, tid); 
     203                        ath_txq_schedule(sc, txq); 
     204                } 
     205@@ -1510,7 +1505,6 @@ void ath_tx_aggr_resume(struct ath_softc 
     206        ath_txq_lock(sc, txq); 
     207  
     208        tid->baw_size = IEEE80211_MIN_AMPDU_BUF << sta->ht_cap.ampdu_factor; 
     209-       tid->paused = false; 
     210  
     211        if (ath_tid_has_buffered(tid)) { 
     212                ath_tx_queue_tid(txq, tid); 
     213@@ -1544,8 +1538,6 @@ void ath9k_release_buffered_frames(struc 
     214                        continue; 
     215  
     216                tid = ATH_AN_2_TID(an, i); 
     217-               if (tid->paused) 
     218-                       continue; 
     219  
     220                ath_txq_lock(sc, tid->ac->txq); 
     221                while (nframes > 0) { 
     222@@ -1844,9 +1836,6 @@ void ath_txq_schedule(struct ath_softc * 
     223                        list_del(&tid->list); 
     224                        tid->sched = false; 
     225  
     226-                       if (tid->paused) 
     227-                               continue; 
     228- 
     229                        if (ath_tx_sched_aggr(sc, txq, tid, &stop)) 
     230                                sent = true; 
     231  
     232@@ -2698,7 +2687,6 @@ void ath_tx_node_init(struct ath_softc * 
     233                tid->baw_size  = WME_MAX_BA; 
     234                tid->baw_head  = tid->baw_tail = 0; 
     235                tid->sched     = false; 
     236-               tid->paused    = false; 
     237                tid->active        = false; 
     238                __skb_queue_head_init(&tid->buf_q); 
     239                __skb_queue_head_init(&tid->retry_q); 
  • trunk/package/kernel/mac80211/patches/530-ath9k_extra_leds.patch

    r40393 r40586  
    11--- a/drivers/net/wireless/ath/ath9k/ath9k.h 
    22+++ b/drivers/net/wireless/ath/ath9k/ath9k.h 
    3 @@ -555,6 +555,9 @@ static inline int ath9k_dump_btcoex(stru 
     3@@ -554,6 +554,9 @@ static inline int ath9k_dump_btcoex(stru 
    44 void ath_init_leds(struct ath_softc *sc); 
    55 void ath_deinit_leds(struct ath_softc *sc); 
     
    1111 static inline void ath_init_leds(struct ath_softc *sc) 
    1212 { 
    13 @@ -693,6 +696,13 @@ void ath_ant_comb_scan(struct ath_softc  
     13@@ -692,6 +695,13 @@ void ath_ant_comb_scan(struct ath_softc  
    1414 #define PS_BEACON_SYNC            BIT(4) 
    1515 #define PS_WAIT_FOR_ANI           BIT(5) 
     
    2525        struct ieee80211_hw *hw; 
    2626        struct device *dev; 
    27 @@ -732,9 +742,8 @@ struct ath_softc { 
     27@@ -731,9 +741,8 @@ struct ath_softc { 
    2828        struct ath_beacon beacon; 
    2929  
  • trunk/package/kernel/mac80211/patches/552-ath9k_p2p_ps_support.patch

    r40393 r40586  
    179179 #define IEEE80211_SEQ_MAX          4096 
    180180 #define IEEE80211_WEP_IVLEN        3 
    181 @@ -367,11 +370,15 @@ void ath9k_release_buffered_frames(struc 
     181@@ -366,11 +369,15 @@ void ath9k_release_buffered_frames(struc 
    182182 /********/ 
    183183  
     
    195195  
    196196 struct ath9k_vif_iter_data { 
    197 @@ -464,6 +471,8 @@ int ath_update_survey_stats(struct ath_s 
     197@@ -463,6 +470,8 @@ int ath_update_survey_stats(struct ath_s 
    198198 void ath_update_survey_nf(struct ath_softc *sc, int channel); 
    199199 void ath9k_queue_reset(struct ath_softc *sc, enum ath_reset_type type); 
     
    204204 /**********/ 
    205205 /* BTCOEX */ 
    206 @@ -724,6 +733,9 @@ struct ath_softc { 
     206@@ -723,6 +732,9 @@ struct ath_softc { 
    207207        struct completion paprd_complete; 
    208208        wait_queue_head_t tx_wait; 
Note: See TracChangeset for help on using the changeset viewer.