Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 351720
b: refs/heads/master
c: b998e8b
h: refs/heads/master
v: v3
  • Loading branch information
Johannes Berg committed Jan 3, 2013
1 parent 66c9efc commit 3030df4
Show file tree
Hide file tree
Showing 8 changed files with 17 additions and 31 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 0f6dfcee2e081f47a3e97cb8984fb4d62217e6f7
refs/heads/master: b998e8bb3e1c6eeae5eab9d6a434563270286c3b
7 changes: 3 additions & 4 deletions trunk/net/mac80211/cfg.c
Original file line number Diff line number Diff line change
Expand Up @@ -1010,8 +1010,8 @@ static int ieee80211_stop_ap(struct wiphy *wiphy, struct net_device *dev)
kfree_rcu(old_probe_resp, rcu_head);

list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list)
sta_info_flush(local, vlan);
sta_info_flush(local, sdata);
sta_info_flush(vlan);
sta_info_flush(sdata);
ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED);

drv_stop_ap(sdata->local, sdata);
Expand Down Expand Up @@ -1301,15 +1301,14 @@ static int ieee80211_add_station(struct wiphy *wiphy, struct net_device *dev,
static int ieee80211_del_station(struct wiphy *wiphy, struct net_device *dev,
u8 *mac)
{
struct ieee80211_local *local = wiphy_priv(wiphy);
struct ieee80211_sub_if_data *sdata;

sdata = IEEE80211_DEV_TO_SUB_IF(dev);

if (mac)
return sta_info_destroy_addr_bss(sdata, mac);

sta_info_flush(local, sdata);
sta_info_flush(sdata);
return 0;
}

Expand Down
4 changes: 2 additions & 2 deletions trunk/net/mac80211/ibss.c
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ static void __ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
skb_reserve(skb, sdata->local->hw.extra_tx_headroom);

if (!ether_addr_equal(ifibss->bssid, bssid))
sta_info_flush(sdata->local, sdata);
sta_info_flush(sdata);

/* if merging, indicate to driver that we leave the old IBSS */
if (sdata->vif.bss_conf.ibss_joined) {
Expand Down Expand Up @@ -1182,7 +1182,7 @@ int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata)
memset(ifibss->bssid, 0, ETH_ALEN);
ifibss->ssid_len = 0;

sta_info_flush(sdata->local, sdata);
sta_info_flush(sdata);

spin_lock_bh(&ifibss->incomplete_lock);
while (!list_empty(&ifibss->incomplete_stations)) {
Expand Down
5 changes: 2 additions & 3 deletions trunk/net/mac80211/iface.c
Original file line number Diff line number Diff line change
Expand Up @@ -776,7 +776,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
* all other modes we've already removed all stations when
* disconnecting etc.
*/
sta_info_flush(local, sdata);
sta_info_flush(sdata);

/*
* Don't count this interface for promisc/allmulti while it
Expand Down Expand Up @@ -961,7 +961,6 @@ static void ieee80211_set_multicast_list(struct net_device *dev)
*/
static void ieee80211_teardown_sdata(struct ieee80211_sub_if_data *sdata)
{
struct ieee80211_local *local = sdata->local;
int flushed;
int i;

Expand All @@ -977,7 +976,7 @@ static void ieee80211_teardown_sdata(struct ieee80211_sub_if_data *sdata)
if (ieee80211_vif_is_mesh(&sdata->vif))
mesh_rmc_free(sdata);

flushed = sta_info_flush(local, sdata);
flushed = sta_info_flush(sdata);
WARN_ON(flushed);
}

Expand Down
2 changes: 1 addition & 1 deletion trunk/net/mac80211/mesh.c
Original file line number Diff line number Diff line change
Expand Up @@ -656,7 +656,7 @@ void ieee80211_stop_mesh(struct ieee80211_sub_if_data *sdata)
ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED);

/* flush STAs and mpaths on this iface */
sta_info_flush(sdata->local, sdata);
sta_info_flush(sdata);
mesh_path_flush_by_iface(sdata);

del_timer_sync(&sdata->u.mesh.housekeeping_timer);
Expand Down
2 changes: 1 addition & 1 deletion trunk/net/mac80211/mlme.c
Original file line number Diff line number Diff line change
Expand Up @@ -1521,7 +1521,7 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
memset(ifmgd->bssid, 0, ETH_ALEN);

/* remove AP and TDLS peers */
sta_info_flush(local, sdata);
sta_info_flush(sdata);

/* finally reset all BSS / config parameters */
changed |= ieee80211_reset_erp_info(sdata);
Expand Down
23 changes: 6 additions & 17 deletions trunk/net/mac80211/sta_info.c
Original file line number Diff line number Diff line change
Expand Up @@ -885,28 +885,26 @@ void sta_info_init(struct ieee80211_local *local)
void sta_info_stop(struct ieee80211_local *local)
{
del_timer_sync(&local->sta_cleanup);
sta_info_flush(local, NULL);
}

/**
* sta_info_flush - flush matching STA entries from the STA table
*
* Returns the number of removed STA entries.
*
* @local: local interface data
* @sdata: matching rule for the net device (sta->dev) or %NULL to match all STAs
* @sdata: sdata to remove all stations from
*/
int sta_info_flush(struct ieee80211_local *local,
struct ieee80211_sub_if_data *sdata)
int sta_info_flush(struct ieee80211_sub_if_data *sdata)
{
struct ieee80211_local *local = sdata->local;
struct sta_info *sta, *tmp;
int ret = 0;

might_sleep();

mutex_lock(&local->sta_mtx);
list_for_each_entry_safe(sta, tmp, &local->sta_list, list) {
if (!sdata || sdata == sta->sdata) {
if (sdata == sta->sdata) {
WARN_ON(__sta_info_destroy(sta));
ret++;
}
Expand All @@ -915,17 +913,8 @@ int sta_info_flush(struct ieee80211_local *local,

rcu_barrier();

if (sdata) {
ieee80211_cleanup_sdata_stas(sdata);
cancel_work_sync(&sdata->cleanup_stations_wk);
} else {
mutex_lock(&local->iflist_mtx);
list_for_each_entry(sdata, &local->interfaces, list) {
ieee80211_cleanup_sdata_stas(sdata);
cancel_work_sync(&sdata->cleanup_stations_wk);
}
mutex_unlock(&local->iflist_mtx);
}
ieee80211_cleanup_sdata_stas(sdata);
cancel_work_sync(&sdata->cleanup_stations_wk);

return ret;
}
Expand Down
3 changes: 1 addition & 2 deletions trunk/net/mac80211/sta_info.h
Original file line number Diff line number Diff line change
Expand Up @@ -548,8 +548,7 @@ void sta_info_recalc_tim(struct sta_info *sta);

void sta_info_init(struct ieee80211_local *local);
void sta_info_stop(struct ieee80211_local *local);
int sta_info_flush(struct ieee80211_local *local,
struct ieee80211_sub_if_data *sdata);
int sta_info_flush(struct ieee80211_sub_if_data *sdata);
void sta_set_rate_info_tx(struct sta_info *sta,
const struct ieee80211_tx_rate *rate,
struct rate_info *rinfo);
Expand Down

0 comments on commit 3030df4

Please sign in to comment.