ath11k: fix resource unavailability for htt stats after peer stats display
authorSowmiya Sree Elavalagan <ssreeela@codeaurora.org>
Mon, 4 May 2020 11:45:55 +0000 (17:15 +0530)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 5 May 2020 07:37:54 +0000 (10:37 +0300)
htt stats are not working after htt peer stats display
and also after htt peer stats reset. Trying to dump htt
stats shows "Resource temporarily unavailable".
This is because of "ar->debug.htt_stats.stats_req" member is being
consecutively used for all htt stats without being reset
during the previous usage. Hence assigning NULL to this member
after freeing the allocated memory fixes the issue.

console logs below:
# echo 9 >/sys/kernel/debug/ath11k/ipq8074/mac1/htt_stats_type
# cat /sys/kernel/debug/ath11k/ipq8074/mac1/htt_stats_type
9
# cat /sys/kernel/debug/ath11k/ipq8074/mac1/htt_stats
cat: can't open '/sys/kernel/debug/ath11k/ipq8074/mac1/htt_stats'
: Resource temporarily unavailable

Signed-off-by: Sowmiya Sree Elavalagan <ssreeela@codeaurora.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/1588592755-10427-1-git-send-email-ssreeela@codeaurora.org
drivers/net/wireless/ath/ath11k/debugfs_sta.c

index 68963cfc5097f90a7e166323f612d60b1d5776d5..46eee5178f66749af990cdd1f36648a45561ac2d 100644 (file)
@@ -435,13 +435,22 @@ ath11k_dbg_sta_open_htt_peer_stats(struct inode *inode, struct file *file)
        return 0;
 out:
        vfree(stats_req);
+       ar->debug.htt_stats.stats_req = NULL;
        return ret;
 }
 
 static int
 ath11k_dbg_sta_release_htt_peer_stats(struct inode *inode, struct file *file)
 {
+       struct ieee80211_sta *sta = inode->i_private;
+       struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
+       struct ath11k *ar = arsta->arvif->ar;
+
+       mutex_lock(&ar->conf_mutex);
        vfree(file->private_data);
+       ar->debug.htt_stats.stats_req = NULL;
+       mutex_unlock(&ar->conf_mutex);
+
        return 0;
 }