linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] mac80211: minstrel_ht: pick only supported rates for sta and group max*rates
@ 2013-04-18 11:51 Karl Beldan
  2013-04-18 12:17 ` Johannes Berg
  0 siblings, 1 reply; 7+ messages in thread
From: Karl Beldan @ 2013-04-18 11:51 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linux-wireless, Karl Beldan, Karl Beldan, Felix Fietkau

From: Karl Beldan <karl.beldan@rivierawaves.com>

minstrel_ht initializes max_tp_rate max_tp_rate2 and max_prob_rate to
zero both for minstrel_ht_sta and minstrel_mcs_group_data.
This is wrong since there is no guarantee that the 1st rate of any
group is supported.

Signed-off-by: Karl Beldan <karl.beldan@rivierawaves.com>
---
 net/mac80211/rc80211_minstrel_ht.c | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/net/mac80211/rc80211_minstrel_ht.c b/net/mac80211/rc80211_minstrel_ht.c
index d2b264d..eb6dc3f 100644
--- a/net/mac80211/rc80211_minstrel_ht.c
+++ b/net/mac80211/rc80211_minstrel_ht.c
@@ -244,6 +244,7 @@ minstrel_ht_update_stats(struct minstrel_priv *mp, struct minstrel_ht_sta *mi)
 	struct minstrel_rate_stats *mr;
 	int cur_prob, cur_prob_tp, cur_tp, cur_tp2;
 	int group, i, index;
+	bool mi_rates_valid = false;
 
 	if (mi->ampdu_packets > 0) {
 		mi->avg_ampdu_len = minstrel_ewma(mi->avg_ampdu_len,
@@ -254,11 +255,10 @@ minstrel_ht_update_stats(struct minstrel_priv *mp, struct minstrel_ht_sta *mi)
 
 	mi->sample_slow = 0;
 	mi->sample_count = 0;
-	mi->max_tp_rate = 0;
-	mi->max_tp_rate2 = 0;
-	mi->max_prob_rate = 0;
 
 	for (group = 0; group < ARRAY_SIZE(minstrel_mcs_groups); group++) {
+		bool mg_rates_valid = false;
+
 		cur_prob = 0;
 		cur_prob_tp = 0;
 		cur_tp = 0;
@@ -268,15 +268,24 @@ minstrel_ht_update_stats(struct minstrel_priv *mp, struct minstrel_ht_sta *mi)
 		if (!mg->supported)
 			continue;
 
-		mg->max_tp_rate = 0;
-		mg->max_tp_rate2 = 0;
-		mg->max_prob_rate = 0;
 		mi->sample_count++;
 
 		for (i = 0; i < MCS_GROUP_RATES; i++) {
 			if (!(mg->supported & BIT(i)))
 				continue;
 
+			// initialize {mg,mi}->max_rates indexes
+			if (!mg_rates_valid) {
+				mg->max_tp_rate = mg->max_tp_rate2 =
+					mg->max_prob_rate = i;
+				if (!mi_rates_valid) {
+					mi->max_tp_rate = mi->max_tp_rate2 =
+						mi->max_prob_rate = i;
+					mi_rates_valid = true;
+				}
+				mg_rates_valid = true;
+			}
+
 			mr = &mg->rates[i];
 			mr->retry_updated = false;
 			index = MCS_GROUP_RATES * group + i;
-- 
1.8.2


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] mac80211: minstrel_ht: pick only supported rates for sta and group max*rates
  2013-04-18 12:17 ` Johannes Berg
