Changeset 35848


Ignore:
Timestamp:
2013-03-03T13:05:33+01:00 (5 years ago)
Author:
nbd
Message:

mac80211: merge some more minstrel_ht performance improvements

File:
1 edited

Legend:

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

    r35847 r35848  
    679679  
    680680 /* 
    681 @@ -243,6 +246,7 @@ minstrel_ht_update_stats(struct minstrel 
    682         struct minstrel_rate_stats *mr; 
    683         int cur_prob, cur_prob_tp, cur_tp, cur_tp2; 
    684         int group, i, index; 
    685 +       int prob_max_streams = 1; 
    686   
    687         if (mi->ampdu_packets > 0) { 
    688                 mi->avg_ampdu_len = minstrel_ewma(mi->avg_ampdu_len, 
    689 @@ -308,8 +312,8 @@ minstrel_ht_update_stats(struct minstrel 
     681@@ -308,8 +311,8 @@ minstrel_ht_update_stats(struct minstrel 
    690682                } 
    691683        } 
     
    698690        cur_prob = 0; 
    699691        cur_prob_tp = 0; 
    700 @@ -320,20 +324,13 @@ minstrel_ht_update_stats(struct minstrel 
     692@@ -320,20 +323,13 @@ minstrel_ht_update_stats(struct minstrel 
    701693                if (!mg->supported) 
    702694                        continue; 
     
    716708                        mi->max_tp_rate = mg->max_tp_rate; 
    717709                        cur_tp = mr->cur_tp; 
    718 +                       prob_max_streams = minstrel_mcs_groups[group].streams - 1; 
     710+                       mi->max_prob_streams = minstrel_mcs_groups[group].streams - 1; 
    719711                } 
    720712  
    721713                mr = minstrel_get_ratestats(mi, mg->max_tp_rate2); 
    722 @@ -343,6 +340,23 @@ minstrel_ht_update_stats(struct minstrel 
     714@@ -343,6 +339,23 @@ minstrel_ht_update_stats(struct minstrel 
    723715                } 
    724716        } 
    725717  
    726 +       if (prob_max_streams < 1) 
    727 +               prob_max_streams = 1; 
     718+       if (mi->max_prob_streams < 1) 
     719+               mi->max_prob_streams = 1; 
    728720+ 
    729721+       for (group = 0; group < ARRAY_SIZE(minstrel_mcs_groups); group++) { 
     
    733725+               mr = minstrel_get_ratestats(mi, mg->max_prob_rate); 
    734726+               if (cur_prob_tp < mr->cur_tp && 
    735 +                   minstrel_mcs_groups[group].streams <= prob_max_streams) { 
     727+                   minstrel_mcs_groups[group].streams <= mi->max_prob_streams) { 
    736728+                       mi->max_prob_rate = mg->max_prob_rate; 
    737729+                       cur_prob = mr->cur_prob; 
     
    744736 } 
    745737  
    746 @@ -536,7 +550,7 @@ minstrel_calc_retransmit(struct minstrel 
     738@@ -536,7 +549,7 @@ minstrel_calc_retransmit(struct minstrel 
    747739        mr->retry_updated = true; 
    748740  
     
    753745        /* Contention time for first 2 tries */ 
    754746        ctime = (t_slot * cw) >> 1; 
     747@@ -616,6 +629,7 @@ minstrel_get_sample_rate(struct minstrel 
     748 { 
     749        struct minstrel_rate_stats *mr; 
     750        struct minstrel_mcs_group_data *mg; 
     751+       unsigned int sample_dur, sample_group; 
     752        int sample_idx = 0; 
     753  
     754        if (mi->sample_wait > 0) { 
     755@@ -626,11 +640,11 @@ minstrel_get_sample_rate(struct minstrel 
     756        if (!mi->sample_tries) 
     757                return -1; 
     758  
     759-       mi->sample_tries--; 
     760        mg = &mi->groups[mi->sample_group]; 
     761        sample_idx = sample_table[mg->column][mg->index]; 
     762        mr = &mg->rates[sample_idx]; 
     763-       sample_idx += mi->sample_group * MCS_GROUP_RATES; 
     764+       sample_group = mi->sample_group; 
     765+       sample_idx += sample_group * MCS_GROUP_RATES; 
     766        minstrel_next_sample_idx(mi); 
     767  
     768        /* 
     769@@ -651,14 +665,18 @@ minstrel_get_sample_rate(struct minstrel 
     770         * Make sure that lower rates get sampled only occasionally, 
     771         * if the link is working perfectly. 
     772         */ 
     773-       if (minstrel_get_duration(sample_idx) > 
     774-           minstrel_get_duration(mi->max_tp_rate)) { 
     775+       sample_dur = minstrel_get_duration(sample_idx); 
     776+       if (sample_dur >= minstrel_get_duration(mi->max_tp_rate2) && 
     777+           (mi->max_prob_streams < 
     778+            minstrel_mcs_groups[sample_group].streams || 
     779+            sample_dur >= minstrel_get_duration(mi->max_prob_rate))) { 
     780                if (mr->sample_skipped < 20) 
     781                        return -1; 
     782  
     783                if (mi->sample_slow++ > 2) 
     784                        return -1; 
     785        } 
     786+       mi->sample_tries--; 
     787  
     788        return sample_idx; 
     789 } 
     790--- a/net/mac80211/rc80211_minstrel_ht.h 
     791+++ b/net/mac80211/rc80211_minstrel_ht.h 
     792@@ -85,6 +85,7 @@ struct minstrel_ht_sta { 
     793  
     794        /* best probability rate */ 
     795        unsigned int max_prob_rate; 
     796+       unsigned int max_prob_streams; 
     797  
     798        /* time of last status update */ 
     799        unsigned long stats_update; 
Note: See TracChangeset for help on using the changeset viewer.