qcacmn: Ratelimit defrag path error logs and add stats

Ratelimit the defrag path error logs and add the stats
for fragmented packets received out-of-order which
inturn leads to sequence number mistamtch in defrag path.

Change-Id: I17d4c1cff214a8c8a05abf576701824b293d2883
CRs-Fixed: 2740805
This commit is contained in:
Rakesh Pillai
2020-07-25 11:10:02 +05:30
committed by snandini
parent 5e49c050f4
commit 19a0a18573
3 changed files with 5 additions and 11 deletions

View File

@@ -134,8 +134,7 @@ static void dp_rx_return_head_frag_desc(struct dp_peer *peer,
void dp_rx_reorder_flush_frag(struct dp_peer *peer, void dp_rx_reorder_flush_frag(struct dp_peer *peer,
unsigned int tid) unsigned int tid)
{ {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO_HIGH, dp_info_rl("Flushing TID %d", tid);
FL("Flushing TID %d"), tid);
if (!peer) { if (!peer) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
@@ -1300,9 +1299,6 @@ static QDF_STATUS dp_rx_defrag(struct dp_peer *peer, unsigned tid,
hdr_space += dp_f_wep.ic_header; hdr_space += dp_f_wep.ic_header;
break; break;
default: default:
QDF_TRACE(QDF_MODULE_ID_TXRX,
QDF_TRACE_LEVEL_ERROR,
"dp_rx_defrag: Did not match any security type");
break; break;
} }
@@ -1536,12 +1532,7 @@ dp_rx_defrag_store_fragment(struct dp_soc *soc,
*/ */
dp_rx_reorder_flush_frag(peer, tid); dp_rx_reorder_flush_frag(peer, tid);
DP_STATS_INC(soc, rx.rx_frag_err, 1); DP_STATS_INC(soc, rx.rx_frag_oor, 1);
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
"%s mismatch, dropping earlier sequence ",
(rxseq == rx_tid->curr_seq_num)
? "address"
: "seq number");
/* /*
* The sequence number for this fragment becomes the * The sequence number for this fragment becomes the

View File

@@ -6559,6 +6559,7 @@ dp_print_soc_rx_stats(struct dp_soc *soc)
DP_PRINT_STATS("RX frags: %d", soc->stats.rx.rx_frags); DP_PRINT_STATS("RX frags: %d", soc->stats.rx.rx_frags);
DP_PRINT_STATS("RX frag wait: %d", soc->stats.rx.rx_frag_wait); DP_PRINT_STATS("RX frag wait: %d", soc->stats.rx.rx_frag_wait);
DP_PRINT_STATS("RX frag err: %d", soc->stats.rx.rx_frag_err); DP_PRINT_STATS("RX frag err: %d", soc->stats.rx.rx_frag_err);
DP_PRINT_STATS("RX frag OOR: %d", soc->stats.rx.rx_frag_oor);
DP_PRINT_STATS("RX HP out_of_sync: %d", soc->stats.rx.hp_oos2); DP_PRINT_STATS("RX HP out_of_sync: %d", soc->stats.rx.hp_oos2);
DP_PRINT_STATS("RX Ring Near Full: %d", soc->stats.rx.near_full); DP_PRINT_STATS("RX Ring Near Full: %d", soc->stats.rx.near_full);

View File

@@ -770,6 +770,8 @@ struct dp_soc_stats {
uint32_t rx_frag_wait; uint32_t rx_frag_wait;
/* Fragments dropped due to errors */ /* Fragments dropped due to errors */
uint32_t rx_frag_err; uint32_t rx_frag_err;
/* Fragments received OOR causing sequence num mismatch */
uint32_t rx_frag_oor;
/* Fragments dropped due to len errors in skb */ /* Fragments dropped due to len errors in skb */
uint32_t rx_frag_err_len_error; uint32_t rx_frag_err_len_error;
/* Fragments dropped due to no peer found */ /* Fragments dropped due to no peer found */