aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/sta_info.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2013-02-15 15:38:08 -0500
committerJohannes Berg <johannes.berg@intel.com>2013-03-07 08:33:21 -0500
commite943789edbb1f9de71b129d9992489eb79ed341f (patch)
tree68fa313de6316ee270dc7fbc08b3596bf3483497 /net/mac80211/sta_info.c
parent560d268220d3416a2d473bcc906ea2ccbf51e4ec (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.c20
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}
1391EXPORT_SYMBOL(ieee80211_sta_block_awake); 1391EXPORT_SYMBOL(ieee80211_sta_block_awake);
1392 1392
1393void ieee80211_sta_eosp_irqsafe(struct ieee80211_sta *pubsta) 1393void 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}
1416EXPORT_SYMBOL(ieee80211_sta_eosp_irqsafe); 1402EXPORT_SYMBOL(ieee80211_sta_eosp);
1417 1403
1418void ieee80211_sta_set_buffered(struct ieee80211_sta *pubsta, 1404void ieee80211_sta_set_buffered(struct ieee80211_sta *pubsta,
1419 u8 tid, bool buffered) 1405 u8 tid, bool buffered)