aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/agg-tx.c
diff options
context:
space:
mode:
authorToke Høiland-Jørgensen <toke@toke.dk>2017-10-31 12:27:45 +0100
committerJohannes Berg <johannes.berg@intel.com>2017-12-11 12:37:51 +0100
commite937b8da5a591f141fe41aa48a2e898df9888c95 (patch)
tree7a7d3eb5261a47160fef831203a0c90fca6bee8d /net/mac80211/agg-tx.c
parentmac80211: Add MIC space only for TX key option (diff)
downloadlinux-dev-e937b8da5a591f141fe41aa48a2e898df9888c95.tar.xz
linux-dev-e937b8da5a591f141fe41aa48a2e898df9888c95.zip
mac80211: Add TXQ scheduling API
This adds an API to mac80211 to handle scheduling of TXQs and changes the interface between driver and mac80211 for TXQ handling as follows: - The wake_tx_queue callback interface no longer includes the TXQ. Instead, the driver is expected to retrieve that from ieee80211_next_txq() - Two new mac80211 functions are added: ieee80211_next_txq() and ieee80211_schedule_txq(). The former returns the next TXQ that should be scheduled, and is how the driver gets a queue to pull packets from. The latter is called internally by mac80211 to start scheduling a queue, and the driver is supposed to call it to re-schedule the TXQ after it is finished pulling packets from it (unless the queue emptied). The ath9k and ath10k drivers are changed to use the new API. Signed-off-by: Toke Høiland-Jørgensen <toke@toke.dk> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/agg-tx.c')
-rw-r--r--net/mac80211/agg-tx.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c
index 595c662a61e8..6c6cad98ce92 100644
--- a/net/mac80211/agg-tx.c
+++ b/net/mac80211/agg-tx.c
@@ -226,9 +226,13 @@ ieee80211_agg_start_txq(struct sta_info *sta, int tid, bool enable)
clear_bit(IEEE80211_TXQ_AMPDU, &txqi->flags);
clear_bit(IEEE80211_TXQ_STOP, &txqi->flags);
+
+ if (!ieee80211_schedule_txq(&sta->sdata->local->hw, txq))
+ return;
+
local_bh_disable();
rcu_read_lock();
- drv_wake_tx_queue(sta->sdata->local, txqi);
+ drv_wake_tx_queue(sta->sdata->local);
rcu_read_unlock();
local_bh_enable();
}