Changeset 39886


Ignore:
Timestamp:
2014-03-12T11:00:56+01:00 (4 years ago)
Author:
nbd
Message:

ath9k: merge an aggregation related fix

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

File:
1 edited

Legend:

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

    r39879 r39886  
     1commit 584d297fd29fb39c76af25ae74ff9d5fe74c8a14 
     2Author: Helmut Schaa <helmut.schaa@googlemail.com> 
     3Date:   Wed Mar 12 10:37:55 2014 +0100 
     4 
     5    ath9k: Fix sequence number assignment for non-data frames 
     6     
     7    Since commit 558ff225de80ac95b132d3a115ddadcd64498b4f (ath9k: fix 
     8    ps-poll responses under a-mpdu sessions) non-data frames would have 
     9    gotten a sequence number from a TIDs sequence counter instead of 
     10    using the global sequence counter. 
     11     
     12    This can lead to instable connections. 
     13     
     14    To fix this only select the correct TID if we are processing a 
     15    data frame. Furthermore, prevent non-data frames to get a sequence 
     16    number from a TID sequence counter by adding a check to 
     17    ath_tx_setup_buffer. 
     18     
     19    Cc: Felix Fietkau <nbd@openwrt.org> 
     20    Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com> 
     21 
    122commit 3a0f984b1cdcd6a9f8c441635ef3b05d58547f4e 
    223Author: Felix Fietkau <nbd@openwrt.org> 
     
    33713392        ath_txq_update(sc, qnum, &qi); 
    33723393  
     3394@@ -2061,7 +2063,7 @@ static struct ath_buf *ath_tx_setup_buff 
     3395  
     3396        ATH_TXBUF_RESET(bf); 
     3397  
     3398-       if (tid) { 
     3399+       if (tid && ieee80211_is_data_present(hdr->frame_control)) { 
     3400                fragno = le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_FRAG; 
     3401                seqno = tid->seq_next; 
     3402                hdr->seq_ctrl = cpu_to_le16(tid->seq_next << IEEE80211_SEQ_SEQ_SHIFT); 
    33733403@@ -2184,14 +2186,15 @@ int ath_tx_start(struct ieee80211_hw *hw 
    33743404                txq->stopped = true; 
    33753405        } 
    33763406  
    3377 +       if (txctl->an) 
     3407+       if (txctl->an && ieee80211_is_data_present(hdr->frame_control)) 
    33783408+               tid = ath_get_skb_tid(sc, txctl->an, skb); 
    33793409+ 
Note: See TracChangeset for help on using the changeset viewer.