12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- From: =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= <toke@redhat.com>
- Date: Tue, 22 Jan 2019 15:20:16 +0100
- Subject: [PATCH] mac80211: Expose ieee80211_schedule_txq() function
- MIME-Version: 1.0
- Content-Type: text/plain; charset=UTF-8
- Content-Transfer-Encoding: 8bit
- Since we reworked ieee80211_return_txq() so it assumes that the caller
- takes care of logging, we need another function that can be called without
- holding any locks. Introduce ieee80211_schedule_txq() which serves this
- purpose.
- Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
- Signed-off-by: Johannes Berg <johannes.berg@intel.com>
- ---
- --- a/include/net/mac80211.h
- +++ b/include/net/mac80211.h
- @@ -6074,6 +6074,19 @@ void ieee80211_txq_schedule_end(struct i
- __releases(txq_lock);
-
- /**
- + * ieee80211_schedule_txq - schedule a TXQ for transmission
- + *
- + * @hw: pointer as obtained from ieee80211_alloc_hw()
- + * @txq: pointer obtained from station or virtual interface
- + *
- + * Schedules a TXQ for transmission if it is not already scheduled. Takes a
- + * lock, which means it must *not* be called between
- + * ieee80211_txq_schedule_start() and ieee80211_txq_schedule_end()
- + */
- +void ieee80211_schedule_txq(struct ieee80211_hw *hw, struct ieee80211_txq *txq)
- + __acquires(txq_lock) __releases(txq_lock);
- +
- +/**
- * ieee80211_txq_may_transmit - check whether TXQ is allowed to transmit
- *
- * This function is used to check whether given txq is allowed to transmit by
- --- a/net/mac80211/driver-ops.h
- +++ b/net/mac80211/driver-ops.h
- @@ -1179,9 +1179,7 @@ static inline void drv_wake_tx_queue(str
- static inline void schedule_and_wake_txq(struct ieee80211_local *local,
- struct txq_info *txqi)
- {
- - spin_lock_bh(&local->active_txq_lock[txqi->txq.ac]);
- - ieee80211_return_txq(&local->hw, &txqi->txq);
- - spin_unlock_bh(&local->active_txq_lock[txqi->txq.ac]);
- + ieee80211_schedule_txq(&local->hw, &txqi->txq);
- drv_wake_tx_queue(local, txqi);
- }
-
- --- a/net/mac80211/tx.c
- +++ b/net/mac80211/tx.c
- @@ -3693,6 +3693,19 @@ void ieee80211_return_txq(struct ieee802
- }
- EXPORT_SYMBOL(ieee80211_return_txq);
-
- +void ieee80211_schedule_txq(struct ieee80211_hw *hw,
- + struct ieee80211_txq *txq)
- + __acquires(txq_lock) __releases(txq_lock)
- +{
- + struct ieee80211_local *local = hw_to_local(hw);
- + struct txq_info *txqi = to_txq_info(txq);
- +
- + spin_lock_bh(&local->active_txq_lock[txq->ac]);
- + ieee80211_return_txq(hw, txq);
- + spin_unlock_bh(&local->active_txq_lock[txq->ac]);
- +}
- +EXPORT_SYMBOL(ieee80211_schedule_txq);
- +
- bool ieee80211_txq_may_transmit(struct ieee80211_hw *hw,
- struct ieee80211_txq *txq)
- {
|