diff options
author | Johannes Berg <johannes.berg@intel.com> | 2013-02-15 15:38:08 -0500 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-03-07 08:33:21 -0500 |
commit | e943789edbb1f9de71b129d9992489eb79ed341f (patch) | |
tree | 68fa313de6316ee270dc7fbc08b3596bf3483497 /net/mac80211/sta_info.c | |
parent | 560d268220d3416a2d473bcc906ea2ccbf51e4ec (diff) |
mac80211: provide ieee80211_sta_eosp()
The irqsafe version ieee80211_sta_eosp_irqsafe() exists, but
drivers must not mix calls to any irqsafe/non-irqsafe function.
Both ath9k and iwlwifi, the likely first users of this interface,
use non-irqsafe RX/TX/TX status so must also use a non-irqsafe
version of this function. Since no driver uses the _irqsafe()
version, remove that.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/sta_info.c')
-rw-r--r-- | net/mac80211/sta_info.c | 20 |
1 files changed, 3 insertions, 17 deletions
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c index 3644ad79688a..852bf45fcfa3 100644 --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c | |||
@@ -1390,30 +1390,16 @@ void ieee80211_sta_block_awake(struct ieee80211_hw *hw, | |||
1390 | } | 1390 | } |
1391 | EXPORT_SYMBOL(ieee80211_sta_block_awake); | 1391 | EXPORT_SYMBOL(ieee80211_sta_block_awake); |
1392 | 1392 | ||
1393 | void ieee80211_sta_eosp_irqsafe(struct ieee80211_sta *pubsta) | 1393 | void ieee80211_sta_eosp(struct ieee80211_sta *pubsta) |
1394 | { | 1394 | { |
1395 | struct sta_info *sta = container_of(pubsta, struct sta_info, sta); | 1395 | struct sta_info *sta = container_of(pubsta, struct sta_info, sta); |
1396 | struct ieee80211_local *local = sta->local; | 1396 | struct ieee80211_local *local = sta->local; |
1397 | struct sk_buff *skb; | ||
1398 | struct skb_eosp_msg_data *data; | ||
1399 | 1397 | ||
1400 | trace_api_eosp(local, pubsta); | 1398 | trace_api_eosp(local, pubsta); |
1401 | 1399 | ||
1402 | skb = alloc_skb(0, GFP_ATOMIC); | 1400 | clear_sta_flag(sta, WLAN_STA_SP); |
1403 | if (!skb) { | ||
1404 | /* too bad ... but race is better than loss */ | ||
1405 | clear_sta_flag(sta, WLAN_STA_SP); | ||
1406 | return; | ||
1407 | } | ||
1408 | |||
1409 | data = (void *)skb->cb; | ||
1410 | memcpy(data->sta, pubsta->addr, ETH_ALEN); | ||
1411 | memcpy(data->iface, sta->sdata->vif.addr, ETH_ALEN); | ||
1412 | skb->pkt_type = IEEE80211_EOSP_MSG; | ||
1413 | skb_queue_tail(&local->skb_queue, skb); | ||
1414 | tasklet_schedule(&local->tasklet); | ||
1415 | } | 1401 | } |
1416 | EXPORT_SYMBOL(ieee80211_sta_eosp_irqsafe); | 1402 | EXPORT_SYMBOL(ieee80211_sta_eosp); |
1417 | 1403 | ||
1418 | void ieee80211_sta_set_buffered(struct ieee80211_sta *pubsta, | 1404 | void ieee80211_sta_set_buffered(struct ieee80211_sta *pubsta, |
1419 | u8 tid, bool buffered) | 1405 | u8 tid, bool buffered) |