From 54d791bc2992c8e811cdfa098b68c80aade143ea Mon Sep 17 00:00:00 2001 From: George Shen Date: Fri, 15 May 2020 15:48:02 -0700 Subject: [PATCH] msm: cvp: Avoid sending DSP HFI buf twice Second buffer sending may crash DSP. Change-Id: I67b4d293aa4a41ea40f30744ae79d0a5a66fa017 Signed-off-by: George Shen --- drivers/media/platform/msm/cvp/msm_cvp_dsp.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/media/platform/msm/cvp/msm_cvp_dsp.c b/drivers/media/platform/msm/cvp/msm_cvp_dsp.c index 6251ec30d317..4d00fe5fcd73 100644 --- a/drivers/media/platform/msm/cvp/msm_cvp_dsp.c +++ b/drivers/media/platform/msm/cvp/msm_cvp_dsp.c @@ -153,10 +153,9 @@ static int cvp_dsp_rpmsg_probe(struct rpmsg_device *rpdev) mutex_lock(&me->lock); me->chan = rpdev; me->state = DSP_PROBED; + complete(&me->completions[CPU2DSP_MAX_CMD]); mutex_unlock(&me->lock); - cvp_dsp_send_hfi_queue(); - return 0; } @@ -490,6 +489,14 @@ wait_dsp: if (me->state == DSP_INVALID) goto exit; + if (me->state == DSP_UNINIT) + goto wait_dsp; + + if (me->state == DSP_PROBED) { + cvp_dsp_send_hfi_queue(); + goto wait_dsp; + } + cmd.type = me->pending_dsp2cpu_cmd.type; if (rc == -ERESTARTSYS) { @@ -569,13 +576,14 @@ int cvp_dsp_device_init(void) goto register_bail; } snprintf(tname, sizeof(tname), "cvp-dsp-thread"); + me->state = DSP_UNINIT; me->dsp_thread = kthread_run(cvp_dsp_thread, me, tname); if (!me->dsp_thread) { dprintk(CVP_ERR, "%s create %s fail", __func__, tname); rc = -ECHILD; + me->state = DSP_INVALID; goto register_bail; } - me->state = DSP_UNINIT; return 0; register_bail: