mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-20 02:34:23 +08:00
iwlegacy: add il_{stop,wake}_queues_by_reason functions
Add functions that will stop/wake all queues. Make them safe regarding multiple calls and when some ac are stopped/woke independently. Tested-by: Jake Edge <jake@lwn.net> Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
42ce8943e1
commit
c6af8074fd
@ -1299,6 +1299,8 @@ struct il_priv {
|
||||
/* queue refcounts */
|
||||
#define IL_MAX_HW_QUEUES 32
|
||||
unsigned long queue_stopped[BITS_TO_LONGS(IL_MAX_HW_QUEUES)];
|
||||
#define IL_STOP_REASON_PASSIVE 0
|
||||
unsigned long stop_reason;
|
||||
/* for each AC */
|
||||
atomic_t queue_stop_count[4];
|
||||
|
||||
@ -2291,6 +2293,26 @@ il_stop_queue(struct il_priv *il, struct il_tx_queue *txq)
|
||||
_il_stop_queue(il, ac);
|
||||
}
|
||||
|
||||
static inline void
|
||||
il_wake_queues_by_reason(struct il_priv *il, int reason)
|
||||
{
|
||||
u8 ac;
|
||||
|
||||
if (test_and_clear_bit(reason, &il->stop_reason))
|
||||
for (ac = 0; ac < 4; ac++)
|
||||
_il_wake_queue(il, ac);
|
||||
}
|
||||
|
||||
static inline void
|
||||
il_stop_queues_by_reason(struct il_priv *il, int reason)
|
||||
{
|
||||
u8 ac;
|
||||
|
||||
if (!test_and_set_bit(reason, &il->stop_reason))
|
||||
for (ac = 0; ac < 4; ac++)
|
||||
_il_stop_queue(il, ac);
|
||||
}
|
||||
|
||||
#ifdef ieee80211_stop_queue
|
||||
#undef ieee80211_stop_queue
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user