aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/mlme.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2011-09-29 10:04:36 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-09-30 15:57:19 -0400
commitc2c98fdeb5c897499644eb247285c8e3dacc6450 (patch)
treeaaa9c0f8dd16ab896308470e21a0813041094670 /net/mac80211/mlme.c
parentdeeaee197b0fa694ba6c8f02cdb57b3be7115b4f (diff)
mac80211: optimise station flags
The flaglock in struct sta_info has long been something that I wanted to get rid of, this finally does the conversion to atomic bitops. The conversion itself is straight-forward in most places, a few things needed to change a bit since we can no longer use multiple bits at the same time. On x86-64, this is a fairly significant code size reduction: text data bss dec hex 427861 23648 1008 452517 6e7a5 before 425383 23648 976 450007 6ddd7 after Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/mlme.c')
-rw-r--r--net/mac80211/mlme.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index b98c43a7f191..c4e8901c96f6 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -627,7 +627,7 @@ static bool ieee80211_powersave_allowed(struct ieee80211_sub_if_data *sdata)
627{ 627{
628 struct ieee80211_if_managed *mgd = &sdata->u.mgd; 628 struct ieee80211_if_managed *mgd = &sdata->u.mgd;
629 struct sta_info *sta = NULL; 629 struct sta_info *sta = NULL;
630 u32 sta_flags = 0; 630 bool authorized = false;
631 631
632 if (!mgd->powersave) 632 if (!mgd->powersave)
633 return false; 633 return false;
@@ -645,13 +645,10 @@ static bool ieee80211_powersave_allowed(struct ieee80211_sub_if_data *sdata)
645 rcu_read_lock(); 645 rcu_read_lock();
646 sta = sta_info_get(sdata, mgd->bssid); 646 sta = sta_info_get(sdata, mgd->bssid);
647 if (sta) 647 if (sta)
648 sta_flags = get_sta_flags(sta); 648 authorized = test_sta_flag(sta, WLAN_STA_AUTHORIZED);
649 rcu_read_unlock(); 649 rcu_read_unlock();
650 650
651 if (!(sta_flags & WLAN_STA_AUTHORIZED)) 651 return authorized;
652 return false;
653
654 return true;
655} 652}
656 653
657/* need to hold RTNL or interface lock */ 654/* need to hold RTNL or interface lock */
@@ -1095,7 +1092,7 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
1095 mutex_lock(&local->sta_mtx); 1092 mutex_lock(&local->sta_mtx);
1096 sta = sta_info_get(sdata, bssid); 1093 sta = sta_info_get(sdata, bssid);
1097 if (sta) { 1094 if (sta) {
1098 set_sta_flags(sta, WLAN_STA_BLOCK_BA); 1095 set_sta_flag(sta, WLAN_STA_BLOCK_BA);
1099 ieee80211_sta_tear_down_BA_sessions(sta, tx); 1096 ieee80211_sta_tear_down_BA_sessions(sta, tx);
1100 } 1097 }
1101 mutex_unlock(&local->sta_mtx); 1098 mutex_unlock(&local->sta_mtx);
@@ -1513,10 +1510,11 @@ static bool ieee80211_assoc_success(struct ieee80211_work *wk,
1513 return false; 1510 return false;
1514 } 1511 }
1515 1512
1516 set_sta_flags(sta, WLAN_STA_AUTH | WLAN_STA_ASSOC | 1513 set_sta_flag(sta, WLAN_STA_AUTH);
1517 WLAN_STA_ASSOC_AP); 1514 set_sta_flag(sta, WLAN_STA_ASSOC);
1515 set_sta_flag(sta, WLAN_STA_ASSOC_AP);
1518 if (!(ifmgd->flags & IEEE80211_STA_CONTROL_PORT)) 1516 if (!(ifmgd->flags & IEEE80211_STA_CONTROL_PORT))
1519 set_sta_flags(sta, WLAN_STA_AUTHORIZED); 1517 set_sta_flag(sta, WLAN_STA_AUTHORIZED);
1520 1518
1521 rates = 0; 1519 rates = 0;
1522 basic_rates = 0; 1520 basic_rates = 0;
@@ -1575,10 +1573,10 @@ static bool ieee80211_assoc_success(struct ieee80211_work *wk,
1575 rate_control_rate_init(sta); 1573 rate_control_rate_init(sta);
1576 1574
1577 if (ifmgd->flags & IEEE80211_STA_MFP_ENABLED) 1575 if (ifmgd->flags & IEEE80211_STA_MFP_ENABLED)
1578 set_sta_flags(sta, WLAN_STA_MFP); 1576 set_sta_flag(sta, WLAN_STA_MFP);
1579 1577
1580 if (elems.wmm_param) 1578 if (elems.wmm_param)
1581 set_sta_flags(sta, WLAN_STA_WME); 1579 set_sta_flag(sta, WLAN_STA_WME);
1582 1580
1583 /* sta_info_reinsert will also unlock the mutex lock */ 1581 /* sta_info_reinsert will also unlock the mutex lock */
1584 err = sta_info_reinsert(sta); 1582 err = sta_info_reinsert(sta);