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
This commit is contained in:

committed by
snandini

parent
afac78b33d
commit
a718007f03
@@ -342,10 +342,11 @@ int dp_tx_delete_flow_pool(struct dp_soc *soc, struct dp_tx_desc_pool_s *pool,
|
||||
pool->status = FLOW_POOL_INVALID;
|
||||
qdf_spin_unlock_bh(&pool->flow_pool_lock);
|
||||
/* Reset TX desc associated to this Vdev as NULL */
|
||||
vdev = dp_get_vdev_from_soc_vdev_id_wifi3(soc,
|
||||
pool->flow_pool_id);
|
||||
if (vdev)
|
||||
vdev = dp_vdev_get_ref_by_id(soc, pool->flow_pool_id);
|
||||
if (vdev) {
|
||||
dp_tx_desc_flush(vdev->pdev, vdev, false);
|
||||
dp_vdev_unref_delete(soc, vdev);
|
||||
}
|
||||
dp_err("avail desc less than pool size");
|
||||
return -EAGAIN;
|
||||
}
|
||||
@@ -371,7 +372,7 @@ static void dp_tx_flow_pool_vdev_map(struct dp_pdev *pdev,
|
||||
struct dp_vdev *vdev;
|
||||
struct dp_soc *soc = pdev->soc;
|
||||
|
||||
vdev = dp_get_vdev_from_soc_vdev_id_wifi3(soc, vdev_id);
|
||||
vdev = dp_vdev_get_ref_by_id(soc, vdev_id);
|
||||
if (!vdev) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||
"%s: invalid vdev_id %d",
|
||||
@@ -384,6 +385,7 @@ static void dp_tx_flow_pool_vdev_map(struct dp_pdev *pdev,
|
||||
pool->pool_owner_ctx = soc;
|
||||
pool->flow_pool_id = vdev_id;
|
||||
qdf_spin_unlock_bh(&pool->flow_pool_lock);
|
||||
dp_vdev_unref_delete(soc, vdev);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -400,7 +402,7 @@ static void dp_tx_flow_pool_vdev_unmap(struct dp_pdev *pdev,
|
||||
struct dp_vdev *vdev;
|
||||
struct dp_soc *soc = pdev->soc;
|
||||
|
||||
vdev = dp_get_vdev_from_soc_vdev_id_wifi3(soc, vdev_id);
|
||||
vdev = dp_vdev_get_ref_by_id(soc, vdev_id);
|
||||
if (!vdev) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||
"%s: invalid vdev_id %d",
|
||||
@@ -409,6 +411,7 @@ static void dp_tx_flow_pool_vdev_unmap(struct dp_pdev *pdev,
|
||||
}
|
||||
|
||||
vdev->pool = NULL;
|
||||
dp_vdev_unref_delete(soc, vdev);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user