Patch "iwlwifi: mvm: wake the wait queue when the RX sync counter is zero" has been added to the 4.8-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
iwlwifi: mvm: wake the wait queue when the RX sync counter is zero
to the 4.8-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
iwlwifi-mvm-wake-the-wait-queue-when-the-rx-sync-counter-is-zero.patch
and it can be found in the queue-4.8 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
3a732c65de427fdae67a243fd331356034b5a1e8Mon Sep 17 00:00:00 2001
From: Sara Sharon <[email protected]>
Date: Sun, 9 Oct 2016 17:34:24 +0300
Subject: iwlwifi: mvm: wake the wait queue when the RX sync counter is zero
From: Sara Sharon <[email protected]>
commit 3a732c65de427fdae67a243fd331356034b5a1e8 upstream.
When we sync the RX queues the driver waits to receive echo notification on all the RX queues.
The wait queue is set with timeout until all queues have received the notification.
However, iwl_mvm_rx_queue_notif() never woke up the wait queue, with the result of the counter value being checked only when the timeout expired.
This may cause a latency of up to 1 second.
--- drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 3 +-- drivers/net/wireless/intel/iwlwifi/mvm/mvm.h | 1 + drivers/net/wireless/intel/iwlwifi/mvm/ops.c | 1 + drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c | 3 ++- 4 files changed, 5 insertions(+), 3 deletions(-)
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +1 -2
@@ -4097,7 +4097,6 @@ void iwl_mvm_sync_rx_queues_internal(str struct iwl_mvm_internal_rxq_notif *notif, u32 size) { -DECLARE_WAIT_QUEUE_HEAD_ONSTACK (notif_waitq );u32 qmask =BIT (mvm->trans->num_rx_queues) -1 ;int ret;
@@ -4119,7 +4118,7 @@ void iwl_mvm_sync_rx_queues_internal(str }if (notif->sync) - ret =wait_event_timeout (notif_waitq, + ret =wait_event_timeout (mvm->rx_sync_waitq,atomic_read (&mvm->queue_sync_counter) ==0 ,HZ );WARN_ON_ONCE (!ret);
drivers/net/wireless/intel/iwlwifi/mvm/mvm.h +1 -0
@@ -932,6 +932,7 @@ struct iwl_mvm {/* sync d0i3_tx queue and IWL_MVM_STATUS_IN_D0I3 status flag */ spinlock_t d0i3_tx_lock;wait_queue_head_t d0i3_exit_waitq; +wait_queue_head_t rx_sync_waitq;/* BT-Coex */ struct iwl_bt_coex_profile_notif last_bt_notif;
drivers/net/wireless/intel/iwlwifi/mvm/ops.c +1 -0
@@ -618,6 +618,7 @@ iwl_op_mode_mvm_start(struct iwl_trans *spin_lock_init (&mvm->refs_lock);skb_queue_head_init (&mvm->d0i3_tx);init_waitqueue_head (&mvm->d0i3_exit_waitq); +init_waitqueue_head (&mvm->rx_sync_waitq);atomic_set (&mvm->queue_sync_counter,0 );
drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c +2 -1
@@ -545,7 +545,8 @@ void iwl_mvm_rx_queue_notif(struct iwl_m "Received expired RX queue sync message\n");return ; } -atomic_dec (&mvm->queue_sync_counter); +if (!atomic_dec_return (&mvm->queue_sync_counter)) +wake_up (&mvm->rx_sync_waitq); }switch (internal_notif->type) {
Patches currently in stable-queue which might be from [email protected] are
queue-4.8/iwlwifi-mvm-wake-the-wait-queue-when-the-rx-sync-counter-is-zero.patch