From b72c0f6d99cd02d9631069cf67d5ccf764ad1330 Mon Sep 17 00:00:00 2001 From: Yu Tian Date: Mon, 23 Oct 2023 19:25:32 -0700 Subject: [PATCH] qcacld-3.0: Change ICMP req mark to FW logic for TX side If ICMP is a fragment frame, the first fragment is routed to FW. Other parts are routed to HW directly. This will lead fragment out of order and some Network stack can't reassemble it. This change is aimed to keep the ICMP notify FW logic, but route the last fragment to FW, then the order can be kept. CRs-Fixed: 3641824 Change-Id: If3e83943126a974d79f18824ff66b209cc4edd39 --- components/dp/core/src/wlan_dp_txrx.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/components/dp/core/src/wlan_dp_txrx.c b/components/dp/core/src/wlan_dp_txrx.c index c0a2904754..e4f1ce208a 100644 --- a/components/dp/core/src/wlan_dp_txrx.c +++ b/components/dp/core/src/wlan_dp_txrx.c @@ -529,6 +529,13 @@ static void dp_mark_icmp_req_to_fw(struct wlan_dp_psoc_context *dp_ctx, if (time_interval_ms == WLAN_CFG_ICMP_REQ_TO_FW_MARK_ALL) QDF_NBUF_CB_TX_PACKET_TO_FW(nbuf) = 1; + /* For fragment IPV4 ICMP frames + * only mark last segment once to FW + */ + if (qdf_nbuf_is_ipv4_pkt(nbuf) && + qdf_nbuf_is_ipv4_fragment(nbuf)) + return; + curr_time = qdf_get_log_timestamp(); time_delta = curr_time - prev_marked_icmp_time; if (time_delta >= (time_interval_ms *