Setting the buffer status to error if the media request of each source buffer is NULL, then schedule the work to process again in case of access NULL pointer. Signed-off-by: Yunfei Dong <yunfei.dong@xxxxxxxxxxxx> --- .../mediatek/vcodec/decoder/mtk_vcodec_dec.c | 6 ++---- .../vcodec/decoder/mtk_vcodec_dec_stateless.c | 17 +++++------------ 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec.c b/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec.c index 2ccdffbadcda..b16572d5cf54 100644 --- a/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec.c +++ b/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec.c @@ -912,10 +912,8 @@ void vb2ops_vdec_stop_streaming(struct vb2_queue *q) src_buf->vb2_buf.req_obj.req; v4l2_m2m_buf_done(src_buf, VB2_BUF_STATE_ERROR); - if (req) { - v4l2_ctrl_request_complete(req, &ctx->ctrl_hdl); - media_request_manual_complete(req); - } + v4l2_ctrl_request_complete(req, &ctx->ctrl_hdl); + media_request_manual_complete(req); } } return; diff --git a/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_stateless.c b/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_stateless.c index 1e11c08d708f..dd6ee694382e 100644 --- a/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_stateless.c +++ b/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_stateless.c @@ -264,10 +264,8 @@ static void mtk_vdec_stateless_cap_to_disp(struct mtk_vcodec_dec_ctx *ctx, int e mtk_v4l2_vdec_err(ctx, "dst buffer is NULL"); } - if (src_buf_req) { - v4l2_ctrl_request_complete(src_buf_req, &ctx->ctrl_hdl); - media_request_manual_complete(src_buf_req); - } + v4l2_ctrl_request_complete(src_buf_req, &ctx->ctrl_hdl); + media_request_manual_complete(src_buf_req); } static struct vdec_fb *vdec_get_cap_buffer(struct mtk_vcodec_dec_ctx *ctx) @@ -356,10 +354,7 @@ static void mtk_vdec_worker(struct work_struct *work) ctx->id, bs_src->va, &bs_src->dma_addr, bs_src->size, vb2_src); /* Apply request controls. */ src_buf_req = vb2_src->req_obj.req; - if (src_buf_req) - v4l2_ctrl_request_setup(src_buf_req, &ctx->ctrl_hdl); - else - mtk_v4l2_vdec_err(ctx, "vb2 buffer media request is NULL"); + v4l2_ctrl_request_setup(src_buf_req, &ctx->ctrl_hdl); ret = vdec_if_decode(ctx, bs_src, NULL, &res_chg); if (ret && ret != -EAGAIN) { @@ -378,10 +373,8 @@ static void mtk_vdec_worker(struct work_struct *work) if (!IS_VDEC_LAT_ARCH(dev->vdec_pdata->hw_arch) || ctx->current_codec == V4L2_PIX_FMT_VP8_FRAME) { v4l2_m2m_buf_done_and_job_finish(dev->m2m_dev_dec, ctx->m2m_ctx, state); - if (src_buf_req) { - v4l2_ctrl_request_complete(src_buf_req, &ctx->ctrl_hdl); - media_request_manual_complete(src_buf_req); - } + v4l2_ctrl_request_complete(src_buf_req, &ctx->ctrl_hdl); + media_request_manual_complete(src_buf_req); } else { if (ret != -EAGAIN) { v4l2_m2m_src_buf_remove(ctx->m2m_ctx); -- 2.46.0