wifi: ath12k: fix incorrect TID updation in DP monitor status path
authorKarthikeyan Periyasamy <quic_periyasa@quicinc.com>
Tue, 17 Dec 2024 08:45:08 +0000 (14:15 +0530)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Thu, 19 Dec 2024 17:41:05 +0000 (09:41 -0800)
Currently, an incorrect TID value gets populated in the monitor status Rx
path due to an incorrect bitmap value given to the ffs() built-in helper
function. Therefore, avoid the decrement and directly provide the TID
bitmap to the ffs() built-in helper function for the correct TID update
in the monitor status Rx path.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3

Signed-off-by: Karthikeyan Periyasamy <quic_periyasa@quicinc.com>
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
Acked-by: Kalle Valo <kvalo@kernel.org>
Link: https://patch.msgid.link/20241217084511.2981515-6-quic_periyasa@quicinc.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath12k/dp_mon.c

index c6cc4a1a5230492ffb9e91d45cf43df4af73602c..d9b0087a7a25a60ee014cba99784233b2a9f8b1e 100644 (file)
@@ -617,6 +617,7 @@ ath12k_dp_mon_rx_parse_status_tlv(struct ath12k_base *ab,
        case HAL_RX_PPDU_END_USER_STATS: {
                struct hal_rx_ppdu_end_user_stats *eu_stats =
                        (struct hal_rx_ppdu_end_user_stats *)tlv_data;
+               u32 tid_bitmap;
 
                info[0] = __le32_to_cpu(eu_stats->info0);
                info[1] = __le32_to_cpu(eu_stats->info1);
@@ -629,10 +630,9 @@ ath12k_dp_mon_rx_parse_status_tlv(struct ath12k_base *ab,
                        u32_get_bits(info[2], HAL_RX_PPDU_END_USER_STATS_INFO2_AST_INDEX);
                ppdu_info->fc_valid =
                        u32_get_bits(info[1], HAL_RX_PPDU_END_USER_STATS_INFO1_FC_VALID);
-               ppdu_info->tid =
-                       ffs(u32_get_bits(info[6],
-                                        HAL_RX_PPDU_END_USER_STATS_INFO6_TID_BITMAP)
-                                        - 1);
+               tid_bitmap = u32_get_bits(info[6],
+                                         HAL_RX_PPDU_END_USER_STATS_INFO6_TID_BITMAP);
+               ppdu_info->tid = ffs(tid_bitmap) - 1;
                ppdu_info->tcp_msdu_count =
                        u32_get_bits(info[4],
                                     HAL_RX_PPDU_END_USER_STATS_INFO4_TCP_MSDU_CNT);