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>
This commit is contained in:
committed by
Johannes Berg
parent
1ce8658c08
commit
5bf9a89d9a
@@ -339,12 +339,9 @@ void iwl_tx_cmd_complete(struct iwl_trans *trans,
|
|||||||
void iwl_trans_txq_update_byte_cnt_tbl(struct iwl_trans *trans,
|
void iwl_trans_txq_update_byte_cnt_tbl(struct iwl_trans *trans,
|
||||||
struct iwl_tx_queue *txq,
|
struct iwl_tx_queue *txq,
|
||||||
u16 byte_cnt);
|
u16 byte_cnt);
|
||||||
void iwl_trans_pcie_txq_disable(struct iwl_trans *trans, int queue);
|
|
||||||
void __iwl_trans_pcie_txq_enable(struct iwl_trans *trans, int txq_id,
|
|
||||||
int fifo, int sta_id, int tid,
|
|
||||||
int frame_limit, u16 ssn);
|
|
||||||
void iwl_trans_pcie_txq_enable(struct iwl_trans *trans, int txq_id, int fifo,
|
void iwl_trans_pcie_txq_enable(struct iwl_trans *trans, int txq_id, int fifo,
|
||||||
int sta_id, int tid, int frame_limit, u16 ssn);
|
int sta_id, int tid, int frame_limit, u16 ssn);
|
||||||
|
void iwl_trans_pcie_txq_disable(struct iwl_trans *trans, int queue);
|
||||||
void iwl_txq_free_tfd(struct iwl_trans *trans, struct iwl_tx_queue *txq,
|
void iwl_txq_free_tfd(struct iwl_trans *trans, struct iwl_tx_queue *txq,
|
||||||
enum dma_data_direction dma_dir);
|
enum dma_data_direction dma_dir);
|
||||||
int iwl_tx_queue_reclaim(struct iwl_trans *trans, int txq_id, int index,
|
int iwl_tx_queue_reclaim(struct iwl_trans *trans, int txq_id, int index,
|
||||||
|
@@ -1068,9 +1068,8 @@ static void iwl_tx_start(struct iwl_trans *trans)
|
|||||||
for (i = 0; i < trans_pcie->n_q_to_fifo; i++) {
|
for (i = 0; i < trans_pcie->n_q_to_fifo; i++) {
|
||||||
int fifo = trans_pcie->setup_q_to_fifo[i];
|
int fifo = trans_pcie->setup_q_to_fifo[i];
|
||||||
|
|
||||||
__iwl_trans_pcie_txq_enable(trans, i, fifo, IWL_INVALID_STATION,
|
iwl_trans_pcie_txq_enable(trans, i, fifo, IWL_INVALID_STATION,
|
||||||
IWL_TID_NON_QOS,
|
IWL_TID_NON_QOS, SCD_FRAME_LIMIT, 0);
|
||||||
SCD_FRAME_LIMIT, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Activate all Tx DMA/FIFO channels */
|
/* Activate all Tx DMA/FIFO channels */
|
||||||
|
@@ -415,14 +415,11 @@ static inline void iwl_txq_set_inactive(struct iwl_trans *trans, u16 txq_id)
|
|||||||
(1 << SCD_QUEUE_STTS_REG_POS_SCD_ACT_EN));
|
(1 << SCD_QUEUE_STTS_REG_POS_SCD_ACT_EN));
|
||||||
}
|
}
|
||||||
|
|
||||||
void __iwl_trans_pcie_txq_enable(struct iwl_trans *trans, int txq_id,
|
void iwl_trans_pcie_txq_enable(struct iwl_trans *trans, int txq_id, int fifo,
|
||||||
int fifo, int sta_id, int tid,
|
int sta_id, int tid, int frame_limit, u16 ssn)
|
||||||
int frame_limit, u16 ssn)
|
|
||||||
{
|
{
|
||||||
struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
|
struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
|
||||||
|
|
||||||
lockdep_assert_held(&trans_pcie->irq_lock);
|
|
||||||
|
|
||||||
if (test_and_set_bit(txq_id, trans_pcie->queue_used))
|
if (test_and_set_bit(txq_id, trans_pcie->queue_used))
|
||||||
WARN_ONCE(1, "queue %d already used - expect issues", txq_id);
|
WARN_ONCE(1, "queue %d already used - expect issues", txq_id);
|
||||||
|
|
||||||
@@ -480,20 +477,6 @@ void __iwl_trans_pcie_txq_enable(struct iwl_trans *trans, int txq_id,
|
|||||||
txq_id, fifo, ssn & 0xff);
|
txq_id, fifo, ssn & 0xff);
|
||||||
}
|
}
|
||||||
|
|
||||||
void iwl_trans_pcie_txq_enable(struct iwl_trans *trans, int txq_id, int fifo,
|
|
||||||
int sta_id, int tid, int frame_limit, u16 ssn)
|
|
||||||
{
|
|
||||||
struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
|
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
spin_lock_irqsave(&trans_pcie->irq_lock, flags);
|
|
||||||
|
|
||||||
__iwl_trans_pcie_txq_enable(trans, txq_id, fifo, sta_id,
|
|
||||||
tid, frame_limit, ssn);
|
|
||||||
|
|
||||||
spin_unlock_irqrestore(&trans_pcie->irq_lock, flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
void iwl_trans_pcie_txq_disable(struct iwl_trans *trans, int txq_id)
|
void iwl_trans_pcie_txq_disable(struct iwl_trans *trans, int txq_id)
|
||||||
{
|
{
|
||||||
struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
|
struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
|
||||||
|
Reference in New Issue
Block a user