aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>2012-06-07 06:44:14 -0400
committerJohannes Berg <johannes.berg@intel.com>2012-06-13 03:01:03 -0400
commit5bf9a89d9a2eaa136a23d872db4195ca8cada4c8 (patch)
tree22ce7fcc538473df2f968e02ede530d02f188f53 /drivers/net
parent1ce8658c08f1c1baa72e3cdea43a9d715dad08a2 (diff)
iwlwifi: remove lock around txq_enable
This locking isn't needed. The only locking we need is when we access prph registers but there is already a separate lock for that. Since we haven't returned from the mac80211's IEEE80211_AMPDU_TX_OPERATIONAL ampdu_action, we cannot receive any Tx frame for that sta / tid while enabling the queue. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/iwlwifi/pcie/internal.h5
-rw-r--r--drivers/net/wireless/iwlwifi/pcie/trans.c5
-rw-r--r--drivers/net/wireless/iwlwifi/pcie/tx.c21
3 files changed, 5 insertions, 26 deletions
diff --git a/drivers/net/wireless/iwlwifi/pcie/internal.h b/drivers/net/wireless/iwlwifi/pcie/internal.h
index 6c7b35530da..5024fb662bf 100644
--- a/drivers/net/wireless/iwlwifi/pcie/internal.h
+++ b/drivers/net/wireless/iwlwifi/pcie/internal.h
@@ -339,12 +339,9 @@ void iwl_tx_cmd_complete(struct iwl_trans *trans,
339void iwl_trans_txq_update_byte_cnt_tbl(struct iwl_trans *trans, 339void iwl_trans_txq_update_byte_cnt_tbl(struct iwl_trans *trans,
340 struct iwl_tx_queue *txq, 340 struct iwl_tx_queue *txq,
341 u16 byte_cnt); 341 u16 byte_cnt);
342void iwl_trans_pcie_txq_disable(struct iwl_trans *trans, int queue);
343void __iwl_trans_pcie_txq_enable(struct iwl_trans *trans, int txq_id,
344 int fifo, int sta_id, int tid,
345 int frame_limit, u16 ssn);
346void iwl_trans_pcie_txq_enable(struct iwl_trans *trans, int txq_id, int fifo, 342void iwl_trans_pcie_txq_enable(struct iwl_trans *trans, int txq_id, int fifo,
347 int sta_id, int tid, int frame_limit, u16 ssn); 343 int sta_id, int tid, int frame_limit, u16 ssn);
344void iwl_trans_pcie_txq_disable(struct iwl_trans *trans, int queue);
348void iwl_txq_free_tfd(struct iwl_trans *trans, struct iwl_tx_queue *txq, 345void iwl_txq_free_tfd(struct iwl_trans *trans, struct iwl_tx_queue *txq,
349 enum dma_data_direction dma_dir); 346 enum dma_data_direction dma_dir);
350int iwl_tx_queue_reclaim(struct iwl_trans *trans, int txq_id, int index, 347int iwl_tx_queue_reclaim(struct iwl_trans *trans, int txq_id, int index,
diff --git a/drivers/net/wireless/iwlwifi/pcie/trans.c b/drivers/net/wireless/iwlwifi/pcie/trans.c
index 1904fdaf317..4d4cbae83a0 100644
--- a/drivers/net/wireless/iwlwifi/pcie/trans.c
+++ b/drivers/net/wireless/iwlwifi/pcie/trans.c
@@ -1068,9 +1068,8 @@ static void iwl_tx_start(struct iwl_trans *trans)
1068 for (i = 0; i < trans_pcie->n_q_to_fifo; i++) { 1068 for (i = 0; i < trans_pcie->n_q_to_fifo; i++) {
1069 int fifo = trans_pcie->setup_q_to_fifo[i]; 1069 int fifo = trans_pcie->setup_q_to_fifo[i];
1070 1070
1071 __iwl_trans_pcie_txq_enable(trans, i, fifo, IWL_INVALID_STATION, 1071 iwl_trans_pcie_txq_enable(trans, i, fifo, IWL_INVALID_STATION,
1072 IWL_TID_NON_QOS, 1072 IWL_TID_NON_QOS, SCD_FRAME_LIMIT, 0);
1073 SCD_FRAME_LIMIT, 0);
1074 } 1073 }
1075 1074
1076 /* Activate all Tx DMA/FIFO channels */ 1075 /* Activate all Tx DMA/FIFO channels */
diff --git a/drivers/net/wireless/iwlwifi/pcie/tx.c b/drivers/net/wireless/iwlwifi/pcie/tx.c
index 4efdeb996e4..6baf8deef51 100644
--- a/drivers/net/wireless/iwlwifi/pcie/tx.c
+++ b/drivers/net/wireless/iwlwifi/pcie/tx.c
@@ -415,14 +415,11 @@ static inline void iwl_txq_set_inactive(struct iwl_trans *trans, u16 txq_id)
415 (1 << SCD_QUEUE_STTS_REG_POS_SCD_ACT_EN)); 415 (1 << SCD_QUEUE_STTS_REG_POS_SCD_ACT_EN));
416} 416}
417 417
418void __iwl_trans_pcie_txq_enable(struct iwl_trans *trans, int txq_id, 418void iwl_trans_pcie_txq_enable(struct iwl_trans *trans, int txq_id, int fifo,
419 int fifo, int sta_id, int tid, 419 int sta_id, int tid, int frame_limit, u16 ssn)
420 int frame_limit, u16 ssn)
421{ 420{
422 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); 421 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
423 422
424 lockdep_assert_held(&trans_pcie->irq_lock);
425
426 if (test_and_set_bit(txq_id, trans_pcie->queue_used)) 423 if (test_and_set_bit(txq_id, trans_pcie->queue_used))
427 WARN_ONCE(1, "queue %d already used - expect issues", txq_id); 424 WARN_ONCE(1, "queue %d already used - expect issues", txq_id);
428 425
@@ -480,20 +477,6 @@ void __iwl_trans_pcie_txq_enable(struct iwl_trans *trans, int txq_id,
480 txq_id, fifo, ssn & 0xff); 477 txq_id, fifo, ssn & 0xff);
481} 478}
482 479
483void iwl_trans_pcie_txq_enable(struct iwl_trans *trans, int txq_id, int fifo,
484 int sta_id, int tid, int frame_limit, u16 ssn)
485{
486 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
487 unsigned long flags;
488
489 spin_lock_irqsave(&trans_pcie->irq_lock, flags);
490
491 __iwl_trans_pcie_txq_enable(trans, txq_id, fifo, sta_id,
492 tid, frame_limit, ssn);
493
494 spin_unlock_irqrestore(&trans_pcie->irq_lock, flags);
495}
496
497void iwl_trans_pcie_txq_disable(struct iwl_trans *trans, int txq_id) 480void iwl_trans_pcie_txq_disable(struct iwl_trans *trans, int txq_id)
498{ 481{
499 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); 482 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);