summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorSujith <Sujith.Manoharan@atheros.com>2010-03-01 14:42:57 +0530
committerGreg Kroah-Hartman <gregkh@suse.de>2010-04-01 16:01:09 -0700
commit5421e40def70b76fb0a677f963a8390b6c3cc69a (patch)
treeaee345097385fb64ffd9a642b34bf50312a84449 /net
parent6c6a223088cf477b941fd57806dd0187ada219a0 (diff)
downloadkernel-crypto-5421e40def70b76fb0a677f963a8390b6c3cc69a.tar.gz
kernel-crypto-5421e40def70b76fb0a677f963a8390b6c3cc69a.tar.xz
kernel-crypto-5421e40def70b76fb0a677f963a8390b6c3cc69a.zip
mac80211: Fix HT rate control configuration
commit 4fa004373133ece3d9b1c0a7e243b0e53760b165 upstream. 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. Signed-off-by: Sujith <Sujith.Manoharan@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'net')
-rw-r--r--net/mac80211/mlme.c3
-rw-r--r--net/mac80211/rate.h5
2 files changed, 5 insertions, 3 deletions
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 05a18f43e1b..9072a412089 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -205,7 +205,8 @@ static u32 ieee80211_enable_ht(struct ieee80211_sub_if_data *sdata,
sta = sta_info_get(local, 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 cb9bd1f65e2..3e02ea4eecd 100644
--- a/net/mac80211/rate.h
+++ b/net/mac80211/rate.h
@@ -69,7 +69,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;
@@ -77,7 +78,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,