Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4f92b1b6 authored by Jinwei Chen's avatar Jinwei Chen
Browse files

qcacld-3.0: Bypass FISA if reo_destination_indication mismatch

For wow or active offload mode, FW will re-inject some RX frames
to REO with reo_destination_indication 1 (REO2SW1) to REO entrance
ring, but the original reo_destination_indication in RX buffer pkt_tlv
is 6 (REO2FW) or other flow steering value (>=16), then REO2SW ring
mismatch will happen that break FISA function in host.
Bypass FISA if reo_destination_indication mismatch between REO ring
descriptor and pkt TLVS.

Change-Id: I8736b8a96513c2e49fe41fb460f81cb0ef01ed01
CRs-Fixed: 2807461
parent 17c1162d
Loading
Loading
Loading
Loading
+7 −10
Original line number Diff line number Diff line
@@ -470,18 +470,15 @@ dp_rx_get_fisa_flow(struct dp_rx_fst *fisa_hdl, struct dp_vdev *vdev,
		return sw_ft_entry;

	rx_tlv_hdr = qdf_nbuf_data(nbuf);
	/*
	 * Get reo_destination_indication from RX_PKT_TLV-->msdu_end,
	 * if reo_destination_indication == 6, it means this frame is
	 * reinjected by FW offload module, these frames should not go to FISA
	 * since REO2SW1 will be selected by FW offload module. If same flow
	 * frames hash select other REO2SW rings, same flow UDP frames will go
	 * to different REO2SW ring.
	 */
	hal_rx_msdu_get_reo_destination_indication(hal_soc_hdl, rx_tlv_hdr,
						   &reo_destination_indication);

	if (qdf_unlikely(reo_destination_indication == REO_DESTINATION_FW))
	/*
	 * Compare reo_destination_indication between reo ring descriptor
	 * and rx_pkt_tlvs, if they are different, then likely these kind
	 * of frames re-injected by FW or touched by other module already,
	 * skip FISA to avoid REO2SW ring mismatch issue for same flow.
	 */
	if (reo_destination_indication != qdf_nbuf_get_rx_reo_dest_ind(nbuf))
		return sw_ft_entry;

	hal_rx_msdu_get_flow_params(hal_soc_hdl, rx_tlv_hdr, &flow_invalid,