Changeset 36656


Ignore:
Timestamp:
2013-05-18T21:36:22+02:00 (5 years ago)
Author:
nbd
Message:

ath9k: fix some more aggregation related issues

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

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

Legend:

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

    r36648 r36656  
    99 }; 
    1010  
    11 @@ -253,6 +254,7 @@ struct ath_atx_tid { 
    12         int sched; 
    13         int paused; 
    14         u8 state; 
    15 +       bool stop_cb; 
     11@@ -250,9 +251,9 @@ struct ath_atx_tid { 
     12        int tidno; 
     13        int baw_head;   /* first un-acked tx buffer */ 
     14        int baw_tail;   /* next unused tx buffer slot */ 
     15-       int sched; 
     16-       int paused; 
     17-       u8 state; 
     18+       bool sched; 
     19+       bool paused; 
     20+       bool active; 
    1621 }; 
    1722  
    1823 struct ath_node { 
    19 @@ -350,7 +352,8 @@ void ath_tx_tasklet(struct ath_softc *sc 
    20  void ath_tx_edma_tasklet(struct ath_softc *sc); 
    21  int ath_tx_aggr_start(struct ath_softc *sc, struct ieee80211_sta *sta, 
    22                       u16 tid, u16 *ssn); 
    23 -void ath_tx_aggr_stop(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid); 
    24 +bool ath_tx_aggr_stop(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid, 
    25 +                     bool flush); 
    26  void ath_tx_aggr_resume(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid); 
    27   
    28  void ath_tx_aggr_wakeup(struct ath_softc *sc, struct ath_node *an); 
    29 @@ -658,11 +661,10 @@ enum sc_op_flags { 
     24@@ -273,10 +274,6 @@ struct ath_node { 
     25 #endif 
     26 }; 
     27  
     28-#define AGGR_CLEANUP         BIT(1) 
     29-#define AGGR_ADDBA_COMPLETE  BIT(2) 
     30-#define AGGR_ADDBA_PROGRESS  BIT(3) 
     31- 
     32 struct ath_tx_control { 
     33        struct ath_txq *txq; 
     34        struct ath_node *an; 
     35@@ -658,11 +655,10 @@ enum sc_op_flags { 
    3036 struct ath_rate_table; 
    3137  
     
    162168 { 
    163169        struct ath_softc *sc = hw->priv; 
    164 +       bool flush = false, cb; 
     170+       bool flush = false; 
    165171        int ret = 0; 
    166172  
     
    176182+       case IEEE80211_AMPDU_TX_STOP_CONT: 
    177183                ath9k_ps_wakeup(sc); 
    178 -               ath_tx_aggr_stop(sc, sta, tid); 
     184                ath_tx_aggr_stop(sc, sta, tid); 
    179185-               ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid); 
    180 +               cb = ath_tx_aggr_stop(sc, sta, tid, flush); 
    181 +               if (cb) 
     186+               if (!flush) 
    182187+                       ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid); 
    183188                ath9k_ps_restore(sc); 
     
    36983703--- a/drivers/net/wireless/ath/ath9k/xmit.c 
    36993704+++ b/drivers/net/wireless/ath/ath9k/xmit.c 
    3700 @@ -157,7 +157,27 @@ static void ath_send_bar(struct ath_atx_ 
     3705@@ -125,24 +125,6 @@ static void ath_tx_queue_tid(struct ath_ 
     3706        list_add_tail(&ac->list, &txq->axq_acq); 
     3707 } 
     3708  
     3709-static void ath_tx_resume_tid(struct ath_softc *sc, struct ath_atx_tid *tid) 
     3710-{ 
     3711-       struct ath_txq *txq = tid->ac->txq; 
     3712- 
     3713-       WARN_ON(!tid->paused); 
     3714- 
     3715-       ath_txq_lock(sc, txq); 
     3716-       tid->paused = false; 
     3717- 
     3718-       if (skb_queue_empty(&tid->buf_q)) 
     3719-               goto unlock; 
     3720- 
     3721-       ath_tx_queue_tid(txq, tid); 
     3722-       ath_txq_schedule(sc, txq); 
     3723-unlock: 
     3724-       ath_txq_unlock_complete(sc, txq); 
     3725-} 
     3726- 
     3727 static struct ath_frame_info *get_frame_info(struct sk_buff *skb) 
     3728 { 
     3729        struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb); 
     3730@@ -157,6 +139,13 @@ static void ath_send_bar(struct ath_atx_ 
    37013731                           seqno << IEEE80211_SEQ_SEQ_SHIFT); 
    37023732 } 
    37033733  
    3704 -static void ath_tx_flush_tid(struct ath_softc *sc, struct ath_atx_tid *tid) 
    37053734+static void ath_set_rates(struct ieee80211_vif *vif, struct ieee80211_sta *sta, 
    37063735+                         struct ath_buf *bf) 
     
    37103739+} 
    37113740+ 
    3712 +static void ath_tx_clear_tid(struct ath_softc *sc, struct ath_atx_tid *tid) 
    3713 +{ 
    3714 +       tid->state &= ~AGGR_ADDBA_COMPLETE; 
    3715 +       tid->state &= ~AGGR_CLEANUP; 
    3716 +       if (!tid->stop_cb) 
    3717 +               return; 
    3718 + 
    3719 +       ieee80211_start_tx_ba_cb_irqsafe(tid->an->vif, tid->an->sta->addr, 
    3720 +                                        tid->tidno); 
    3721 +       tid->stop_cb = false; 
    3722 +} 
    3723 + 
    3724 +static void ath_tx_flush_tid(struct ath_softc *sc, struct ath_atx_tid *tid, 
    3725 +                            bool flush_packets) 
     3741 static void ath_tx_flush_tid(struct ath_softc *sc, struct ath_atx_tid *tid) 
    37263742 { 
    37273743        struct ath_txq *txq = tid->ac->txq; 
    3728         struct sk_buff *skb; 
    3729 @@ -174,31 +194,29 @@ static void ath_tx_flush_tid(struct ath_ 
    3730         while ((skb = __skb_dequeue(&tid->buf_q))) { 
    3731                 fi = get_frame_info(skb); 
    3732                 bf = fi->bf; 
    3733 +               if (!bf && !flush_packets) 
    3734 +                       bf = ath_tx_setup_buffer(sc, txq, tid, skb); 
    3735   
    3736                 if (!bf) { 
    3737 -                       bf = ath_tx_setup_buffer(sc, txq, tid, skb); 
    3738 -                       if (!bf) { 
    3739 -                               ieee80211_free_txskb(sc->hw, skb); 
    3740 -                               continue; 
    3741 -                       } 
    3742 +                       ieee80211_free_txskb(sc->hw, skb); 
    3743 +                       continue; 
    3744                 } 
    3745   
    3746 -               if (fi->retries) { 
    3747 +               if (fi->retries || flush_packets) { 
    3748                         list_add_tail(&bf->list, &bf_head); 
    3749                         ath_tx_update_baw(sc, tid, bf->bf_state.seqno); 
     3744@@ -189,15 +178,11 @@ static void ath_tx_flush_tid(struct ath_ 
    37503745                        ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0); 
    37513746                        sendbar = true; 
     
    37603755-               tid->state &= ~AGGR_CLEANUP; 
    37613756-       } 
    3762 +       if (tid->baw_head == tid->baw_tail) 
    3763 +               ath_tx_clear_tid(sc, tid); 
    3764   
    3765 -       if (sendbar) { 
    3766 +       if (sendbar && !flush_packets) { 
     3757- 
     3758        if (sendbar) { 
    37673759                ath_txq_unlock(sc, txq); 
    37683760                ath_send_bar(tid, tid->seq_start); 
    3769                 ath_txq_lock(sc, txq); 
    3770 @@ -269,9 +287,7 @@ static void ath_tid_drain(struct ath_sof 
     3761@@ -269,9 +254,7 @@ static void ath_tid_drain(struct ath_sof 
    37713762  
    37723763                list_add_tail(&bf->list, &bf_head); 
     
    37793770        } 
    37803771  
    3781 @@ -407,7 +423,7 @@ static void ath_tx_complete_aggr(struct  
     3772@@ -407,7 +390,7 @@ static void ath_tx_complete_aggr(struct  
    37823773  
    37833774        tx_info = IEEE80211_SKB_CB(skb); 
     
    37883779        retries = ts->ts_longretry + 1; 
    37893780        for (i = 0; i < ts->ts_rateindex; i++) 
    3790 @@ -594,7 +610,7 @@ static void ath_tx_complete_aggr(struct  
     3781@@ -483,19 +466,19 @@ static void ath_tx_complete_aggr(struct  
     3782                tx_info = IEEE80211_SKB_CB(skb); 
     3783                fi = get_frame_info(skb); 
     3784  
     3785-               if (ATH_BA_ISSET(ba, ATH_BA_INDEX(seq_st, seqno))) { 
     3786+               if (!BAW_WITHIN(tid->seq_start, tid->baw_size, seqno)) { 
     3787+                       /* 
     3788+                        * Outside of the current BlockAck window, 
     3789+                        * maybe part of a previous session 
     3790+                        */ 
     3791+                       txfail = 1; 
     3792+               } else if (ATH_BA_ISSET(ba, ATH_BA_INDEX(seq_st, seqno))) { 
     3793                        /* transmit completion, subframe is 
     3794                         * acked by block ack */ 
     3795                        acked_cnt++; 
     3796                } else if (!isaggr && txok) { 
     3797                        /* transmit completion */ 
     3798                        acked_cnt++; 
     3799-               } else if (tid->state & AGGR_CLEANUP) { 
     3800-                       /* 
     3801-                        * cleanup in progress, just fail 
     3802-                        * the un-acked sub-frames 
     3803-                        */ 
     3804-                       txfail = 1; 
     3805                } else if (flush) { 
     3806                        txpending = 1; 
     3807                } else if (fi->retries < ATH_MAX_SW_RETRIES) { 
     3808@@ -519,7 +502,7 @@ static void ath_tx_complete_aggr(struct  
     3809                if (bf_next != NULL || !bf_last->bf_stale) 
     3810                        list_move_tail(&bf->list, &bf_head); 
     3811  
     3812-               if (!txpending || (tid->state & AGGR_CLEANUP)) { 
     3813+               if (!txpending) { 
     3814                        /* 
     3815                         * complete the acked-ones/xretried ones; update 
     3816                         * block-ack window 
     3817@@ -593,9 +576,6 @@ static void ath_tx_complete_aggr(struct  
     3818                ath_txq_lock(sc, txq); 
    37913819        } 
    37923820  
    3793         if (tid->state & AGGR_CLEANUP) 
     3821-       if (tid->state & AGGR_CLEANUP) 
    37943822-               ath_tx_flush_tid(sc, tid); 
    3795 +               ath_tx_flush_tid(sc, tid, false); 
    3796   
     3823- 
    37973824        rcu_read_unlock(); 
    37983825  
    3799 @@ -612,6 +628,7 @@ static void ath_tx_process_buffer(struct 
     3826        if (needreset) 
     3827@@ -612,6 +592,7 @@ static void ath_tx_process_buffer(struct 
    38003828                                  struct ath_tx_status *ts, struct ath_buf *bf, 
    38013829                                  struct list_head *bf_head) 
     
    38053833  
    38063834        txok = !(ts->ts_status & ATH9K_TXERR_MASK); 
    3807 @@ -623,8 +640,12 @@ static void ath_tx_process_buffer(struct 
     3835@@ -623,8 +604,12 @@ static void ath_tx_process_buffer(struct 
    38083836                txq->axq_ampdu_depth--; 
    38093837  
     
    38193847        } else 
    38203848                ath_tx_complete_aggr(sc, txq, bf, bf_head, ts, txok); 
    3821 @@ -668,7 +689,7 @@ static u32 ath_lookup_rate(struct ath_so 
     3849@@ -668,7 +653,7 @@ static u32 ath_lookup_rate(struct ath_so 
    38223850  
    38233851        skb = bf->bf_mpdu; 
     
    38283856        /* 
    38293857         * Find the lowest frame length among the rate series that will have a 
    3830 @@ -736,8 +757,6 @@ static int ath_compute_num_delims(struct 
     3858@@ -736,8 +721,6 @@ static int ath_compute_num_delims(struct 
    38313859                                  bool first_subfrm) 
    38323860 { 
     
    38373865        u16 minlen; 
    38383866        u8 flags, rix; 
    3839 @@ -778,8 +797,8 @@ static int ath_compute_num_delims(struct 
     3867@@ -778,8 +761,8 @@ static int ath_compute_num_delims(struct 
    38403868        if (tid->an->mpdudensity == 0) 
    38413869                return ndelim; 
     
    38483876        half_gi = (flags & IEEE80211_TX_RC_SHORT_GI) ? 1 : 0; 
    38493877  
    3850 @@ -858,6 +877,7 @@ static enum ATH_AGGR_STATUS ath_tx_form_ 
     3878@@ -858,6 +841,7 @@ static enum ATH_AGGR_STATUS ath_tx_form_ 
    38513879                        bf_first = bf; 
    38523880  
     
    38563884                        rl = 1; 
    38573885                } 
    3858 @@ -998,14 +1018,14 @@ static void ath_buf_set_rate(struct ath_ 
     3886@@ -998,14 +982,14 @@ static void ath_buf_set_rate(struct ath_ 
    38593887  
    38603888        skb = bf->bf_mpdu; 
     
    38733901                int phy; 
    38743902  
    3875 @@ -1249,18 +1269,23 @@ int ath_tx_aggr_start(struct ath_softc * 
    3876         return 0; 
    3877  } 
    3878   
    3879 -void ath_tx_aggr_stop(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid) 
    3880 +bool ath_tx_aggr_stop(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid, 
    3881 +                     bool flush) 
    3882  { 
    3883         struct ath_node *an = (struct ath_node *)sta->drv_priv; 
     3903@@ -1224,9 +1208,6 @@ int ath_tx_aggr_start(struct ath_softc * 
     3904        an = (struct ath_node *)sta->drv_priv; 
     3905        txtid = ATH_AN_2_TID(an, tid); 
     3906  
     3907-       if (txtid->state & (AGGR_CLEANUP | AGGR_ADDBA_COMPLETE)) 
     3908-               return -EAGAIN; 
     3909- 
     3910        /* update ampdu factor/density, they may have changed. This may happen 
     3911         * in HT IBSS when a beacon with HT-info is received after the station 
     3912         * has already been added. 
     3913@@ -1238,7 +1219,7 @@ int ath_tx_aggr_start(struct ath_softc * 
     3914                an->mpdudensity = density; 
     3915        } 
     3916  
     3917-       txtid->state |= AGGR_ADDBA_PROGRESS; 
     3918+       txtid->active = true; 
     3919        txtid->paused = true; 
     3920        *ssn = txtid->seq_start = txtid->seq_next; 
     3921        txtid->bar_index = -1; 
     3922@@ -1255,28 +1236,9 @@ void ath_tx_aggr_stop(struct ath_softc * 
    38843923        struct ath_atx_tid *txtid = ATH_AN_2_TID(an, tid); 
    38853924        struct ath_txq *txq = txtid->ac->txq; 
    3886 +       bool ret = !flush; 
    3887 + 
    3888 +       if (flush) 
    3889 +               txtid->stop_cb = false; 
    3890   
    3891         if (txtid->state & AGGR_CLEANUP) 
     3925  
     3926-       if (txtid->state & AGGR_CLEANUP) 
    38923927-               return; 
    3893 +               return false; 
    3894   
    3895         if (!(txtid->state & AGGR_ADDBA_COMPLETE)) { 
    3896                 txtid->state &= ~AGGR_ADDBA_PROGRESS; 
     3928- 
     3929-       if (!(txtid->state & AGGR_ADDBA_COMPLETE)) { 
     3930-               txtid->state &= ~AGGR_ADDBA_PROGRESS; 
    38973931-               return; 
    3898 +               return ret; 
     3932-       } 
     3933- 
     3934        ath_txq_lock(sc, txq); 
     3935+       txtid->active = false; 
     3936        txtid->paused = true; 
     3937- 
     3938-       /* 
     3939-        * If frames are still being transmitted for this TID, they will be 
     3940-        * cleaned up during tx completion. To prevent race conditions, this 
     3941-        * TID can only be reused after all in-progress subframes have been 
     3942-        * completed. 
     3943-        */ 
     3944-       if (txtid->baw_head != txtid->baw_tail) 
     3945-               txtid->state |= AGGR_CLEANUP; 
     3946-       else 
     3947-               txtid->state &= ~AGGR_ADDBA_COMPLETE; 
     3948- 
     3949        ath_tx_flush_tid(sc, txtid); 
     3950        ath_txq_unlock_complete(sc, txq); 
     3951 } 
     3952@@ -1342,18 +1304,28 @@ void ath_tx_aggr_wakeup(struct ath_softc 
    38993953        } 
    3900   
    3901         ath_txq_lock(sc, txq); 
    3902 @@ -1272,13 +1297,17 @@ void ath_tx_aggr_stop(struct ath_softc * 
    3903          * TID can only be reused after all in-progress subframes have been 
    3904          * completed. 
    3905          */ 
    3906 -       if (txtid->baw_head != txtid->baw_tail) 
    3907 +       if (txtid->baw_head != txtid->baw_tail) { 
    3908                 txtid->state |= AGGR_CLEANUP; 
    3909 -       else 
    3910 +               ret = false; 
    3911 +               txtid->stop_cb = !flush; 
    3912 +       } else { 
    3913                 txtid->state &= ~AGGR_ADDBA_COMPLETE; 
     3954 } 
     3955  
     3956-void ath_tx_aggr_resume(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid) 
     3957+void ath_tx_aggr_resume(struct ath_softc *sc, struct ieee80211_sta *sta, 
     3958+                       u16 tidno) 
     3959 { 
     3960-       struct ath_atx_tid *txtid; 
     3961+       struct ath_atx_tid *tid; 
     3962        struct ath_node *an; 
     3963+       struct ath_txq *txq; 
     3964  
     3965        an = (struct ath_node *)sta->drv_priv; 
     3966+       tid = ATH_AN_2_TID(an, tidno); 
     3967+       txq = tid->ac->txq; 
     3968  
     3969-       txtid = ATH_AN_2_TID(an, tid); 
     3970-       txtid->baw_size = IEEE80211_MIN_AMPDU_BUF << sta->ht_cap.ampdu_factor; 
     3971-       txtid->state |= AGGR_ADDBA_COMPLETE; 
     3972-       txtid->state &= ~AGGR_ADDBA_PROGRESS; 
     3973-       ath_tx_resume_tid(sc, txtid); 
     3974+       ath_txq_lock(sc, txq); 
     3975+ 
     3976+       tid->baw_size = IEEE80211_MIN_AMPDU_BUF << sta->ht_cap.ampdu_factor; 
     3977+       tid->paused = false; 
     3978+ 
     3979+       if (!skb_queue_empty(&tid->buf_q)) { 
     3980+               ath_tx_queue_tid(txq, tid); 
     3981+               ath_txq_schedule(sc, txq); 
    39143982+       } 
    3915   
    3916 -       ath_tx_flush_tid(sc, txtid); 
    3917 +       ath_tx_flush_tid(sc, txtid, flush); 
    3918         ath_txq_unlock_complete(sc, txq); 
    3919 +       return ret; 
    3920  } 
    3921   
    3922  void ath_tx_aggr_sleep(struct ieee80211_sta *sta, struct ath_softc *sc, 
    3923 @@ -1743,6 +1772,7 @@ static void ath_tx_send_ampdu(struct ath 
     3983+ 
     3984+       ath_txq_unlock_complete(sc, txq); 
     3985 } 
     3986  
     3987 /********************/ 
     3988@@ -1743,6 +1715,7 @@ static void ath_tx_send_ampdu(struct ath 
    39243989                return; 
    39253990        } 
     
    39293994        INIT_LIST_HEAD(&bf_head); 
    39303995        list_add(&bf->list, &bf_head); 
    3931 @@ -1892,49 +1922,6 @@ static struct ath_buf *ath_tx_setup_buff 
     3996@@ -1892,49 +1865,6 @@ static struct ath_buf *ath_tx_setup_buff 
    39323997        return bf; 
    39333998 } 
     
    39794044 int ath_tx_start(struct ieee80211_hw *hw, struct sk_buff *skb, 
    39804045                 struct ath_tx_control *txctl) 
    3981 @@ -1945,8 +1932,11 @@ int ath_tx_start(struct ieee80211_hw *hw 
     4046@@ -1945,8 +1875,11 @@ int ath_tx_start(struct ieee80211_hw *hw 
    39824047        struct ieee80211_vif *vif = info->control.vif; 
    39834048        struct ath_softc *sc = hw->priv; 
     
    39914056  
    39924057        /* NOTE:  sta can be NULL according to net/mac80211.h */ 
    3993 @@ -2002,8 +1992,41 @@ int ath_tx_start(struct ieee80211_hw *hw 
     4058@@ -2002,8 +1935,41 @@ int ath_tx_start(struct ieee80211_hw *hw 
    39944059                txq->stopped = true; 
    39954060        } 
     
    40004065+                       IEEE80211_QOS_CTL_TID_MASK; 
    40014066+               tid = ATH_AN_2_TID(txctl->an, tidno); 
    4002 + 
     4067  
    40034068+               WARN_ON(tid->ac->txq != txctl->txq); 
    40044069+       } 
     
    40124077+               goto out; 
    40134078+       } 
    4014   
     4079+ 
    40154080+       bf = ath_tx_setup_buffer(sc, txctl->txq, tid, skb); 
    40164081+       if (!bf) { 
     
    40344099  
    40354100        return 0; 
    4036 @@ -2414,6 +2437,7 @@ void ath_tx_node_init(struct ath_softc * 
     4101@@ -2408,12 +2374,10 @@ void ath_tx_node_init(struct ath_softc * 
     4102                tid->baw_head  = tid->baw_tail = 0; 
     4103                tid->sched     = false; 
     4104                tid->paused    = false; 
     4105-               tid->state &= ~AGGR_CLEANUP; 
     4106+               tid->active        = false; 
     4107                __skb_queue_head_init(&tid->buf_q); 
     4108                acno = TID_TO_WME_AC(tidno); 
    40374109                tid->ac = &an->ac[acno]; 
    4038                 tid->state &= ~AGGR_ADDBA_COMPLETE; 
    4039                 tid->state &= ~AGGR_ADDBA_PROGRESS; 
    4040 +               tid->stop_cb = false; 
     4110-               tid->state &= ~AGGR_ADDBA_COMPLETE; 
     4111-               tid->state &= ~AGGR_ADDBA_PROGRESS; 
    40414112        } 
    40424113  
    40434114        for (acno = 0, ac = &an->ac[acno]; 
    4044 @@ -2450,8 +2474,7 @@ void ath_tx_node_cleanup(struct ath_soft 
     4115@@ -2450,9 +2414,9 @@ void ath_tx_node_cleanup(struct ath_soft 
    40454116                } 
    40464117  
     
    40484119-               tid->state &= ~AGGR_ADDBA_COMPLETE; 
    40494120-               tid->state &= ~AGGR_CLEANUP; 
    4050 +               ath_tx_clear_tid(sc, tid); 
     4121+               tid->active = false; 
    40514122  
    40524123                ath_txq_unlock(sc, txq); 
    40534124        } 
     4125 } 
     4126+ 
    40544127--- a/drivers/net/wireless/ath/ath9k/recv.c 
    40554128+++ b/drivers/net/wireless/ath/ath9k/recv.c 
     
    41184191                __cfg80211_disconnected(dev, NULL, 0, 0, false); 
    41194192        else if (wdev->sme_state == CFG80211_SME_CONNECTING) 
     4193--- a/drivers/net/wireless/ath/ath9k/rc.c 
     4194+++ b/drivers/net/wireless/ath/ath9k/rc.c 
     4195@@ -1227,10 +1227,7 @@ static bool ath_tx_aggr_check(struct ath 
     4196                return false; 
     4197  
     4198        txtid = ATH_AN_2_TID(an, tidno); 
     4199- 
     4200-       if (!(txtid->state & (AGGR_ADDBA_COMPLETE | AGGR_ADDBA_PROGRESS))) 
     4201-                       return true; 
     4202-       return false; 
     4203+       return !txtid->active; 
     4204 } 
     4205  
     4206  
  • trunk/package/mac80211/patches/512-ath9k_channelbw_debugfs.patch

    r36648 r36656  
    11--- a/drivers/net/wireless/ath/ath9k/ath9k.h 
    22+++ b/drivers/net/wireless/ath/ath9k/ath9k.h 
    3 @@ -693,6 +693,7 @@ struct ath_softc { 
     3@@ -687,6 +687,7 @@ struct ath_softc { 
    44        struct ieee80211_hw *hw; 
    55        struct device *dev; 
     
    99        struct survey_info survey[ATH9K_NUM_CHANNELS]; 
    1010  
    11 @@ -897,6 +898,7 @@ struct fft_sample_ht20 { 
     11@@ -891,6 +892,7 @@ struct fft_sample_ht20 { 
    1212        u8 data[SPECTRAL_HT20_NUM_BINS]; 
    1313 } __packed; 
  • trunk/package/mac80211/patches/530-ath9k_extra_leds.patch

    r36648 r36656  
    11--- a/drivers/net/wireless/ath/ath9k/ath9k.h 
    22+++ b/drivers/net/wireless/ath/ath9k/ath9k.h 
    3 @@ -555,6 +555,9 @@ struct ath9k_wow_pattern { 
     3@@ -549,6 +549,9 @@ struct ath9k_wow_pattern { 
    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 @@ -689,6 +692,13 @@ enum spectral_mode { 
     13@@ -683,6 +686,13 @@ enum spectral_mode { 
    1414        SPECTRAL_CHANSCAN, 
    1515 }; 
     
    2525        struct ieee80211_hw *hw; 
    2626        struct device *dev; 
    27 @@ -730,9 +740,8 @@ struct ath_softc { 
     27@@ -724,9 +734,8 @@ struct ath_softc { 
    2828        struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS]; 
    2929  
Note: See TracChangeset for help on using the changeset viewer.