@ 2013-04-18 12:16   ` Karl Beldan
  0 siblings, 0 replies; 7+ messages in thread
From: Karl Beldan @ 2013-04-18 12:16 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linux-wireless, Karl Beldan, Felix Fietkau

On Thu, Apr 18, 2013 at 02:17:42PM +0200, Johannes Berg wrote:
> On Thu, 2013-04-18 at 13:51 +0200, Karl Beldan wrote:
> 
> > +			// initialize {mg,mi}->max_rates indexes
> 
> Please don't use C99 comments (both here and the other patch)
> 
Oops, will fix this.
 
Karl

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] mac80211: minstrel_ht: pick only supported rates for sta and group max*rates
  2013-04-18 11:51 Karl Beldan
@ 2013-04-18 12:17 ` Johannes Berg
  2013-04-18 12:16   ` Karl Beldan
  0 siblings, 1 reply; 7+ messages in thread
From: Johannes Berg @ 2013-04-18 12:17 UTC (permalink / raw)
  To: Karl Beldan; +Cc: linux-wireless, Karl Beldan, Felix Fietkau

On Thu, 2013-04-18 at 13:51 +0200, Karl Beldan wrote:

> +			// initialize {mg,mi}->max_rates indexes

Please don't use C99 comments (both here and the other patch)

johannes


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/2] mac80211: minstrel_ht: pick only supported rates for sta and group max*rates
@ 2013-04-18 12:24 Karl Beldan
  2013-04-18 12:24 ` [PATCH 2/2] mac80211: minstrel_ht: initialize rates selection Karl Beldan
  2013-04-18 12:40 ` [PATCH 1/2] mac80211: minstrel_ht: pick only supported rates for sta and group max*rates Felix Fietkau
  0 siblings, 2 replies; 7+ messages in thread
From: Karl Beldan @ 2013-04-18 12:24 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linux-wireless, Karl Beldan, Karl Beldan, Felix Fietkau

From: Karl Beldan <karl.beldan@rivierawaves.com>

minstrel_ht initializes max_tp_rate max_tp_rate2 and max_prob_rate to
zero both for minstrel_ht_sta and minstrel_mcs_group_data.
This is wrong since there is no guarantee that the 1st rate of any
group is supported.

Signed-off-by: Karl Beldan <karl.beldan@rivierawaves.com>
---
 net/mac80211/rc80211_minstrel_ht.c | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/net/mac80211/rc80211_minstrel_ht.c b/net/mac80211/rc80211_minstrel_ht.c
index d2b264d..eb6dc3f 100644
--- a/net/mac80211/rc80211_minstrel_ht.c
+++ b/net/mac80211/rc80211_minstrel_ht.c
@@ -244,6 +244,7 @@ minstrel_ht_update_stats(struct minstrel_priv *mp, struct minstrel_ht_sta *mi)
 	struct minstrel_rate_stats *mr;
 	int cur_prob, cur_prob_tp, cur_tp, cur_tp2;
 	int group, i, index;
+	bool mi_rates_valid = false;
 
 	if (mi->ampdu_packets > 0) {
 		mi->avg_ampdu_len = minstrel_ewma(mi->avg_ampdu_len,
@@ -254,11 +255,10 @@ minstrel_ht_update_stats(struct minstrel_priv *mp, struct minstrel_ht_sta *mi)
 
 	mi->sample_slow = 0;
 	mi->sample_count = 0;
-	mi->max_tp_rate = 0;
-	mi->max_tp_rate2 = 0;
-	mi->max_prob_rate = 0;
 
 	for (group = 0; group < ARRAY_SIZE(minstrel_mcs_groups); group++) {
+		bool mg_rates_valid = false;
+
 		cur_prob = 0;
 		cur_prob_tp = 0;
 		cur_tp = 0;
@@ -268,15 +268,24 @@ minstrel_ht_update_stats(struct minstrel_priv *mp, struct minstrel_ht_sta *mi)
 		if (!mg->supported)
 			continue;
 
-		mg->max_tp_rate = 0;
-		mg->max_tp_rate2 = 0;
-		mg->max_prob_rate = 0;
 		mi->sample_count++;
 
 		for (i = 0; i < MCS_GROUP_RATES; i++) {
 			if (!(mg->supported & BIT(i)))
 				continue;
 
+			/* initialize rates selections starting indexes */
+			if (!mg_rates_valid) {
+				mg->max_tp_rate = mg->max_tp_rate2 =
+					mg->max_prob_rate = i;
+				if (!mi_rates_valid) {
+					mi->max_tp_rate = mi->max_tp_rate2 =
+						mi->max_prob_rate = i;
+					mi_rates_valid = true;
+				}
+				mg_rates_valid = true;
+			}
+
 			mr = &mg->rates[i];
 			mr->retry_updated = false;
 			index = MCS_GROUP_RATES * group + i;
-- 
1.8.2


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/2] mac80211: minstrel_ht: initialize rates selection
  2013-04-18 12:24 [PATCH 1/2] mac80211: minstrel_ht: pick only supported rates for sta and group max*rates Karl Beldan
@ 2013-04-18 12:24 ` Karl Beldan
  2013-04-18 12:29   ` Karl Beldan
  2013-04-18 12:40 ` [PATCH 1/2] mac80211: minstrel_ht: pick only supported rates for sta and group max*rates Felix Fietkau
  1 sibling, 1 reply; 7+ messages in thread
