Loading drivers/media/platform/msm/vidc/msm_cvp.c +8 −41 Original line number Diff line number Diff line Loading @@ -518,62 +518,29 @@ int msm_cvp_ctrl_init(struct msm_vidc_inst *inst, int msm_cvp_inst_deinit(struct msm_vidc_inst *inst) { int rc = 0; struct hfi_device *hdev; struct msm_vidc_cvp_buffer *cbuf; struct vidc_unregister_buffer vbuf; struct msm_vidc_cvp_buffer *cbuf, *temp; if (!inst || !inst->core) { dprintk(VIDC_ERR, "%s: invalid params\n", __func__); return -EINVAL; } hdev = inst->core->device; dprintk(VIDC_DBG, "%s: inst %pK (%#x)\n", __func__, inst, hash32_ptr(inst->session)); do { mutex_lock(&inst->cvpbufs.lock); if (list_empty(&inst->cvpbufs.list)) { mutex_unlock(&inst->cvpbufs.lock); break; } cbuf = list_first_entry(&inst->cvpbufs.list, struct msm_vidc_cvp_buffer, list); mutex_unlock(&inst->cvpbufs.lock); rc = msm_comm_try_state(inst, MSM_VIDC_CLOSE_DONE); if (rc) dprintk(VIDC_ERR, "%s: close failed\n", __func__); mutex_lock(&inst->cvpbufs.lock); list_for_each_entry_safe(cbuf, temp, &inst->cvpbufs.list, list) { print_cvp_buffer(VIDC_ERR, "unregistered", inst, cbuf); memset(&vbuf, 0, sizeof(struct vidc_unregister_buffer)); vbuf.index = cbuf->buf.index; vbuf.type = get_hal_buftype(__func__, cbuf->buf.type); vbuf.size = cbuf->buf.size; vbuf.device_addr = cbuf->smem.device_addr; vbuf.client_data = cbuf->smem.device_addr; vbuf.response_required = true; rc = call_hfi_op(hdev, session_unregister_buffer, (void *)inst->session, &vbuf); if (rc) { dprintk(VIDC_ERR, "%s: unregbuf failed\n", __func__); } else { rc = wait_for_completion_timeout( &inst->completions[ SESSION_MSG_INDEX( HAL_SESSION_UNREGISTER_BUFFER_DONE)], msecs_to_jiffies( inst->core->resources.msm_vidc_hw_rsp_timeout)); if (!rc) dprintk(VIDC_ERR, "%s: wait timedout for unregbuf done\n", __func__); } rc = msm_smem_unmap_dma_buf(inst, &cbuf->smem); if (rc) dprintk(VIDC_ERR, "%s: unmap failed\n", __func__); mutex_lock(&inst->cvpbufs.lock); list_del(&cbuf->list); mutex_unlock(&inst->cvpbufs.lock); kfree(cbuf); cbuf = NULL; } while (1); } mutex_unlock(&inst->cvpbufs.lock); inst->clk_data.min_freq = 0; inst->clk_data.ddr_bw = 0; Loading Loading
drivers/media/platform/msm/vidc/msm_cvp.c +8 −41 Original line number Diff line number Diff line Loading @@ -518,62 +518,29 @@ int msm_cvp_ctrl_init(struct msm_vidc_inst *inst, int msm_cvp_inst_deinit(struct msm_vidc_inst *inst) { int rc = 0; struct hfi_device *hdev; struct msm_vidc_cvp_buffer *cbuf; struct vidc_unregister_buffer vbuf; struct msm_vidc_cvp_buffer *cbuf, *temp; if (!inst || !inst->core) { dprintk(VIDC_ERR, "%s: invalid params\n", __func__); return -EINVAL; } hdev = inst->core->device; dprintk(VIDC_DBG, "%s: inst %pK (%#x)\n", __func__, inst, hash32_ptr(inst->session)); do { mutex_lock(&inst->cvpbufs.lock); if (list_empty(&inst->cvpbufs.list)) { mutex_unlock(&inst->cvpbufs.lock); break; } cbuf = list_first_entry(&inst->cvpbufs.list, struct msm_vidc_cvp_buffer, list); mutex_unlock(&inst->cvpbufs.lock); rc = msm_comm_try_state(inst, MSM_VIDC_CLOSE_DONE); if (rc) dprintk(VIDC_ERR, "%s: close failed\n", __func__); mutex_lock(&inst->cvpbufs.lock); list_for_each_entry_safe(cbuf, temp, &inst->cvpbufs.list, list) { print_cvp_buffer(VIDC_ERR, "unregistered", inst, cbuf); memset(&vbuf, 0, sizeof(struct vidc_unregister_buffer)); vbuf.index = cbuf->buf.index; vbuf.type = get_hal_buftype(__func__, cbuf->buf.type); vbuf.size = cbuf->buf.size; vbuf.device_addr = cbuf->smem.device_addr; vbuf.client_data = cbuf->smem.device_addr; vbuf.response_required = true; rc = call_hfi_op(hdev, session_unregister_buffer, (void *)inst->session, &vbuf); if (rc) { dprintk(VIDC_ERR, "%s: unregbuf failed\n", __func__); } else { rc = wait_for_completion_timeout( &inst->completions[ SESSION_MSG_INDEX( HAL_SESSION_UNREGISTER_BUFFER_DONE)], msecs_to_jiffies( inst->core->resources.msm_vidc_hw_rsp_timeout)); if (!rc) dprintk(VIDC_ERR, "%s: wait timedout for unregbuf done\n", __func__); } rc = msm_smem_unmap_dma_buf(inst, &cbuf->smem); if (rc) dprintk(VIDC_ERR, "%s: unmap failed\n", __func__); mutex_lock(&inst->cvpbufs.lock); list_del(&cbuf->list); mutex_unlock(&inst->cvpbufs.lock); kfree(cbuf); cbuf = NULL; } while (1); } mutex_unlock(&inst->cvpbufs.lock); inst->clk_data.min_freq = 0; inst->clk_data.ddr_bw = 0; Loading