|
@@ -1279,14 +1279,19 @@ int ieee80211_reconfig(struct ieee80211_local *local)
|
|
|
/* add STAs back */
|
|
|
mutex_lock(&local->sta_mtx);
|
|
|
list_for_each_entry(sta, &local->sta_list, list) {
|
|
|
- if (sta->uploaded) {
|
|
|
- enum ieee80211_sta_state state;
|
|
|
+ enum ieee80211_sta_state state;
|
|
|
|
|
|
- for (state = IEEE80211_STA_NOTEXIST;
|
|
|
- state < sta->sta_state; state++)
|
|
|
- WARN_ON(drv_sta_state(local, sta->sdata, sta,
|
|
|
- state, state + 1));
|
|
|
- }
|
|
|
+ if (!sta->uploaded)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ /* AP-mode stations will be added later */
|
|
|
+ if (sta->sdata->vif.type == NL80211_IFTYPE_AP)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ for (state = IEEE80211_STA_NOTEXIST;
|
|
|
+ state < sta->sta_state; state++)
|
|
|
+ WARN_ON(drv_sta_state(local, sta->sdata, sta, state,
|
|
|
+ state + 1));
|
|
|
}
|
|
|
mutex_unlock(&local->sta_mtx);
|
|
|
|
|
@@ -1383,6 +1388,24 @@ int ieee80211_reconfig(struct ieee80211_local *local)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /* APs are now beaconing, add back stations */
|
|
|
+ mutex_lock(&local->sta_mtx);
|
|
|
+ list_for_each_entry(sta, &local->sta_list, list) {
|
|
|
+ enum ieee80211_sta_state state;
|
|
|
+
|
|
|
+ if (!sta->uploaded)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ if (sta->sdata->vif.type != NL80211_IFTYPE_AP)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ for (state = IEEE80211_STA_NOTEXIST;
|
|
|
+ state < sta->sta_state; state++)
|
|
|
+ WARN_ON(drv_sta_state(local, sta->sdata, sta, state,
|
|
|
+ state + 1));
|
|
|
+ }
|
|
|
+ mutex_unlock(&local->sta_mtx);
|
|
|
+
|
|
|
/* add back keys */
|
|
|
list_for_each_entry(sdata, &local->interfaces, list)
|
|
|
if (ieee80211_sdata_running(sdata))
|