Also include follow-up regression fix from master Signed-off-by: Felix Fietkau <nbd@nbd.name> (cherry-picked from commits9861050b85andf0992d7a30)
		
			
				
	
	
		
			43 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From: Felix Fietkau <nbd@nbd.name>
 | 
						|
Date: Wed, 5 Jun 2019 20:42:49 +0200
 | 
						|
Subject: [PATCH] mac80211: minstrel_ht: reduce unnecessary rate probing
 | 
						|
 attempts
 | 
						|
 | 
						|
On hardware with static fallback tables (e.g. mt76x2), rate probing attempts
 | 
						|
can be very expensive.
 | 
						|
On such devices, avoid sampling rates slower than the per-group max throughput
 | 
						|
rate, based on the assumption that the fallback table will take care of probing
 | 
						|
lower rates within that group if the higher rates fail.
 | 
						|
To make this work, this also fixes a wrong initialization in the previously
 | 
						|
unused per-group sorted rate array.
 | 
						|
To further reduce unnecessary probing attempts, skip duplicate attempts on
 | 
						|
rates slower than the max throughput rate.
 | 
						|
 | 
						|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
						|
---
 | 
						|
 | 
						|
--- a/net/mac80211/rc80211_minstrel_ht.c
 | 
						|
+++ b/net/mac80211/rc80211_minstrel_ht.c
 | 
						|
@@ -1028,6 +1028,21 @@ minstrel_get_sample_rate(struct minstrel
 | 
						|
 	    minstrel_get_duration(mi->max_prob_rate) * 3 < sample_dur)
 | 
						|
 		return -1;
 | 
						|
 
 | 
						|
+
 | 
						|
+	/*
 | 
						|
+	 * For devices with no configurable multi-rate retry, skip sampling
 | 
						|
+	 * below the per-group max throughput rate, and only use one sampling
 | 
						|
+	 * attempt per rate
 | 
						|
+	 */
 | 
						|
+	if (mp->hw->max_rates == 1 &&
 | 
						|
+	    (minstrel_get_duration(mg->max_group_tp_rate[0]) < sample_dur ||
 | 
						|
+	     mrs->attempts))
 | 
						|
+		return -1;
 | 
						|
+
 | 
						|
+	/* Skip already sampled slow rates */
 | 
						|
+	if (sample_dur >= minstrel_get_duration(tp_rate1) && mrs->attempts)
 | 
						|
+		return -1;
 | 
						|
+
 | 
						|
 	/*
 | 
						|
 	 * Make sure that lower rates get sampled only occasionally,
 | 
						|
 	 * if the link is working perfectly.
 |