You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
2.2 KiB
70 lines
2.2 KiB
From d724bb52e36359a8673cf30de2a93caf701743bd Mon Sep 17 00:00:00 2001
|
|
From: Eugene Syromiatnikov <esyr@redhat.com>
|
|
Date: Tue, 30 Jul 2019 14:33:29 +0200
|
|
Subject: [PATCH 6/7] Revert "iwlwifi: mvm: remove buggy and unnecessary
|
|
hw_queue initialization"
|
|
|
|
This reverts commit 3f7fbc8cc11e2a305247a908bc67bb5f571fbf00.
|
|
---
|
|
drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c | 36 +++++++++++++++++++++--
|
|
1 file changed, 33 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c
|
|
index 53c217af13c8..0bd800a278a6 100644
|
|
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c
|
|
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c
|
|
@@ -262,7 +262,9 @@ int iwl_mvm_mac_ctxt_init(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
|
|
.preferred_tsf = NUM_TSF_IDS,
|
|
.found_vif = false,
|
|
};
|
|
- int ret, i;
|
|
+ u32 ac;
|
|
+ int ret, i, queue_limit;
|
|
+ unsigned long used_hw_queues;
|
|
|
|
lockdep_assert_held(&mvm->mutex);
|
|
|
|
@@ -339,9 +341,37 @@ int iwl_mvm_mac_ctxt_init(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
|
|
INIT_LIST_HEAD(&mvmvif->time_event_data.list);
|
|
mvmvif->time_event_data.id = TE_MAX;
|
|
|
|
- /* No need to allocate data queues to P2P Device MAC and NAN.*/
|
|
- if (vif->type == NL80211_IFTYPE_P2P_DEVICE)
|
|
+ /* No need to allocate data queues to P2P Device MAC.*/
|
|
+ if (vif->type == NL80211_IFTYPE_P2P_DEVICE) {
|
|
+ for (ac = 0; ac < IEEE80211_NUM_ACS; ac++)
|
|
+ vif->hw_queue[ac] = IEEE80211_INVAL_HW_QUEUE;
|
|
+
|
|
return 0;
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * queues in mac80211 almost entirely independent of
|
|
+ * the ones here - no real limit
|
|
+ */
|
|
+ queue_limit = IEEE80211_MAX_QUEUES;
|
|
+
|
|
+ /*
|
|
+ * Find available queues, and allocate them to the ACs. When in
|
|
+ * DQA-mode they aren't really used, and this is done only so the
|
|
+ * mac80211 ieee80211_check_queues() function won't fail
|
|
+ */
|
|
+ for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
|
|
+ u8 queue = find_first_zero_bit(&used_hw_queues, queue_limit);
|
|
+
|
|
+ if (queue >= queue_limit) {
|
|
+ IWL_ERR(mvm, "Failed to allocate queue\n");
|
|
+ ret = -EIO;
|
|
+ goto exit_fail;
|
|
+ }
|
|
+
|
|
+ __set_bit(queue, &used_hw_queues);
|
|
+ vif->hw_queue[ac] = queue;
|
|
+ }
|
|
|
|
/* Allocate the CAB queue for softAP and GO interfaces */
|
|
if (vif->type == NL80211_IFTYPE_AP ||
|
|
--
|
|
2.13.6
|
|
|