Commit 6093e66b authored by Vladimir Kondratiev's avatar Vladimir Kondratiev Committed by Kalle Valo

wil6210: count drops in Rx block ack reorder

When performing Rx reordering, count skb's dropped
per reorder buffer; and print dropped packets count
on the "stations" debugfs entry
Signed-off-by: default avatarVladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
parent f1ad8c93
...@@ -1353,7 +1353,7 @@ static void wil_print_rxtid(struct seq_file *s, struct wil_tid_ampdu_rx *r) ...@@ -1353,7 +1353,7 @@ static void wil_print_rxtid(struct seq_file *s, struct wil_tid_ampdu_rx *r)
else else
seq_printf(s, "%c", r->reorder_buf[i] ? '*' : '_'); seq_printf(s, "%c", r->reorder_buf[i] ? '*' : '_');
} }
seq_printf(s, "] last drop 0x%03x\n", r->ssn_last_drop); seq_printf(s, "] drop %llu last 0x%03x\n", r->drop, r->ssn_last_drop);
} }
static int wil_sta_debugfs_show(struct seq_file *s, void *data) static int wil_sta_debugfs_show(struct seq_file *s, void *data)
......
...@@ -153,6 +153,7 @@ __acquires(&sta->tid_rx_lock) __releases(&sta->tid_rx_lock) ...@@ -153,6 +153,7 @@ __acquires(&sta->tid_rx_lock) __releases(&sta->tid_rx_lock)
/* frame with out of date sequence number */ /* frame with out of date sequence number */
if (seq_less(seq, r->head_seq_num)) { if (seq_less(seq, r->head_seq_num)) {
r->ssn_last_drop = seq; r->ssn_last_drop = seq;
r->drop++;
dev_kfree_skb(skb); dev_kfree_skb(skb);
goto out; goto out;
} }
...@@ -173,6 +174,7 @@ __acquires(&sta->tid_rx_lock) __releases(&sta->tid_rx_lock) ...@@ -173,6 +174,7 @@ __acquires(&sta->tid_rx_lock) __releases(&sta->tid_rx_lock)
/* check if we already stored this frame */ /* check if we already stored this frame */
if (r->reorder_buf[index]) { if (r->reorder_buf[index]) {
r->drop++;
dev_kfree_skb(skb); dev_kfree_skb(skb);
goto out; goto out;
} }
......
...@@ -426,6 +426,7 @@ struct pci_dev; ...@@ -426,6 +426,7 @@ struct pci_dev;
* @timeout: reset timer value (in TUs). * @timeout: reset timer value (in TUs).
* @dialog_token: dialog token for aggregation session * @dialog_token: dialog token for aggregation session
* @rcu_head: RCU head used for freeing this struct * @rcu_head: RCU head used for freeing this struct
* @drop: total frames dropped for this reorder buffer
* *
* This structure's lifetime is managed by RCU, assignments to * This structure's lifetime is managed by RCU, assignments to
* the array holding it must hold the aggregation mutex. * the array holding it must hold the aggregation mutex.
...@@ -443,6 +444,7 @@ struct wil_tid_ampdu_rx { ...@@ -443,6 +444,7 @@ struct wil_tid_ampdu_rx {
u16 buf_size; u16 buf_size;
u16 timeout; u16 timeout;
u16 ssn_last_drop; u16 ssn_last_drop;
unsigned long long drop;
u8 dialog_token; u8 dialog_token;
bool first_time; /* is it 1-st time this buffer used? */ bool first_time; /* is it 1-st time this buffer used? */
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment