msm: eva: enhance DSP session resource management
Improve debugability and error handling in future. Change-Id: I4f116e106f243143f4f62eb28fbf338e219018c6 Signed-off-by: George Shen <sqiao@codeaurora.org>
This commit is contained in:
@@ -1011,17 +1011,30 @@ int msm_cvp_session_deinit_buffers(struct msm_cvp_inst *inst)
|
||||
mutex_unlock(&inst->dma_cache.lock);
|
||||
|
||||
mutex_lock(&inst->cvpdspbufs.lock);
|
||||
list_for_each_entry_safe(cbuf, dummy, &inst->cvpdspbufs.list,
|
||||
list) {
|
||||
list_for_each_entry_safe(cbuf, dummy, &inst->cvpdspbufs.list, list) {
|
||||
print_internal_buffer(CVP_MEM, "remove dspbufs", inst, cbuf);
|
||||
rc = cvp_dsp_deregister_buffer(hash32_ptr(session),
|
||||
cbuf->fd, cbuf->smem->dma_buf->size, cbuf->size,
|
||||
cbuf->offset, cbuf->index,
|
||||
(uint32_t)cbuf->smem->device_addr);
|
||||
if (rc)
|
||||
dprintk(CVP_ERR,
|
||||
if (cbuf->ownership == CLIENT) {
|
||||
rc = cvp_dsp_deregister_buffer(hash32_ptr(session),
|
||||
cbuf->fd, cbuf->smem->dma_buf->size, cbuf->size,
|
||||
cbuf->offset, cbuf->index,
|
||||
(uint32_t)cbuf->smem->device_addr);
|
||||
if (rc)
|
||||
dprintk(CVP_ERR,
|
||||
"%s: failed dsp deregistration fd=%d rc=%d",
|
||||
__func__, cbuf->fd, rc);
|
||||
} else if (cbuf->ownership == DSP) {
|
||||
rc = cvp_dsp_fastrpc_unmap(inst->process_id, cbuf);
|
||||
if (rc)
|
||||
dprintk(CVP_ERR,
|
||||
"%s: failed to unmap buf from DSP\n",
|
||||
__func__);
|
||||
|
||||
rc = cvp_release_dsp_buffers(inst, cbuf);
|
||||
if (rc)
|
||||
dprintk(CVP_ERR,
|
||||
"%s Fail to free buffer 0x%x\n",
|
||||
__func__, rc);
|
||||
}
|
||||
|
||||
msm_cvp_unmap_smem(inst, cbuf->smem, "unmap dsp");
|
||||
msm_cvp_smem_put_dma_buf(cbuf->smem->dma_buf);
|
||||
@@ -1232,7 +1245,7 @@ int cvp_allocate_dsp_bufs(struct msm_cvp_inst *inst,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
dprintk(CVP_ERR, "%s smem_flags 0x%x\n", __func__, smem_flags);
|
||||
dprintk(CVP_MEM, "%s smem_flags 0x%x\n", __func__, smem_flags);
|
||||
buf->smem = kmem_cache_zalloc(cvp_driver->smem_cache, GFP_KERNEL);
|
||||
if (!buf->smem) {
|
||||
dprintk(CVP_ERR, "%s Out of memory\n", __func__);
|
||||
@@ -1246,11 +1259,11 @@ int cvp_allocate_dsp_bufs(struct msm_cvp_inst *inst,
|
||||
goto err_no_mem;
|
||||
}
|
||||
|
||||
dprintk(CVP_ERR, "%s dma_buf %pK\n", __func__, buf->smem->dma_buf);
|
||||
dprintk(CVP_MEM, "%s dma_buf %pK\n", __func__, buf->smem->dma_buf);
|
||||
|
||||
buf->size = buf->smem->size;
|
||||
buf->type = HFI_BUFFER_INTERNAL_PERSIST_1;
|
||||
buf->ownership = CLIENT;
|
||||
buf->ownership = DSP;
|
||||
|
||||
return rc;
|
||||
|
||||
@@ -1282,13 +1295,18 @@ int cvp_release_dsp_buffers(struct msm_cvp_inst *inst,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (buf->ownership == CLIENT) {
|
||||
if (buf->ownership == DSP) {
|
||||
dprintk(CVP_MEM,
|
||||
"%s: %x : fd %x %s size %d",
|
||||
"free dsp buf", hash32_ptr(inst->session), buf->fd,
|
||||
"%s: %x : fd %x %s size %d",
|
||||
__func__, hash32_ptr(inst->session), buf->fd,
|
||||
smem->dma_buf->name, buf->size);
|
||||
msm_cvp_smem_free(smem);
|
||||
kmem_cache_free(cvp_driver->smem_cache, smem);
|
||||
} else {
|
||||
dprintk(CVP_ERR,
|
||||
"%s: wrong owner %d %x : fd %x %s size %d",
|
||||
__func__, buf->ownership, hash32_ptr(inst->session),
|
||||
buf->fd, smem->dma_buf->name, buf->size);
|
||||
}
|
||||
|
||||
return rc;
|
||||
|
Reference in New Issue
Block a user