qcacmn: Handle raw frames and invalid flow_idx stats

Make sure to drop the raw Rx frames as both driver and stack
are not expected to handle them.
Add counter for invalid fisa flow_idx packet received.

Change-Id: I5107c554b8ce6a9a7973f2aeca44bb0f360dc2df
CRs-Fixed: 2733981
This commit is contained in:
Jinwei Chen
2020-07-16 16:37:34 +08:00
committed by snandini
parent b6130d4eb6
commit 87d4f73245
4 changed files with 104 additions and 62 deletions

View File

@@ -1918,6 +1918,31 @@ void dp_rx_set_hdr_pad(qdf_nbuf_t nbuf, uint32_t l3_padding)
}
#endif
#ifdef DP_RX_DROP_RAW_FRM
/**
* dp_rx_is_raw_frame_dropped() - if raw frame nbuf, free and drop
* @nbuf: pkt skb pointer
*
* Return: true - raw frame, dropped
* false - not raw frame, do nothing
*/
static inline
bool dp_rx_is_raw_frame_dropped(qdf_nbuf_t nbuf)
{
if (qdf_nbuf_is_raw_frame(nbuf)) {
qdf_nbuf_free(nbuf);
return true;
}
return false;
}
#else
static inline
bool dp_rx_is_raw_frame_dropped(qdf_nbuf_t nbuf)
{
return false;
}
#endif
/**
* dp_rx_process() - Brain of the Rx processing functionality
@@ -2253,6 +2278,12 @@ done:
nbuf = nbuf_head;
while (nbuf) {
next = nbuf->next;
if (qdf_unlikely(dp_rx_is_raw_frame_dropped(nbuf))) {
nbuf = next;
DP_STATS_INC(soc, rx.err.raw_frm_drop, 1);
continue;
}
rx_tlv_hdr = qdf_nbuf_data(nbuf);
vdev_id = QDF_NBUF_CB_RX_VDEV_ID(nbuf);

View File

@@ -6049,6 +6049,8 @@ void dp_txrx_path_stats(struct dp_soc *soc)
pdev->soc->stats.rx.err.reo_err_oor_drop);
DP_PRINT_STATS("Rx err msdu rejected: %d",
soc->stats.rx.err.rejected);
DP_PRINT_STATS("Rx raw frame dropped: %d",
soc->stats.rx.err.raw_frm_drop);
DP_PRINT_STATS("Reo Statistics");
DP_PRINT_STATS("near_full: %u ", soc->stats.rx.near_full);

View File

@@ -849,6 +849,8 @@ struct dp_soc_stats {
uint32_t rejected;
/* Incorrect msdu count in MPDU desc info */
uint32_t msdu_count_mismatch;
/* RX raw frame dropped count */
uint32_t raw_frm_drop;
} err;
/* packet count per core - per ring */
@@ -2401,6 +2403,11 @@ struct dp_rx_fst {
#define DP_RX_GET_SW_FT_ENTRY_SIZE sizeof(struct dp_rx_fse)
#elif WLAN_SUPPORT_RX_FISA
struct dp_fisa_stats {
/* flow index invalid from RX HW TLV */
uint32_t invalid_flow_index;
};
enum fisa_aggr_ret {
FISA_AGGR_DONE,
FISA_AGGR_NOT_ELIGIBLE,
@@ -2486,6 +2493,8 @@ struct dp_rx_fst {
qdf_atomic_t fse_cache_flush_posted;
qdf_timer_t fse_cache_flush_timer;
struct fse_cache_flush_history cache_fl_rec[MAX_FSE_CACHE_FL_HST];
/* FISA DP stats */
struct dp_fisa_stats stats;
};
#endif /* WLAN_SUPPORT_RX_FISA */

View File

@@ -240,7 +240,7 @@ static void hal_rx_dump_msdu_start_tlv_6490(void *msdustart, uint8_t dbg_level)
{
struct rx_msdu_start *msdu_start = (struct rx_msdu_start *)msdustart;
hal_verbose_debug(
__QDF_TRACE_RL(dbg_level, QDF_MODULE_ID_DP,
"rx_msdu_start tlv (1/2) - "
"rxpcu_mpdu_filter_in_category: %x "
"sw_frame_group_id: %x "
@@ -299,7 +299,7 @@ static void hal_rx_dump_msdu_start_tlv_6490(void *msdustart, uint8_t dbg_level)
msdu_start->reception_type,
msdu_start->ppdu_start_timestamp);
hal_verbose_debug(
__QDF_TRACE_RL(dbg_level, QDF_MODULE_ID_DP,
"rx_msdu_start tlv (2/2) - "
"sw_phy_meta_data: %x ",
msdu_start->sw_phy_meta_data);