Browse Source

mac80211: minstrel: reduce size of struct minstrel_rate_stats

On minstrel_ht, the size of the per-sta struct is almost 18k, making it
an order-3 allocation.
A few fields inside the per-rate statistics are bigger than they need to
be. This patch reduces the size enough to cut down the per-sta struct to
about 13k (order-2 allocation).

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Felix Fietkau 10 years ago
parent
commit
8d819a92cc
2 changed files with 11 additions and 10 deletions
  1. 3 3
      net/mac80211/rc80211_minstrel.c
  2. 8 7
      net/mac80211/rc80211_minstrel.h

+ 3 - 3
net/mac80211/rc80211_minstrel.c

@@ -263,12 +263,12 @@ static inline unsigned int
 minstrel_get_retry_count(struct minstrel_rate *mr,
 minstrel_get_retry_count(struct minstrel_rate *mr,
 			 struct ieee80211_tx_info *info)
 			 struct ieee80211_tx_info *info)
 {
 {
-	unsigned int retry = mr->adjusted_retry_count;
+	u8 retry = mr->adjusted_retry_count;
 
 
 	if (info->control.use_rts)
 	if (info->control.use_rts)
-		retry = max(2U, min(mr->stats.retry_count_rtscts, retry));
+		retry = max_t(u8, 2, min(mr->stats.retry_count_rtscts, retry));
 	else if (info->control.use_cts_prot)
 	else if (info->control.use_cts_prot)
-		retry = max(2U, min(mr->retry_count_cts, retry));
+		retry = max_t(u8, 2, min(mr->retry_count_cts, retry));
 	return retry;
 	return retry;
 }
 }
 
 

+ 8 - 7
net/mac80211/rc80211_minstrel.h

@@ -33,8 +33,8 @@ minstrel_ewma(int old, int new, int weight)
 
 
 struct minstrel_rate_stats {
 struct minstrel_rate_stats {
 	/* current / last sampling period attempts/success counters */
 	/* current / last sampling period attempts/success counters */
-	unsigned int attempts, last_attempts;
-	unsigned int success, last_success;
+	u16 attempts, last_attempts;
+	u16 success, last_success;
 
 
 	/* total attempts/success counters */
 	/* total attempts/success counters */
 	u64 att_hist, succ_hist;
 	u64 att_hist, succ_hist;
@@ -46,8 +46,8 @@ struct minstrel_rate_stats {
 	unsigned int cur_prob, probability;
 	unsigned int cur_prob, probability;
 
 
 	/* maximum retry counts */
 	/* maximum retry counts */
-	unsigned int retry_count;
-	unsigned int retry_count_rtscts;
+	u8 retry_count;
+	u8 retry_count_rtscts;
 
 
 	u8 sample_skipped;
 	u8 sample_skipped;
 	bool retry_updated;
 	bool retry_updated;
@@ -55,14 +55,15 @@ struct minstrel_rate_stats {
 
 
 struct minstrel_rate {
 struct minstrel_rate {
 	int bitrate;
 	int bitrate;
-	int rix;
+
+	s8 rix;
+	u8 retry_count_cts;
+	u8 adjusted_retry_count;
 
 
 	unsigned int perfect_tx_time;
 	unsigned int perfect_tx_time;
 	unsigned int ack_time;
 	unsigned int ack_time;
 
 
 	int sample_limit;
 	int sample_limit;
-	unsigned int retry_count_cts;
-	unsigned int adjusted_retry_count;
 
 
 	struct minstrel_rate_stats stats;
 	struct minstrel_rate_stats stats;
 };
 };