From 73abd412bbdaebe7f85e0427292fe5766c529112 Mon Sep 17 00:00:00 2001 From: Manjunathappa Prakash Date: Fri, 17 Jul 2020 14:53:59 -0700 Subject: [PATCH] qcacld-3.0: Handle raw frames and invalid flow_idx frames Enable handling to drop the raw Rx frames as both driver and stack is not expected to handle them. Handle invalid FISA flow index which is out of valid FISA flow_id range, This can happen if we are looking at wrong or invalid TLV, in such case it is OK deliver frame without FISA aggregation. Change-Id: I746d4ad1ea5ba6d60cbadddb55803626abfb2868 CRs-Fixed: 2733978 --- Kbuild | 1 + core/dp/txrx3.0/dp_fisa_rx.c | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Kbuild b/Kbuild index b8e69690c257..e76385d930ab 100644 --- a/Kbuild +++ b/Kbuild @@ -3178,6 +3178,7 @@ cppflags-$(CONFIG_LITHIUM) += -DFEATURE_AST cppflags-$(CONFIG_LITHIUM) += -DPEER_PROTECTED_ACCESS cppflags-$(CONFIG_LITHIUM) += -DSERIALIZE_QUEUE_SETUP cppflags-$(CONFIG_LITHIUM) += -DDP_RX_PKT_NO_PEER_DELIVER +cppflags-$(CONFIG_LITHIUM) += -DDP_RX_DROP_RAW_FRM cppflags-$(CONFIG_LITHIUM) += -DFEATURE_ALIGN_STATS_FROM_DP cppflags-$(CONFIG_LITHIUM) += -DDP_RX_SPECIAL_FRAME_NEED cppflags-$(CONFIG_LITHIUM) += -DFEATURE_STATS_EXT_V2 diff --git a/core/dp/txrx3.0/dp_fisa_rx.c b/core/dp/txrx3.0/dp_fisa_rx.c index bb8038b36997..cc0bb18cfbb0 100644 --- a/core/dp/txrx3.0/dp_fisa_rx.c +++ b/core/dp/txrx3.0/dp_fisa_rx.c @@ -475,8 +475,14 @@ dp_rx_get_fisa_flow(struct dp_rx_fst *fisa_hdl, struct dp_vdev *vdev, flow_idx_valid = is_flow_idx_valid(flow_invalid, flow_timeout); if (flow_idx_valid) { - dp_fisa_debug("flow_idx is valid 0x%x", flow_idx); - qdf_assert_always(flow_idx < fisa_hdl->max_entries); + /* If flow index is invalid, fail to get flow */ + if (qdf_unlikely(flow_idx >= fisa_hdl->max_entries)) { + dp_info("flow_idx is invalid 0x%x", flow_idx); + hal_rx_dump_pkt_tlvs(hal_soc_hdl, rx_tlv_hdr, + QDF_TRACE_LEVEL_INFO_HIGH); + DP_STATS_INC(fisa_hdl, invalid_flow_index, 1); + return NULL; + } sw_ft_entry = &sw_ft_base[flow_idx]; sw_ft_entry->vdev = vdev;