|
@@ -977,6 +977,14 @@ static int sta_apply_auth_flags(struct ieee80211_local *local,
|
|
|
if (mask & BIT(NL80211_STA_FLAG_ASSOCIATED) &&
|
|
|
set & BIT(NL80211_STA_FLAG_ASSOCIATED) &&
|
|
|
!test_sta_flag(sta, WLAN_STA_ASSOC)) {
|
|
|
+ /*
|
|
|
+ * When peer becomes associated, init rate control as
|
|
|
+ * well. Some drivers require rate control initialized
|
|
|
+ * before drv_sta_state() is called.
|
|
|
+ */
|
|
|
+ if (test_sta_flag(sta, WLAN_STA_TDLS_PEER))
|
|
|
+ rate_control_rate_init(sta);
|
|
|
+
|
|
|
ret = sta_info_move_state(sta, IEEE80211_STA_ASSOC);
|
|
|
if (ret)
|
|
|
return ret;
|
|
@@ -1378,11 +1386,6 @@ static int ieee80211_change_station(struct wiphy *wiphy,
|
|
|
if (err)
|
|
|
goto out_err;
|
|
|
|
|
|
- /* When peer becomes authorized, init rate control as well */
|
|
|
- if (test_sta_flag(sta, WLAN_STA_TDLS_PEER) &&
|
|
|
- test_sta_flag(sta, WLAN_STA_AUTHORIZED))
|
|
|
- rate_control_rate_init(sta);
|
|
|
-
|
|
|
mutex_unlock(&local->sta_mtx);
|
|
|
|
|
|
if ((sdata->vif.type == NL80211_IFTYPE_AP ||
|