diff --git a/dp/wifi3.0/dp_htt.c b/dp/wifi3.0/dp_htt.c index b935111b6e..71760521c6 100644 --- a/dp/wifi3.0/dp_htt.c +++ b/dp/wifi3.0/dp_htt.c @@ -2201,24 +2201,8 @@ static void dp_process_ppdu_stats_user_common_tlv( peer_id, ppdu_info); ppdu_user_desc = &ppdu_desc->user[curr_user_index]; - if (peer_id == DP_SCAN_PEER_ID) { - ppdu_desc->vdev_id = - HTT_PPDU_STATS_USER_COMMON_TLV_VAP_ID_GET(*tag_buf); - vdev = - dp_get_vdev_from_soc_vdev_id_wifi3(pdev->soc, - ppdu_desc->vdev_id); - if (!vdev) - return; - qdf_mem_copy(ppdu_user_desc->mac_addr, vdev->mac_addr.raw, - QDF_MAC_ADDR_SIZE); - } else { - peer = dp_peer_find_by_id(pdev->soc, peer_id); - if (!peer) - return; - qdf_mem_copy(ppdu_user_desc->mac_addr, - peer->mac_addr.raw, QDF_MAC_ADDR_SIZE); - dp_peer_unref_del_find_by_id(peer); - } + ppdu_desc->vdev_id = + HTT_PPDU_STATS_USER_COMMON_TLV_VAP_ID_GET(*tag_buf); ppdu_user_desc->peer_id = peer_id; @@ -2257,6 +2241,39 @@ static void dp_process_ppdu_stats_user_common_tlv( HTT_PPDU_STATS_HOST_OPAQUE_COOKIE_GET(*tag_buf); ppdu_user_desc->is_ppdu_cookie_valid = 1; } + + /* returning earlier causes other feilds unpopulated */ + if (peer_id == DP_SCAN_PEER_ID) { + vdev = + dp_get_vdev_from_soc_vdev_id_wifi3(pdev->soc, + ppdu_desc->vdev_id); + if (!vdev) + return; + qdf_mem_copy(ppdu_user_desc->mac_addr, vdev->mac_addr.raw, + QDF_MAC_ADDR_SIZE); + } else { + peer = dp_peer_find_by_id(pdev->soc, peer_id); + if (!peer) { + /* + * fw sends peer_id which is about to removed but + * it was already removed in host. + * eg: for disassoc, fw send ppdu stats + * with peer id equal to previously associated + * peer's peer_id but it was removed + */ + vdev = + dp_get_vdev_from_soc_vdev_id_wifi3(pdev->soc, + ppdu_desc->vdev_id); + if (!vdev) + return; + qdf_mem_copy(ppdu_user_desc->mac_addr, + vdev->mac_addr.raw, QDF_MAC_ADDR_SIZE); + return; + } + qdf_mem_copy(ppdu_user_desc->mac_addr, + peer->mac_addr.raw, QDF_MAC_ADDR_SIZE); + dp_peer_unref_del_find_by_id(peer); + } }