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:
@@ -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
|
||||||
|
@@ -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);
|
||||||
|
@@ -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 */
|
||||||
|
Reference in New Issue
Block a user