]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: ath11k: consistently use ath11k_mac_get_fw_stats()
authorBaochen Qiang <quic_bqiang@quicinc.com>
Thu, 20 Feb 2025 08:24:48 +0000 (16:24 +0800)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Sat, 7 Jun 2025 14:36:03 +0000 (07:36 -0700)
Currently to get firmware stats, ath11k_mac_op_get_txpower() calls
ath11k_fw_stats_request() and ath11k_mac_op_sta_statistics() calls
ath11k_mac_get_fw_stats(). Those two helpers are basically doing
the same, except for:

1. ath11k_mac_get_fw_stats() verifies ar->state inside itself.
2. ath11k_mac_get_fw_stats() calls ath11k_mac_fw_stats_request()
   which then calls ath11k_mac_fw_stats_reset() to free pdev/vdev
   stats whereas only pdev stats are freed by ath11k_fw_stats_request().
3. ath11k_mac_get_fw_stats() waits for ar->fw_stats_complete and
   ar->fw_stats_done, whereas ath11k_fw_stats_request() only waits for
   ar->fw_stats_complete.

Change to call ath11k_mac_get_fw_stats() in ath11k_mac_op_get_txpower().
This is valid because:

1. ath11k_mac_op_get_txpower() also has the same request on ar->state.
2. it is harmless to call ath11k_fw_stats_vdevs_free() since
   ar->fw_stats.vdevs should be empty and there should be no one
   expecting it at that time.
3. ath11k_mac_op_get_txpower() only needs pdev stats. For pdev stats,
   ar->fw_stats_done is set to true whenever ar->fw_stats_complete is
   set to true in ath11k_update_stats_event(). So additional wait on
   ar->fw_stats_done does not wast any time.

Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.37

Signed-off-by: Baochen Qiang <quic_bqiang@quicinc.com>
Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com>
Link: https://patch.msgid.link/20250220082448.31039-8-quic_bqiang@quicinc.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath11k/mac.c

index 18e1d78cac45e0e14a329a935243fd8b38c7e89b..13301ca317a532b86cc6003d33306672307ea193 100644 (file)
@@ -9457,40 +9457,6 @@ exit:
        return ret;
 }
 
-static int ath11k_fw_stats_request(struct ath11k *ar,
-                                  struct stats_request_params *req_param)
-{
-       struct ath11k_base *ab = ar->ab;
-       unsigned long time_left;
-       int ret;
-
-       lockdep_assert_held(&ar->conf_mutex);
-
-       spin_lock_bh(&ar->data_lock);
-       ath11k_fw_stats_pdevs_free(&ar->fw_stats.pdevs);
-       ar->fw_stats.num_vdev_recvd = 0;
-       ar->fw_stats.num_bcn_recvd = 0;
-       spin_unlock_bh(&ar->data_lock);
-
-       reinit_completion(&ar->fw_stats_complete);
-       reinit_completion(&ar->fw_stats_done);
-
-       ret = ath11k_wmi_send_stats_request_cmd(ar, req_param);
-       if (ret) {
-               ath11k_warn(ab, "could not request fw stats (%d)\n",
-                           ret);
-               return ret;
-       }
-
-       time_left = wait_for_completion_timeout(&ar->fw_stats_complete,
-                                               1 * HZ);
-
-       if (!time_left)
-               return -ETIMEDOUT;
-
-       return 0;
-}
-
 static int ath11k_mac_op_get_txpower(struct ieee80211_hw *hw,
                                     struct ieee80211_vif *vif,
                                     unsigned int link_id,
@@ -9498,7 +9464,6 @@ static int ath11k_mac_op_get_txpower(struct ieee80211_hw *hw,
 {
        struct ath11k *ar = hw->priv;
        struct ath11k_base *ab = ar->ab;
-       struct stats_request_params req_param = {0};
        struct ath11k_fw_stats_pdev *pdev;
        int ret;
 
@@ -9510,9 +9475,6 @@ static int ath11k_mac_op_get_txpower(struct ieee80211_hw *hw,
         */
        mutex_lock(&ar->conf_mutex);
 
-       if (ar->state != ATH11K_STATE_ON)
-               goto err_fallback;
-
        /* Firmware doesn't provide Tx power during CAC hence no need to fetch
         * the stats.
         */
@@ -9521,10 +9483,8 @@ static int ath11k_mac_op_get_txpower(struct ieee80211_hw *hw,
                return -EAGAIN;
        }
 
-       req_param.pdev_id = ar->pdev->pdev_id;
-       req_param.stats_id = WMI_REQUEST_PDEV_STAT;
-
-       ret = ath11k_fw_stats_request(ar, &req_param);
+       ret = ath11k_mac_get_fw_stats(ar, ar->pdev->pdev_id, 0,
+                                     WMI_REQUEST_PDEV_STAT);
        if (ret) {
                ath11k_warn(ab, "failed to request fw pdev stats: %d\n", ret);
                goto err_fallback;