Merge branch 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[cascardo/linux.git] / net / mac80211 / sta_info.c
index 7fd7ac4..f5b1638 100644 (file)
@@ -102,7 +102,7 @@ struct sta_info *sta_info_get(struct ieee80211_sub_if_data *sdata,
                                    lockdep_is_held(&local->sta_mtx));
        while (sta) {
                if (sta->sdata == sdata &&
-                   compare_ether_addr(sta->sta.addr, addr) == 0)
+                   ether_addr_equal(sta->sta.addr, addr))
                        break;
                sta = rcu_dereference_check(sta->hnext,
                                            lockdep_is_held(&local->sta_mtx));
@@ -125,7 +125,7 @@ struct sta_info *sta_info_get_bss(struct ieee80211_sub_if_data *sdata,
        while (sta) {
                if ((sta->sdata == sdata ||
                     (sta->sdata->bss && sta->sdata->bss == sdata->bss)) &&
-                   compare_ether_addr(sta->sta.addr, addr) == 0)
+                   ether_addr_equal(sta->sta.addr, addr))
                        break;
                sta = rcu_dereference_check(sta->hnext,
                                            lockdep_is_held(&local->sta_mtx));
@@ -302,7 +302,7 @@ static int sta_info_insert_check(struct sta_info *sta)
        if (unlikely(!ieee80211_sdata_running(sdata)))
                return -ENETDOWN;
 
-       if (WARN_ON(compare_ether_addr(sta->sta.addr, sdata->vif.addr) == 0 ||
+       if (WARN_ON(ether_addr_equal(sta->sta.addr, sdata->vif.addr) ||
                    is_multicast_ether_addr(sta->sta.addr)))
                return -EINVAL;
 
@@ -912,7 +912,7 @@ struct ieee80211_sta *ieee80211_find_sta_by_ifaddr(struct ieee80211_hw *hw,
         */
        for_each_sta_info(hw_to_local(hw), addr, sta, nxt) {
                if (localaddr &&
-                   compare_ether_addr(sta->sdata->vif.addr, localaddr) != 0)
+                   !ether_addr_equal(sta->sdata->vif.addr, localaddr))
                        continue;
                if (!sta->uploaded)
                        return NULL;
@@ -1417,15 +1417,19 @@ int sta_info_move_state(struct sta_info *sta,
                if (sta->sta_state == IEEE80211_STA_AUTH) {
                        set_bit(WLAN_STA_ASSOC, &sta->_flags);
                } else if (sta->sta_state == IEEE80211_STA_AUTHORIZED) {
-                       if (sta->sdata->vif.type == NL80211_IFTYPE_AP)
-                               atomic_dec(&sta->sdata->u.ap.num_sta_authorized);
+                       if (sta->sdata->vif.type == NL80211_IFTYPE_AP ||
+                           (sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
+                            !sta->sdata->u.vlan.sta))
+                               atomic_dec(&sta->sdata->bss->num_mcast_sta);
                        clear_bit(WLAN_STA_AUTHORIZED, &sta->_flags);
                }
                break;
        case IEEE80211_STA_AUTHORIZED:
                if (sta->sta_state == IEEE80211_STA_ASSOC) {
-                       if (sta->sdata->vif.type == NL80211_IFTYPE_AP)
-                               atomic_inc(&sta->sdata->u.ap.num_sta_authorized);
+                       if (sta->sdata->vif.type == NL80211_IFTYPE_AP ||
+                           (sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
+                            !sta->sdata->u.vlan.sta))
+                               atomic_inc(&sta->sdata->bss->num_mcast_sta);
                        set_bit(WLAN_STA_AUTHORIZED, &sta->_flags);
                }
                break;