diff --git a/dp/wifi3.0/dp_htt.c b/dp/wifi3.0/dp_htt.c index 1dcb930243..b05297a423 100644 --- a/dp/wifi3.0/dp_htt.c +++ b/dp/wifi3.0/dp_htt.c @@ -1885,6 +1885,8 @@ static void dp_process_ppdu_stats_user_rate_tlv(struct dp_pdev *pdev, 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, DP_MAC_ADDR_LEN); } else { diff --git a/dp/wifi3.0/dp_peer.h b/dp/wifi3.0/dp_peer.h index d310ea9d35..2bb1479dc7 100644 --- a/dp/wifi3.0/dp_peer.h +++ b/dp/wifi3.0/dp_peer.h @@ -173,15 +173,18 @@ dp_get_vdev_from_soc_vdev_id_wifi3(struct dp_soc *soc, for (i = 0; i < MAX_PDEV_CNT && soc->pdev_list[i]; i++) { pdev = soc->pdev_list[i]; + qdf_spin_lock_bh(&pdev->vdev_list_lock); TAILQ_FOREACH(vdev, &pdev->vdev_list, vdev_list_elem) { if (vdev->vdev_id == vdev_id) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO, FL("Found vdev 0x%pK on pdev %d"), vdev, i); + qdf_spin_unlock_bh(&pdev->vdev_list_lock); return vdev; } } + qdf_spin_unlock_bh(&pdev->vdev_list_lock); } return NULL;