|
@@ -2273,7 +2273,6 @@ int __ieee80211_request_smps_ap(struct ieee80211_sub_if_data *sdata,
|
|
|
{
|
|
|
struct sta_info *sta;
|
|
|
enum ieee80211_smps_mode old_req;
|
|
|
- int i;
|
|
|
|
|
|
if (WARN_ON_ONCE(sdata->vif.type != NL80211_IFTYPE_AP))
|
|
|
return -EINVAL;
|
|
@@ -2301,48 +2300,40 @@ int __ieee80211_request_smps_ap(struct ieee80211_sub_if_data *sdata,
|
|
|
smps_mode, atomic_read(&sdata->u.ap.num_mcast_sta));
|
|
|
|
|
|
mutex_lock(&sdata->local->sta_mtx);
|
|
|
- for (i = 0; i < STA_HASH_SIZE; i++) {
|
|
|
- for (sta = rcu_dereference_protected(sdata->local->sta_hash[i],
|
|
|
- lockdep_is_held(&sdata->local->sta_mtx));
|
|
|
- sta;
|
|
|
- sta = rcu_dereference_protected(sta->hnext,
|
|
|
- lockdep_is_held(&sdata->local->sta_mtx))) {
|
|
|
- /*
|
|
|
- * Only stations associated to our AP and
|
|
|
- * associated VLANs
|
|
|
- */
|
|
|
- if (sta->sdata->bss != &sdata->u.ap)
|
|
|
- continue;
|
|
|
+ list_for_each_entry(sta, &sdata->local->sta_list, list) {
|
|
|
+ /*
|
|
|
+ * Only stations associated to our AP and
|
|
|
+ * associated VLANs
|
|
|
+ */
|
|
|
+ if (sta->sdata->bss != &sdata->u.ap)
|
|
|
+ continue;
|
|
|
|
|
|
- /* This station doesn't support MIMO - skip it */
|
|
|
- if (sta_info_tx_streams(sta) == 1)
|
|
|
- continue;
|
|
|
+ /* This station doesn't support MIMO - skip it */
|
|
|
+ if (sta_info_tx_streams(sta) == 1)
|
|
|
+ continue;
|
|
|
|
|
|
- /*
|
|
|
- * Don't wake up a STA just to send the action frame
|
|
|
- * unless we are getting more restrictive.
|
|
|
- */
|
|
|
- if (test_sta_flag(sta, WLAN_STA_PS_STA) &&
|
|
|
- !ieee80211_smps_is_restrictive(sta->known_smps_mode,
|
|
|
- smps_mode)) {
|
|
|
- ht_dbg(sdata,
|
|
|
- "Won't send SMPS to sleeping STA %pM\n",
|
|
|
- sta->sta.addr);
|
|
|
- continue;
|
|
|
- }
|
|
|
+ /*
|
|
|
+ * Don't wake up a STA just to send the action frame
|
|
|
+ * unless we are getting more restrictive.
|
|
|
+ */
|
|
|
+ if (test_sta_flag(sta, WLAN_STA_PS_STA) &&
|
|
|
+ !ieee80211_smps_is_restrictive(sta->known_smps_mode,
|
|
|
+ smps_mode)) {
|
|
|
+ ht_dbg(sdata, "Won't send SMPS to sleeping STA %pM\n",
|
|
|
+ sta->sta.addr);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
- /*
|
|
|
- * If the STA is not authorized, wait until it gets
|
|
|
- * authorized and the action frame will be sent then.
|
|
|
- */
|
|
|
- if (!test_sta_flag(sta, WLAN_STA_AUTHORIZED))
|
|
|
- continue;
|
|
|
+ /*
|
|
|
+ * If the STA is not authorized, wait until it gets
|
|
|
+ * authorized and the action frame will be sent then.
|
|
|
+ */
|
|
|
+ if (!test_sta_flag(sta, WLAN_STA_AUTHORIZED))
|
|
|
+ continue;
|
|
|
|
|
|
- ht_dbg(sdata, "Sending SMPS to %pM\n", sta->sta.addr);
|
|
|
- ieee80211_send_smps_action(sdata, smps_mode,
|
|
|
- sta->sta.addr,
|
|
|
- sdata->vif.bss_conf.bssid);
|
|
|
- }
|
|
|
+ ht_dbg(sdata, "Sending SMPS to %pM\n", sta->sta.addr);
|
|
|
+ ieee80211_send_smps_action(sdata, smps_mode, sta->sta.addr,
|
|
|
+ sdata->vif.bss_conf.bssid);
|
|
|
}
|
|
|
mutex_unlock(&sdata->local->sta_mtx);
|
|
|
|