Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 279178
b: refs/heads/master
c: 1f40e14
h: refs/heads/master
v: v3
  • Loading branch information
Emmanuel Grumbach authored and Wey-Yi Guy committed Dec 16, 2011
1 parent eca57ca commit 2fc2e2e
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 18 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 1ba42da479e8b4a4198a702bc819850d9926a035
refs/heads/master: 1f40e145eb4dafbded5591c85040259fed6a453e
21 changes: 10 additions & 11 deletions trunk/drivers/net/wireless/iwlwifi/iwl-trans-pcie-tx.c
Original file line number Diff line number Diff line change
Expand Up @@ -599,10 +599,8 @@ int iwl_trans_pcie_tx_agg_disable(struct iwl_trans *trans,
enum iwl_rxon_context_id ctx, int sta_id,
int tid)
{
struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
unsigned long flags;
int read_ptr, write_ptr;
struct iwl_tid_data *tid_data;
unsigned long flags;
int txq_id;

spin_lock_irqsave(&trans->shrd->sta_lock, flags);
Expand Down Expand Up @@ -642,21 +640,22 @@ int iwl_trans_pcie_tx_agg_disable(struct iwl_trans *trans,
return 0;
}

write_ptr = trans_pcie->txq[txq_id].q.write_ptr;
read_ptr = trans_pcie->txq[txq_id].q.read_ptr;
tid_data->agg.ssn = SEQ_TO_SN(tid_data->seq_number);

/* The queue is not empty */
if (write_ptr != read_ptr) {
IWL_DEBUG_TX_QUEUES(trans,
"Stopping a non empty AGG HW QUEUE\n");
/* There are still packets for this RA / TID in the HW */
if (tid_data->agg.ssn != tid_data->next_reclaimed) {
IWL_DEBUG_TX_QUEUES(trans, "Can't proceed: ssn %d, "
"next_recl = %d",
tid_data->agg.ssn,
tid_data->next_reclaimed);
trans->shrd->tid_data[sta_id][tid].agg.state =
IWL_EMPTYING_HW_QUEUE_DELBA;
tid_data->agg.ssn = SEQ_TO_SN(tid_data->seq_number);
spin_unlock_irqrestore(&trans->shrd->sta_lock, flags);
return 0;
}

IWL_DEBUG_TX_QUEUES(trans, "HW queue is empty\n");
IWL_DEBUG_TX_QUEUES(trans, "Can proceed: ssn = next_recl = %d",
tid_data->agg.ssn);
turn_off:
trans->shrd->tid_data[sta_id][tid].agg.state = IWL_AGG_OFF;

Expand Down
10 changes: 4 additions & 6 deletions trunk/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
Original file line number Diff line number Diff line change
Expand Up @@ -1278,20 +1278,18 @@ static int iwl_trans_pcie_request_irq(struct iwl_trans *trans)
static int iwlagn_txq_check_empty(struct iwl_trans *trans,
int sta_id, u8 tid, int txq_id)
{
struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
struct iwl_queue *q = &trans_pcie->txq[txq_id].q;
struct iwl_tid_data *tid_data = &trans->shrd->tid_data[sta_id][tid];

lockdep_assert_held(&trans->shrd->sta_lock);

switch (trans->shrd->tid_data[sta_id][tid].agg.state) {
case IWL_EMPTYING_HW_QUEUE_DELBA:
/* We are reclaiming the last packet of the */
/* aggregated HW queue */
/* There are no packets for this RA / TID in the HW any more */
if ((txq_id == tid_data->agg.txq_id) &&
(q->read_ptr == q->write_ptr)) {
(tid_data->agg.ssn == tid_data->next_reclaimed)) {
IWL_DEBUG_TX_QUEUES(trans,
"HW queue empty: continue DELBA flow\n");
"Can continue DELBA flow ssn = next_recl ="
" %d", tid_data->next_reclaimed);
iwl_trans_pcie_txq_agg_disable(trans, txq_id);
tid_data->agg.state = IWL_AGG_OFF;
iwl_stop_tx_ba_trans_ready(priv(trans),
Expand Down

0 comments on commit 2fc2e2e

Please sign in to comment.