aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2012-01-20 07:55:23 -0500
committerJohn W. Linville <linville@tuxdriver.com>2012-02-06 15:35:11 -0500
commite1936e9407138b483e6d1332dd944afec8131f30 (patch)
tree65ec2b02b60e572f0067771da951bcf53b52aa9c /net/mac80211
parent1023f3bc7b3f56da1f79f605cbe459318c4792ae (diff)
mac80211: call rate control only after init
There are situations where we don't have the necessary rate control information yet for station entries, e.g. when associating. This currently doesn't really happen due to the dummy station handling; explicitly disabling rate control when it's not initialised will allow us to remove dummy stations. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211')
-rw-r--r--net/mac80211/debugfs_sta.c4
-rw-r--r--net/mac80211/rate.c2
-rw-r--r--net/mac80211/rate.h1
-rw-r--r--net/mac80211/sta_info.h2
4 files changed, 6 insertions, 3 deletions
diff --git a/net/mac80211/debugfs_sta.c b/net/mac80211/debugfs_sta.c
index c8383712fdec..6d45804d09bc 100644
--- a/net/mac80211/debugfs_sta.c
+++ b/net/mac80211/debugfs_sta.c
@@ -63,7 +63,7 @@ static ssize_t sta_flags_read(struct file *file, char __user *userbuf,
63 test_sta_flag(sta, WLAN_STA_##flg) ? #flg "\n" : "" 63 test_sta_flag(sta, WLAN_STA_##flg) ? #flg "\n" : ""
64 64
65 int res = scnprintf(buf, sizeof(buf), 65 int res = scnprintf(buf, sizeof(buf),
66 "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", 66 "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
67 TEST(AUTH), TEST(ASSOC), TEST(PS_STA), 67 TEST(AUTH), TEST(ASSOC), TEST(PS_STA),
68 TEST(PS_DRIVER), TEST(AUTHORIZED), 68 TEST(PS_DRIVER), TEST(AUTHORIZED),
69 TEST(SHORT_PREAMBLE), 69 TEST(SHORT_PREAMBLE),
@@ -71,7 +71,7 @@ static ssize_t sta_flags_read(struct file *file, char __user *userbuf,
71 TEST(MFP), TEST(BLOCK_BA), TEST(PSPOLL), 71 TEST(MFP), TEST(BLOCK_BA), TEST(PSPOLL),
72 TEST(UAPSD), TEST(SP), TEST(TDLS_PEER), 72 TEST(UAPSD), TEST(SP), TEST(TDLS_PEER),
73 TEST(TDLS_PEER_AUTH), TEST(4ADDR_EVENT), 73 TEST(TDLS_PEER_AUTH), TEST(4ADDR_EVENT),
74 TEST(INSERTED)); 74 TEST(INSERTED), TEST(RATE_CONTROL));
75#undef TEST 75#undef TEST
76 return simple_read_from_buffer(userbuf, count, ppos, buf, res); 76 return simple_read_from_buffer(userbuf, count, ppos, buf, res);
77} 77}
diff --git a/net/mac80211/rate.c b/net/mac80211/rate.c
index 22fc28e9026e..111fba38be82 100644
--- a/net/mac80211/rate.c
+++ b/net/mac80211/rate.c
@@ -439,7 +439,7 @@ void rate_control_get_rate(struct ieee80211_sub_if_data *sdata,
439 u32 mask; 439 u32 mask;
440 u8 mcs_mask[IEEE80211_HT_MCS_MASK_LEN]; 440 u8 mcs_mask[IEEE80211_HT_MCS_MASK_LEN];
441 441
442 if (sta) { 442 if (sta && test_sta_flag(sta, WLAN_STA_RATE_CONTROL)) {
443 ista = &sta->sta; 443 ista = &sta->sta;
444 priv_sta = sta->rate_ctrl_priv; 444 priv_sta = sta->rate_ctrl_priv;
445 } 445 }
diff --git a/net/mac80211/rate.h b/net/mac80211/rate.h
index 8268457bd143..5fc3135a6b45 100644
--- a/net/mac80211/rate.h
+++ b/net/mac80211/rate.h
@@ -58,6 +58,7 @@ static inline void rate_control_rate_init(struct sta_info *sta)
58 sband = local->hw.wiphy->bands[local->hw.conf.channel->band]; 58 sband = local->hw.wiphy->bands[local->hw.conf.channel->band];
59 59
60 ref->ops->rate_init(ref->priv, sband, ista, priv_sta); 60 ref->ops->rate_init(ref->priv, sband, ista, priv_sta);
61 set_sta_flag(sta, WLAN_STA_RATE_CONTROL);
61} 62}
62 63
63static inline void rate_control_rate_update(struct ieee80211_local *local, 64static inline void rate_control_rate_update(struct ieee80211_local *local,
diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
index 03f249bc2766..23a97c9dc042 100644
--- a/net/mac80211/sta_info.h
+++ b/net/mac80211/sta_info.h
@@ -53,6 +53,7 @@
53 * reply to other uAPSD trigger frames or PS-Poll. 53 * reply to other uAPSD trigger frames or PS-Poll.
54 * @WLAN_STA_4ADDR_EVENT: 4-addr event was already sent for this frame. 54 * @WLAN_STA_4ADDR_EVENT: 4-addr event was already sent for this frame.
55 * @WLAN_STA_INSERTED: This station is inserted into the hash table. 55 * @WLAN_STA_INSERTED: This station is inserted into the hash table.
56 * @WLAN_STA_RATE_CONTROL: rate control was initialized for this station.
56 */ 57 */
57enum ieee80211_sta_info_flags { 58enum ieee80211_sta_info_flags {
58 WLAN_STA_AUTH, 59 WLAN_STA_AUTH,
@@ -73,6 +74,7 @@ enum ieee80211_sta_info_flags {
73 WLAN_STA_SP, 74 WLAN_STA_SP,
74 WLAN_STA_4ADDR_EVENT, 75 WLAN_STA_4ADDR_EVENT,
75 WLAN_STA_INSERTED, 76 WLAN_STA_INSERTED,
77 WLAN_STA_RATE_CONTROL,
76}; 78};
77 79
78#define STA_TID_NUM 16 80#define STA_TID_NUM 16