Przeglądaj źródła

qcacld-3.0: compare FSE metadata when REO ID mismatches

When an existing flow is evicted, there is chance that the
REO ID of the newly added flow and the inflight packets of the
evicted flow mismatch. In such cases, check the FSE metadata of
the flow with that of the packet instead of triggering a BUG().

Change-Id: I7412055101fb72f7b28db615672e88837d79e8d3
CRs-Fixed: 2968500
Manikanta Pubbisetty 3 lat temu
rodzic
commit
ed4167e111
1 zmienionych plików z 8 dodań i 1 usunięć
  1. 8 1
      core/dp/txrx3.0/dp_fisa_rx.c

+ 8 - 1
core/dp/txrx3.0/dp_fisa_rx.c

@@ -1658,6 +1658,7 @@ static int dp_add_nbuf_to_fisa_flow(struct dp_rx_fst *fisa_hdl,
 	uint32_t hal_aggr_count;
 	uint8_t napi_id = QDF_NBUF_CB_RX_CTX_ID(nbuf);
 	uint8_t reo_id = fisa_flow->napi_id;
+	uint32_t fse_metadata;
 
 	dump_tlvs(hal_soc_hdl, rx_tlv_hdr, QDF_TRACE_LEVEL_INFO_HIGH);
 	dp_fisa_debug("nbuf: %pK nbuf->next:%pK nbuf->data:%pK len %d data_len %d",
@@ -1668,10 +1669,16 @@ static int dp_add_nbuf_to_fisa_flow(struct dp_rx_fst *fisa_hdl,
 	 * the one configured.
 	 */
 	if (qdf_unlikely(fisa_flow->napi_id != napi_id)) {
+		fse_metadata =
+			hal_rx_msdu_fse_metadata_get(hal_soc_hdl, rx_tlv_hdr);
+		if (fisa_hdl->del_flow_count &&
+		    fse_metadata != fisa_flow->metadata)
+			return FISA_AGGR_NOT_ELIGIBLE;
+
 		dp_err("REO id mismatch flow: %pK napi_id: %u nbuf: %pK reo_id: %u",
 		       fisa_flow, fisa_flow->napi_id, nbuf, napi_id);
-		QDF_BUG(0);
 		DP_STATS_INC(fisa_hdl, reo_mismatch, 1);
+		QDF_BUG(0);
 		return FISA_AGGR_NOT_ELIGIBLE;
 	}