2010-03-01 08:53:55

by Sujith

[permalink] [raw]
Subject: [PATCH] mac80211: Fix HT configuration

Handling HT configuration changes involved setting the channel
with the new HT parameters and then issuing a rate_update()
notification to the driver.

This behavior changed after the off-channel changes. Now, the channel
is not updated with the new HT params in enable_ht() - instead, it
is now done when the scan work terminates. This results in the driver
depending on stale information, defaulting to non-HT mode always.

Fix this by passing the new channel type to the driver.

Cc: [email protected]
Signed-off-by: Sujith <[email protected]>
---
include/net/mac80211.h | 3 ++-
net/mac80211/mlme.c | 3 ++-
net/mac80211/rate.h | 5 +++--
3 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 80eb7cc..45d7d44 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -2426,7 +2426,8 @@ struct rate_control_ops {
struct ieee80211_sta *sta, void *priv_sta);
void (*rate_update)(void *priv, struct ieee80211_supported_band *sband,
struct ieee80211_sta *sta,
- void *priv_sta, u32 changed);
+ void *priv_sta, u32 changed,
+ enum nl80211_channel_type oper_chan_type);
void (*free_sta)(void *priv, struct ieee80211_sta *sta,
void *priv_sta);

diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 41812a1..2b621e1 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -177,7 +177,8 @@ static u32 ieee80211_enable_ht(struct ieee80211_sub_if_data *sdata,
sta = sta_info_get(sdata, bssid);
if (sta)
rate_control_rate_update(local, sband, sta,
- IEEE80211_RC_HT_CHANGED);
+ IEEE80211_RC_HT_CHANGED,
+ local->oper_channel_type);
rcu_read_unlock();
}

diff --git a/net/mac80211/rate.h b/net/mac80211/rate.h
index b6108bc..065a961 100644
--- a/net/mac80211/rate.h
+++ b/net/mac80211/rate.h
@@ -66,7 +66,8 @@ static inline void rate_control_rate_init(struct sta_info *sta)

static inline void rate_control_rate_update(struct ieee80211_local *local,
struct ieee80211_supported_band *sband,
- struct sta_info *sta, u32 changed)
+ struct sta_info *sta, u32 changed,
+ enum nl80211_channel_type oper_chan_type)
{
struct rate_control_ref *ref = local->rate_ctrl;
struct ieee80211_sta *ista = &sta->sta;
@@ -74,7 +75,7 @@ static inline void rate_control_rate_update(struct ieee80211_local *local,

if (ref && ref->ops->rate_update)
ref->ops->rate_update(ref->priv, sband, ista,
- priv_sta, changed);
+ priv_sta, changed, oper_chan_type);
}

static inline void *rate_control_alloc_sta(struct rate_control_ref *ref,
--
1.7.0.1



2010-03-03 20:30:42

by John W. Linville

[permalink] [raw]
Subject: Re: [PATCH] mac80211: Fix HT configuration

On Mon, Mar 01, 2010 at 02:42:57PM +0530, Sujith wrote:
> Handling HT configuration changes involved setting the channel
> with the new HT parameters and then issuing a rate_update()
> notification to the driver.
>
> This behavior changed after the off-channel changes. Now, the channel
> is not updated with the new HT params in enable_ht() - instead, it
> is now done when the scan work terminates. This results in the driver
> depending on stale information, defaulting to non-HT mode always.
>
> Fix this by passing the new channel type to the driver.
>
> Cc: [email protected]
> Signed-off-by: Sujith <[email protected]>
> ---
> include/net/mac80211.h | 3 ++-
> net/mac80211/mlme.c | 3 ++-
> net/mac80211/rate.h | 5 +++--
> 3 files changed, 7 insertions(+), 4 deletions(-)

This should be combined with "ath9k: Fix HT rate control configuration"
-- I'll take care of it.

Thanks,

John
--
John W. Linville Someday the world will need a hero, and you
[email protected] might be all we have. Be ready.

2010-03-15 06:54:52

by Sujith

[permalink] [raw]
Subject: Re: [PATCH] mac80211: Fix HT configuration

John W. Linville wrote:
> This should be combined with "ath9k: Fix HT rate control configuration"
> -- I'll take care of it.

Thanks.

Sujith