msm: eva: Fix fd reuse problem.

Fix KW issue and fd reuse issue in persistent buffer mapping.

Change-Id: I9d971abe14460ac57d9f48ee086f97abec1b6f2b
Signed-off-by: George Shen <quic_sqiao@quicinc.com>
这个提交包含在:
George Shen
2022-07-19 09:56:37 -07:00
父节点 1cb056362c
当前提交 04232ceea4
修改 4 个文件,包含 29 行新增12 行删除

查看文件

@@ -1235,26 +1235,38 @@ static u32 msm_cvp_map_user_persist_buf(struct msm_cvp_inst *inst,
struct msm_cvp_smem *smem = NULL;
struct list_head *ptr, *next;
struct cvp_internal_buf *pbuf;
struct dma_buf *dma_buf;
if (!inst) {
dprintk(CVP_ERR, "%s: invalid params\n", __func__);
return -EINVAL;
}
dma_buf = msm_cvp_smem_get_dma_buf(buf->fd);
if (!dma_buf)
return -EINVAL;
mutex_lock(&inst->persistbufs.lock);
list_for_each_safe(ptr, next, &inst->persistbufs.list) {
pbuf = list_entry(ptr, struct cvp_internal_buf, list);
if (buf->fd == pbuf->fd) {
if (dma_buf == pbuf->smem->dma_buf) {
pbuf->size =
(pbuf->size >= buf->size) ?
pbuf->size : buf->size;
iova = pbuf->smem->device_addr + buf->offset;
mutex_unlock(&inst->persistbufs.lock);
atomic_inc(&pbuf->smem->refcount);
dma_buf_put(dma_buf);
dprintk(CVP_MEM,
"map persist Reuse fd %d, dma_buf %#llx\n",
pbuf->fd, pbuf->smem->dma_buf);
return iova;
}
}
mutex_unlock(&inst->persistbufs.lock);
dma_buf_put(dma_buf);
pbuf = kmem_cache_zalloc(cvp_driver->buf_cache, GFP_KERNEL);
if (!pbuf) {
dprintk(CVP_ERR, "%s failed to allocate kmem obj\n",