mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-28 20:44:27 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From: Felix Fietkau <nbd@openwrt.org>
 | |
| Date: Fri, 13 Mar 2015 10:49:40 +0100
 | |
| Subject: [PATCH] mac80211: minstrel_ht: fix rounding issue in MCS duration
 | |
|  calculation
 | |
| 
 | |
| On very high MCS bitrates, the calculated duration of rates that are
 | |
| next to each other can be very imprecise, due to the small packet size
 | |
| used as reference (1200 bytes).
 | |
| This is most visible in VHT80 nss=2 MCS8/9, for which minstrel shows the
 | |
| same throughput when the probability is also the same. This leads to a
 | |
| bad rate selection for such rates.
 | |
| 
 | |
| Fix this issue by introducing an average A-MPDU size factor into the
 | |
| calculation.
 | |
| 
 | |
| Signed-off-by: Felix Fietkau <nbd@openwrt.org>
 | |
| ---
 | |
| 
 | |
| --- a/net/mac80211/rc80211_minstrel_ht.c
 | |
| +++ b/net/mac80211/rc80211_minstrel_ht.c
 | |
| @@ -17,10 +17,11 @@
 | |
|  #include "rc80211_minstrel.h"
 | |
|  #include "rc80211_minstrel_ht.h"
 | |
|  
 | |
| +#define AVG_AMPDU_SIZE	16
 | |
|  #define AVG_PKT_SIZE	1200
 | |
|  
 | |
|  /* Number of bits for an average sized packet */
 | |
| -#define MCS_NBITS (AVG_PKT_SIZE << 3)
 | |
| +#define MCS_NBITS ((AVG_PKT_SIZE * AVG_AMPDU_SIZE) << 3)
 | |
|  
 | |
|  /* Number of symbols for a packet with (bps) bits per symbol */
 | |
|  #define MCS_NSYMS(bps) DIV_ROUND_UP(MCS_NBITS, (bps))
 | |
| @@ -33,7 +34,8 @@
 | |
|  	)
 | |
|  
 | |
|  /* Transmit duration for the raw data part of an average sized packet */
 | |
| -#define MCS_DURATION(streams, sgi, bps) MCS_SYMBOL_TIME(sgi, MCS_NSYMS((streams) * (bps)))
 | |
| +#define MCS_DURATION(streams, sgi, bps) \
 | |
| +	(MCS_SYMBOL_TIME(sgi, MCS_NSYMS((streams) * (bps))) / AVG_AMPDU_SIZE)
 | |
|  
 | |
|  #define BW_20			0
 | |
|  #define BW_40			1
 |