|
@@ -10530,6 +10530,8 @@ dp_request_rx_hw_stats(struct cdp_soc_t *soc_hdl, uint8_t vdev_id)
|
|
QDF_STATUS status;
|
|
QDF_STATUS status;
|
|
struct dp_req_rx_hw_stats_t *rx_hw_stats;
|
|
struct dp_req_rx_hw_stats_t *rx_hw_stats;
|
|
int rx_stats_sent_cnt = 0;
|
|
int rx_stats_sent_cnt = 0;
|
|
|
|
+ uint32_t last_rx_mpdu_received;
|
|
|
|
+ uint32_t last_rx_mpdu_missed;
|
|
|
|
|
|
if (!vdev) {
|
|
if (!vdev) {
|
|
dp_err("vdev is null for vdev_id: %u", vdev_id);
|
|
dp_err("vdev is null for vdev_id: %u", vdev_id);
|
|
@@ -10553,6 +10555,12 @@ dp_request_rx_hw_stats(struct cdp_soc_t *soc_hdl, uint8_t vdev_id)
|
|
|
|
|
|
qdf_event_reset(&soc->rx_hw_stats_event);
|
|
qdf_event_reset(&soc->rx_hw_stats_event);
|
|
qdf_spin_lock_bh(&soc->rx_hw_stats_lock);
|
|
qdf_spin_lock_bh(&soc->rx_hw_stats_lock);
|
|
|
|
+ /* save the last soc cumulative stats and reset it to 0 */
|
|
|
|
+ last_rx_mpdu_received = soc->ext_stats.rx_mpdu_received;
|
|
|
|
+ last_rx_mpdu_missed = soc->ext_stats.rx_mpdu_missed;
|
|
|
|
+ soc->ext_stats.rx_mpdu_received = 0;
|
|
|
|
+ soc->ext_stats.rx_mpdu_missed = 0;
|
|
|
|
+
|
|
rx_stats_sent_cnt =
|
|
rx_stats_sent_cnt =
|
|
dp_peer_rxtid_stats(peer, dp_rx_hw_stats_cb, rx_hw_stats);
|
|
dp_peer_rxtid_stats(peer, dp_rx_hw_stats_cb, rx_hw_stats);
|
|
if (!rx_stats_sent_cnt) {
|
|
if (!rx_stats_sent_cnt) {
|
|
@@ -10576,6 +10584,12 @@ dp_request_rx_hw_stats(struct cdp_soc_t *soc_hdl, uint8_t vdev_id)
|
|
dp_info("rx hw stats event timeout");
|
|
dp_info("rx hw stats event timeout");
|
|
if (soc->is_last_stats_ctx_init)
|
|
if (soc->is_last_stats_ctx_init)
|
|
rx_hw_stats->is_query_timeout = true;
|
|
rx_hw_stats->is_query_timeout = true;
|
|
|
|
+ /**
|
|
|
|
+ * If query timeout happened, use the last saved stats
|
|
|
|
+ * for this time query.
|
|
|
|
+ */
|
|
|
|
+ soc->ext_stats.rx_mpdu_received = last_rx_mpdu_received;
|
|
|
|
+ soc->ext_stats.rx_mpdu_missed = last_rx_mpdu_missed;
|
|
}
|
|
}
|
|
qdf_spin_unlock_bh(&soc->rx_hw_stats_lock);
|
|
qdf_spin_unlock_bh(&soc->rx_hw_stats_lock);
|
|
dp_peer_unref_delete(peer);
|
|
dp_peer_unref_delete(peer);
|