wifi: ath12k: Avoid allocating rx_stats when ext_rx_stats is disabled
authorP Praneesh <praneesh.p@oss.qualcomm.com>
Wed, 9 Apr 2025 05:26:47 +0000 (10:56 +0530)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Thu, 17 Apr 2025 22:49:34 +0000 (15:49 -0700)
Currently, driver allocates the struct ath12k_rx_peer_stats for each
station regardless of whether ext_rx_stats is enabled. This structure
is populated by the monitor destination ring for both single-user and
multi-user scenarios when ext_rx_stats is enabled. However, when
ext_rx_stats is disabled, this allocation is unnecessary and results in
additional memory consumption.

To address this issue, allocate the struct ath12k_rx_peer_stats only when
ext_rx_stats is enabled through debugfs. This change prevents unnecessary
memory allocation. Additionally, ensure that the station dump RSSI is
updated irrespective of the ext_rx_stats enablement.

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: P Praneesh <praneesh.p@oss.qualcomm.com>
Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com>
Link: https://patch.msgid.link/20250409052647.81955-1-praneesh.p@oss.qualcomm.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath12k/dp_mon.c
drivers/net/wireless/ath/ath12k/mac.c

index 210fda4..1711731 100644 (file)
@@ -3205,11 +3205,10 @@ static void ath12k_dp_mon_rx_update_peer_su_stats(struct ath12k *ar,
        struct ath12k_rx_peer_stats *rx_stats = arsta->rx_stats;
        u32 num_msdu;
 
-       if (!rx_stats)
-               return;
-
        arsta->rssi_comb = ppdu_info->rssi_comb;
        ewma_avg_rssi_add(&arsta->avg_rssi, ppdu_info->rssi_comb);
+       if (!rx_stats)
+               return;
 
        num_msdu = ppdu_info->tcp_msdu_count + ppdu_info->tcp_ack_msdu_count +
                   ppdu_info->udp_msdu_count + ppdu_info->other_msdu_count;
@@ -3382,14 +3381,12 @@ ath12k_dp_mon_rx_update_user_stats(struct ath12k *ar,
 
        ahsta = ath12k_sta_to_ahsta(peer->sta);
        arsta = &ahsta->deflink;
+       arsta->rssi_comb = ppdu_info->rssi_comb;
+       ewma_avg_rssi_add(&arsta->avg_rssi, ppdu_info->rssi_comb);
        rx_stats = arsta->rx_stats;
-
        if (!rx_stats)
                return;
 
-       arsta->rssi_comb = ppdu_info->rssi_comb;
-       ewma_avg_rssi_add(&arsta->avg_rssi, ppdu_info->rssi_comb);
-
        num_msdu = user_stats->tcp_msdu_count + user_stats->tcp_ack_msdu_count +
                   user_stats->udp_msdu_count + user_stats->other_msdu_count;
 
index 6e4619e..f83783b 100644 (file)
@@ -5620,7 +5620,7 @@ static int ath12k_mac_station_add(struct ath12k *ar,
                goto exit;
        }
 
-       if (!arsta->rx_stats) {
+       if (ath12k_debugfs_is_extd_rx_stats_enabled(ar) && !arsta->rx_stats) {
                arsta->rx_stats = kzalloc(sizeof(*arsta->rx_stats), GFP_KERNEL);
                if (!arsta->rx_stats) {
                        ret = -ENOMEM;