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>
This commit is contained in:
committed by
John W. Linville
parent
deeaee197b
commit
c2c98fdeb5
@@ -627,7 +627,7 @@ static bool ieee80211_powersave_allowed(struct ieee80211_sub_if_data *sdata)
|
||||
{
|
||||
struct ieee80211_if_managed *mgd = &sdata->u.mgd;
|
||||
struct sta_info *sta = NULL;
|
||||
u32 sta_flags = 0;
|
||||
bool authorized = false;
|
||||
|
||||
if (!mgd->powersave)
|
||||
return false;
|
||||
@@ -645,13 +645,10 @@ static bool ieee80211_powersave_allowed(struct ieee80211_sub_if_data *sdata)
|
||||
rcu_read_lock();
|
||||
sta = sta_info_get(sdata, mgd->bssid);
|
||||
if (sta)
|
||||
sta_flags = get_sta_flags(sta);
|
||||
authorized = test_sta_flag(sta, WLAN_STA_AUTHORIZED);
|
||||
rcu_read_unlock();
|
||||
|
||||
if (!(sta_flags & WLAN_STA_AUTHORIZED))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
return authorized;
|
||||
}
|
||||
|
||||
/* need to hold RTNL or interface lock */
|
||||
@@ -1095,7 +1092,7 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
|
||||
mutex_lock(&local->sta_mtx);
|
||||
sta = sta_info_get(sdata, bssid);
|
||||
if (sta) {
|
||||
set_sta_flags(sta, WLAN_STA_BLOCK_BA);
|
||||
set_sta_flag(sta, WLAN_STA_BLOCK_BA);
|
||||
ieee80211_sta_tear_down_BA_sessions(sta, tx);
|
||||
}
|
||||
mutex_unlock(&local->sta_mtx);
|
||||
@@ -1513,10 +1510,11 @@ static bool ieee80211_assoc_success(struct ieee80211_work *wk,
|
||||
return false;
|
||||
}
|
||||
|
||||
set_sta_flags(sta, WLAN_STA_AUTH | WLAN_STA_ASSOC |
|
||||
WLAN_STA_ASSOC_AP);
|
||||
set_sta_flag(sta, WLAN_STA_AUTH);
|
||||
set_sta_flag(sta, WLAN_STA_ASSOC);
|
||||
set_sta_flag(sta, WLAN_STA_ASSOC_AP);
|
||||
if (!(ifmgd->flags & IEEE80211_STA_CONTROL_PORT))
|
||||
set_sta_flags(sta, WLAN_STA_AUTHORIZED);
|
||||
set_sta_flag(sta, WLAN_STA_AUTHORIZED);
|
||||
|
||||
rates = 0;
|
||||
basic_rates = 0;
|
||||
@@ -1575,10 +1573,10 @@ static bool ieee80211_assoc_success(struct ieee80211_work *wk,
|
||||
rate_control_rate_init(sta);
|
||||
|
||||
if (ifmgd->flags & IEEE80211_STA_MFP_ENABLED)
|
||||
set_sta_flags(sta, WLAN_STA_MFP);
|
||||
set_sta_flag(sta, WLAN_STA_MFP);
|
||||
|
||||
if (elems.wmm_param)
|
||||
set_sta_flags(sta, WLAN_STA_WME);
|
||||
set_sta_flag(sta, WLAN_STA_WME);
|
||||
|
||||
/* sta_info_reinsert will also unlock the mutex lock */
|
||||
err = sta_info_reinsert(sta);
|
||||
|
Reference in New Issue
Block a user