From: Karl Beldan @ 2013-04-18 12:24 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linux-wireless, Karl Beldan, Karl Beldan, Felix Fietkau

From: Karl Beldan <karl.beldan@rivierawaves.com>

Initialize {mp,mi}->{max_tp_rate,max_tp_rate2,max_prob_rate} in
minstrel_ht's rate_init and rate_update.

Signed-off-by: Karl Beldan <karl.beldan@rivierawaves.com>
---
 net/mac80211/rc80211_minstrel_ht.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/net/mac80211/rc80211_minstrel_ht.c b/net/mac80211/rc80211_minstrel_ht.c
index eb6dc3f..5768cc0 100644
--- a/net/mac80211/rc80211_minstrel_ht.c
+++ b/net/mac80211/rc80211_minstrel_ht.c
@@ -907,6 +907,9 @@ minstrel_ht_update_caps(void *priv, struct ieee80211_supported_band *sband,
 	if (!n_supported)
 		goto use_legacy;
 
+	/* init {mi,mi->groups[*]}->{max_tp_rate,max_tp_rate2,max_prob_rate} */
+	minstrel_ht_update_stats(mp, mi);
+
 	return;
 
 use_legacy:
-- 
1.8.2


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] mac80211: minstrel_ht: initialize rates selection
  2013-04-18 12:24 ` [PATCH 2/2] mac80211: minstrel_ht: initialize rates selection Karl Beldan
@ 2013-04-18 12:29   ` Karl Beldan
  0 siblings, 0 replies; 7+ messages in thread
From: Karl Beldan @ 2013-04-18 12:29 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linux-wireless, Karl Beldan, Felix Fietkau

I sent v2 twice,  incl. one whithout the v2 prefix .. sorry for the
noise.
 
Karl

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] mac80211: minstrel_ht: pick only supported rates for sta and group max*rates
  2013-04-18 12:24 [PATCH 1/2] mac80211: minstrel_ht: pick only supported rates for sta and group max*rates Karl Beldan
  2013-04-18 12:24 ` [PATCH 2/2] mac80211: minstrel_ht: initialize rates selection Karl Beldan
@ 2013-04-18 12:40 ` Felix Fietkau
  1 sibling, 0 replies; 7+ messages in thread
From: Felix Fietkau @ 2013-04-18 12:40 UTC (permalink / raw)
  To: Karl Beldan; +Cc: Johannes Berg, linux-wireless, Karl Beldan

On 2013-04-18 2:24 PM, Karl Beldan wrote:
> From: Karl Beldan <karl.beldan@rivierawaves.com>
> 
> minstrel_ht initializes max_tp_rate max_tp_rate2 and max_prob_rate to
> zero both for minstrel_ht_sta and minstrel_mcs_group_data.
> This is wrong since there is no guarantee that the 1st rate of any
> group is supported.
> 
> Signed-off-by: Karl Beldan <karl.beldan@rivierawaves.com>
For both patches,
Acked-by: Felix Fietkau <nbd@openwrt.org>

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2013-04-18 12:40 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-04-18 12:24 [PATCH 1/2] mac80211: minstrel_ht: pick only supported rates for sta and group max*rates Karl Beldan
2013-04-18 12:24 ` [PATCH 2/2] mac80211: minstrel_ht: initialize rates selection Karl Beldan
2013-04-18 12:29   ` Karl Beldan
2013-04-18 12:40 ` [PATCH 1/2] mac80211: minstrel_ht: pick only supported rates for sta and group max*rates Felix Fietkau
  -- strict thread matches above, loose matches on Subject: below --
2013-04-18 11:51 Karl Beldan
2013-04-18 12:17 ` Johannes Berg
2013-04-18 12:16   ` Karl Beldan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).