iwlwifi: mvm: implement driver RX queues sync command
mac80211 will call the driver whenever there is a race between
RSS queues and control path that requires a processing of all
pending frames in RSS queues.
Implement that by utilizing the internal notification mechanism:
queue a message to all queues. When the message is received on
a queue it decrements the atomic counter. This guarantees that
all pending frames in the RX queue were processed since the message
is in order inside the queue.
Signed-off-by: Sara Sharon <sara.sharon@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c b/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c
index 651604d..b4d9c42 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c
@@ -406,6 +406,13 @@
internal_notif = (void *)notif->payload;
switch (internal_notif->type) {
+ case IWL_MVM_RXQ_SYNC:
+ if (mvm->queue_sync_cookie == internal_notif->cookie)
+ atomic_dec(&mvm->queue_sync_counter);
+ else
+ WARN_ONCE(1,
+ "Received expired RX queue sync message\n");
+ break;
case IWL_MVM_RXQ_NOTIF_DEL_BA:
/* TODO */
break;