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>
This commit is contained in:
parent
24d2b8c0ac
commit
4b5a433ae5
|
@ -63,14 +63,14 @@ static ssize_t sta_flags_read(struct file *file, char __user *userbuf,
|
|||
test_sta_flag(sta, WLAN_STA_##flg) ? #flg "\n" : ""
|
||||
|
||||
int res = scnprintf(buf, sizeof(buf),
|
||||
"%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
|
||||
"%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
|
||||
TEST(AUTH), TEST(ASSOC), TEST(PS_STA),
|
||||
TEST(PS_DRIVER), TEST(AUTHORIZED),
|
||||
TEST(SHORT_PREAMBLE),
|
||||
TEST(WME), TEST(WDS), TEST(CLEAR_PS_FILT),
|
||||
TEST(MFP), TEST(BLOCK_BA), TEST(PSPOLL),
|
||||
TEST(UAPSD), TEST(SP), TEST(TDLS_PEER),
|
||||
TEST(TDLS_PEER_AUTH));
|
||||
TEST(TDLS_PEER_AUTH), TEST(RATE_CONTROL));
|
||||
#undef TEST
|
||||
return simple_read_from_buffer(userbuf, count, ppos, buf, res);
|
||||
}
|
||||
|
|
|
@ -336,7 +336,7 @@ void rate_control_get_rate(struct ieee80211_sub_if_data *sdata,
|
|||
int i;
|
||||
u32 mask;
|
||||
|
||||
if (sta) {
|
||||
if (sta && test_sta_flag(sta, WLAN_STA_RATE_CONTROL)) {
|
||||
ista = &sta->sta;
|
||||
priv_sta = sta->rate_ctrl_priv;
|
||||
}
|
||||
|
|
|
@ -62,6 +62,7 @@ static inline void rate_control_rate_init(struct sta_info *sta)
|
|||
sband = local->hw.wiphy->bands[local->hw.conf.channel->band];
|
||||
|
||||
ref->ops->rate_init(ref->priv, sband, ista, priv_sta);
|
||||
set_sta_flag(sta, WLAN_STA_RATE_CONTROL);
|
||||
}
|
||||
|
||||
static inline void rate_control_rate_update(struct ieee80211_local *local,
|
||||
|
|
|
@ -52,6 +52,7 @@
|
|||
* @WLAN_STA_SP: Station is in a service period, so don't try to
|
||||
* reply to other uAPSD trigger frames or PS-Poll.
|
||||
* @WLAN_STA_4ADDR_EVENT: 4-addr event was already sent for this frame.
|
||||
* @WLAN_STA_RATE_CONTROL: rate control was initialized for this station.
|
||||
*/
|
||||
enum ieee80211_sta_info_flags {
|
||||
WLAN_STA_AUTH,
|
||||
|
@ -71,6 +72,7 @@ enum ieee80211_sta_info_flags {
|
|||
WLAN_STA_UAPSD,
|
||||
WLAN_STA_SP,
|
||||
WLAN_STA_4ADDR_EVENT,
|
||||
WLAN_STA_RATE_CONTROL,
|
||||
};
|
||||
|
||||
enum ieee80211_sta_state {
|
||||
|
|
Loading…
Reference in New Issue