mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 05:54:26 -04:00 
			
		
		
		
	A wrong quilt configuration was used last time.
Fixes: ed1e234d87 ("mac80211: refresh patches")
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
		
	
			
		
			
				
	
	
		
			68 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From: Felix Fietkau <nbd@nbd.name>
 | |
| Date: Sat, 26 Dec 2020 19:08:19 +0100
 | |
| Subject: [PATCH] mac80211: minstrel_ht: improve ampdu length estimation
 | |
| 
 | |
| If the driver does not report A-MPDU length, estimate it based on the rate.
 | |
| 
 | |
| Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | |
| ---
 | |
| 
 | |
| --- a/net/mac80211/rc80211_minstrel_ht.c
 | |
| +++ b/net/mac80211/rc80211_minstrel_ht.c
 | |
| @@ -382,13 +382,37 @@ minstrel_get_ratestats(struct minstrel_h
 | |
|  	return &mi->groups[index / MCS_GROUP_RATES].rates[index % MCS_GROUP_RATES];
 | |
|  }
 | |
|  
 | |
| +static inline int
 | |
| +minstrel_get_duration(int index)
 | |
| +{
 | |
| +	const struct mcs_group *group = &minstrel_mcs_groups[index / MCS_GROUP_RATES];
 | |
| +	unsigned int duration = group->duration[index % MCS_GROUP_RATES];
 | |
| +	return duration << group->shift;
 | |
| +}
 | |
| +
 | |
|  static unsigned int
 | |
|  minstrel_ht_avg_ampdu_len(struct minstrel_ht_sta *mi)
 | |
|  {
 | |
| -	if (!mi->avg_ampdu_len)
 | |
| -		return AVG_AMPDU_SIZE;
 | |
| +	int duration;
 | |
| +
 | |
| +	if (mi->avg_ampdu_len)
 | |
| +		return MINSTREL_TRUNC(mi->avg_ampdu_len);
 | |
| +
 | |
| +	if (minstrel_ht_is_legacy_group(mi->max_tp_rate[0] / MCS_GROUP_RATES))
 | |
| +		return 1;
 | |
| +
 | |
| +	duration = minstrel_get_duration(mi->max_tp_rate[0]);
 | |
|  
 | |
| -	return MINSTREL_TRUNC(mi->avg_ampdu_len);
 | |
| +	if (duration > 400 * 1000)
 | |
| +		return 2;
 | |
| +
 | |
| +	if (duration > 250 * 1000)
 | |
| +		return 4;
 | |
| +
 | |
| +	if (duration > 150 * 1000)
 | |
| +		return 8;
 | |
| +
 | |
| +	return 16;
 | |
|  }
 | |
|  
 | |
|  /*
 | |
| @@ -588,14 +612,6 @@ minstrel_ht_prob_rate_reduce_streams(str
 | |
|  	}
 | |
|  }
 | |
|  
 | |
| -static inline int
 | |
| -minstrel_get_duration(int index)
 | |
| -{
 | |
| -	const struct mcs_group *group = &minstrel_mcs_groups[index / MCS_GROUP_RATES];
 | |
| -	unsigned int duration = group->duration[index % MCS_GROUP_RATES];
 | |
| -	return duration << group->shift;
 | |
| -}
 | |
| -
 | |
|  static bool
 | |
|  minstrel_ht_probe_group(struct minstrel_ht_sta *mi, const struct mcs_group *tp_group,
 | |
|  						int tp_idx, const struct mcs_group *group)
 |