aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/sta_info.h
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2013-12-04 16:46:11 -0500
committerJohannes Berg <johannes.berg@intel.com>2013-12-16 05:29:45 -0500
commitd34ba2168a3c10e7301cca06069c39865b4c3ec6 (patch)
tree709e9c81eba18202588852e39d66fcf893334451 /net/mac80211/sta_info.h
parenta710c8160dd93e981163759aad754f758850273a (diff)
mac80211: don't delay station destruction
If we can assume that stations are never referenced by the driver after sta_state returns (and this is true since the previous iwlmvm patch and for all other drivers) then we don't need to delay station destruction, and don't need to play tricks with rcu_barrier() etc. This should speed up some scenarios like hostapd shutdown. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/sta_info.h')
-rw-r--r--net/mac80211/sta_info.h27
1 files changed, 1 insertions, 26 deletions
diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
index 0218caf5c14a..9104f812e9de 100644
--- a/net/mac80211/sta_info.h
+++ b/net/mac80211/sta_info.h
@@ -605,21 +605,6 @@ void sta_info_recalc_tim(struct sta_info *sta);
605 605
606void sta_info_init(struct ieee80211_local *local); 606void sta_info_init(struct ieee80211_local *local);
607void sta_info_stop(struct ieee80211_local *local); 607void sta_info_stop(struct ieee80211_local *local);
608int sta_info_flush_defer(struct ieee80211_sub_if_data *sdata);
609
610/**
611 * sta_info_flush_cleanup - flush the sta_info cleanup queue
612 * @sdata: the interface
613 *
614 * Flushes the sta_info cleanup queue for a given interface;
615 * this is necessary before the interface is removed or, for
616 * AP/mesh interfaces, before it is deconfigured.
617 *
618 * Note an rcu_barrier() must precede the function, after all
619 * stations have been flushed/removed to ensure the call_rcu()
620 * calls that add stations to the cleanup queue have completed.
621 */
622void sta_info_flush_cleanup(struct ieee80211_sub_if_data *sdata);
623 608
624/** 609/**
625 * sta_info_flush - flush matching STA entries from the STA table 610 * sta_info_flush - flush matching STA entries from the STA table
@@ -628,15 +613,7 @@ void sta_info_flush_cleanup(struct ieee80211_sub_if_data *sdata);
628 * 613 *
629 * @sdata: sdata to remove all stations from 614 * @sdata: sdata to remove all stations from
630 */ 615 */
631static inline int sta_info_flush(struct ieee80211_sub_if_data *sdata) 616int sta_info_flush(struct ieee80211_sub_if_data *sdata);
632{
633 int ret = sta_info_flush_defer(sdata);
634
635 rcu_barrier();
636 sta_info_flush_cleanup(sdata);
637
638 return ret;
639}
640 617
641void sta_set_rate_info_tx(struct sta_info *sta, 618void sta_set_rate_info_tx(struct sta_info *sta,
642 const struct ieee80211_tx_rate *rate, 619 const struct ieee80211_tx_rate *rate,
@@ -651,6 +628,4 @@ void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta);
651void ieee80211_sta_ps_deliver_poll_response(struct sta_info *sta); 628void ieee80211_sta_ps_deliver_poll_response(struct sta_info *sta);
652void ieee80211_sta_ps_deliver_uapsd(struct sta_info *sta); 629void ieee80211_sta_ps_deliver_uapsd(struct sta_info *sta);
653 630
654void ieee80211_cleanup_sdata_stas(struct ieee80211_sub_if_data *sdata);
655
656#endif /* STA_INFO_H */ 631#endif /* STA_INFO_H */