qcacmn: increment vdev refcount for search by id

Add new API dp_vdev_get_ref_by_id() which will return vdev
pointer by holding a reference. Caller of this API has
to ensure that this reference is released by calling
dp_vdev_unref_delete() API

New lock soc->vdev_map_lock is introduced to protect
vdev id to object array

Change-Id: I883e328932e35ef31254125492dbae20cebe0e00
这个提交包含在:
Chaithanya Garrepalli
2020-08-12 18:07:51 +05:30
提交者 snandini
父节点 afac78b33d
当前提交 a718007f03
修改 11 个文件,包含 468 行新增289 行删除

查看文件

@@ -2414,13 +2414,12 @@ static void dp_process_ppdu_stats_user_common_tlv(
/* 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);
vdev = dp_vdev_get_ref_by_id(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);
dp_vdev_unref_delete(pdev->soc, vdev);
} else {
peer = dp_peer_get_ref_by_id(pdev->soc, peer_id,
DP_MOD_ID_TX_PPDU_STATS);
@@ -2432,13 +2431,13 @@ static void dp_process_ppdu_stats_user_common_tlv(
* 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);
vdev = dp_vdev_get_ref_by_id(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);
dp_vdev_unref_delete(pdev->soc, vdev);
return;
}
qdf_mem_copy(ppdu_user_desc->mac_addr,
@@ -2478,11 +2477,10 @@ static void dp_process_ppdu_stats_user_rate_tlv(struct dp_pdev *pdev,
ppdu_user_desc = &ppdu_desc->user[curr_user_index];
ppdu_user_desc->tlv_bitmap |= (1 << tlv_type);
if (peer_id == DP_SCAN_PEER_ID) {
vdev =
dp_get_vdev_from_soc_vdev_id_wifi3(pdev->soc,
ppdu_desc->vdev_id);
vdev = dp_vdev_get_ref_by_id(pdev->soc, ppdu_desc->vdev_id);
if (!vdev)
return;
dp_vdev_unref_delete(pdev->soc, vdev);
}
ppdu_user_desc->peer_id = peer_id;