|
@@ -1186,28 +1186,25 @@ static bool aggr_process_recv_frm(struct aggr_info_conn *agg_conn, u8 tid,
|
|
|
aggr_deque_frms(agg_conn, tid, 0, 1);
|
|
|
|
|
|
if (agg_conn->timer_scheduled)
|
|
|
- rxtid->progress = true;
|
|
|
- else {
|
|
|
- spin_lock_bh(&rxtid->lock);
|
|
|
- for (idx = 0 ; idx < rxtid->hold_q_sz; idx++) {
|
|
|
- if (rxtid->hold_q[idx].skb) {
|
|
|
- /*
|
|
|
- * There is a frame in the queue and no
|
|
|
- * timer so start a timer to ensure that
|
|
|
- * the frame doesn't remain stuck
|
|
|
- * forever.
|
|
|
- */
|
|
|
- agg_conn->timer_scheduled = true;
|
|
|
- mod_timer(&agg_conn->timer,
|
|
|
- (jiffies +
|
|
|
- HZ * (AGGR_RX_TIMEOUT) / 1000));
|
|
|
- rxtid->progress = false;
|
|
|
- rxtid->timer_mon = true;
|
|
|
- break;
|
|
|
- }
|
|
|
+ return is_queued;
|
|
|
+
|
|
|
+ spin_lock_bh(&rxtid->lock);
|
|
|
+ for (idx = 0 ; idx < rxtid->hold_q_sz; idx++) {
|
|
|
+ if (rxtid->hold_q[idx].skb) {
|
|
|
+ /*
|
|
|
+ * There is a frame in the queue and no
|
|
|
+ * timer so start a timer to ensure that
|
|
|
+ * the frame doesn't remain stuck
|
|
|
+ * forever.
|
|
|
+ */
|
|
|
+ agg_conn->timer_scheduled = true;
|
|
|
+ mod_timer(&agg_conn->timer,
|
|
|
+ (jiffies + (HZ * AGGR_RX_TIMEOUT) / 1000));
|
|
|
+ rxtid->timer_mon = true;
|
|
|
+ break;
|
|
|
}
|
|
|
- spin_unlock_bh(&rxtid->lock);
|
|
|
}
|
|
|
+ spin_unlock_bh(&rxtid->lock);
|
|
|
|
|
|
return is_queued;
|
|
|
}
|
|
@@ -1612,7 +1609,7 @@ static void aggr_timeout(unsigned long arg)
|
|
|
rxtid = &aggr_conn->rx_tid[i];
|
|
|
stats = &aggr_conn->stat[i];
|
|
|
|
|
|
- if (!rxtid->aggr || !rxtid->timer_mon || rxtid->progress)
|
|
|
+ if (!rxtid->aggr || !rxtid->timer_mon)
|
|
|
continue;
|
|
|
|
|
|
stats->num_timeouts++;
|
|
@@ -1635,7 +1632,6 @@ static void aggr_timeout(unsigned long arg)
|
|
|
if (rxtid->hold_q[j].skb) {
|
|
|
aggr_conn->timer_scheduled = true;
|
|
|
rxtid->timer_mon = true;
|
|
|
- rxtid->progress = false;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -1666,7 +1662,6 @@ static void aggr_delete_tid_state(struct aggr_info_conn *aggr_conn, u8 tid)
|
|
|
aggr_deque_frms(aggr_conn, tid, 0, 0);
|
|
|
|
|
|
rxtid->aggr = false;
|
|
|
- rxtid->progress = false;
|
|
|
rxtid->timer_mon = false;
|
|
|
rxtid->win_sz = 0;
|
|
|
rxtid->seq_next = 0;
|
|
@@ -1745,7 +1740,6 @@ void aggr_conn_init(struct ath6kl_vif *vif, struct aggr_info *aggr_info,
|
|
|
for (i = 0; i < NUM_OF_TIDS; i++) {
|
|
|
rxtid = &aggr_conn->rx_tid[i];
|
|
|
rxtid->aggr = false;
|
|
|
- rxtid->progress = false;
|
|
|
rxtid->timer_mon = false;
|
|
|
skb_queue_head_init(&rxtid->q);
|
|
|
spin_lock_init(&rxtid->lock);
|