lkml.org 
[lkml]   [2022]   [Dec]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2,7/7] media: mediatek: vcodec: change lat thread decode error condition
    Date
    If lat thread can't get lat buffer, it should be that current instance
    don't be schedulded, the driver can't free the src buffer directly.

    Fixes: 7b182b8d9c85 ("media: mediatek: vcodec: Refactor get and put capture buffer flow")
    Signed-off-by: Yunfei Dong <yunfei.dong@mediatek.com>
    ---
    .../platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c | 6 ++++--
    .../platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c | 2 +-
    .../platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c | 2 +-
    3 files changed, 6 insertions(+), 4 deletions(-)

    diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c
    index ffbcee04dc26..04beb3f08eea 100644
    --- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c
    +++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c
    @@ -258,8 +258,10 @@ static void mtk_vdec_worker(struct work_struct *work)
    if (src_buf_req)
    v4l2_ctrl_request_complete(src_buf_req, &ctx->ctrl_hdl);
    } else {
    - v4l2_m2m_src_buf_remove(ctx->m2m_ctx);
    - v4l2_m2m_buf_done(vb2_v4l2_src, state);
    + if (ret != -EAGAIN) {
    + v4l2_m2m_src_buf_remove(ctx->m2m_ctx);
    + v4l2_m2m_buf_done(vb2_v4l2_src, state);
    + }
    v4l2_m2m_job_finish(dev->m2m_dev_dec, ctx->m2m_ctx);
    }
    }
    diff --git a/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c b/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c
    index 8f262e86bb05..07774b6a3dbd 100644
    --- a/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c
    +++ b/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_if.c
    @@ -574,7 +574,7 @@ static int vdec_h264_slice_lat_decode(void *h_vdec, struct mtk_vcodec_mem *bs,
    lat_buf = vdec_msg_queue_dqbuf(&inst->ctx->msg_queue.lat_ctx);
    if (!lat_buf) {
    mtk_vcodec_err(inst, "failed to get lat buffer");
    - return -EINVAL;
    + return -EAGAIN;
    }
    share_info = lat_buf->private_data;
    src_buf_info = container_of(bs, struct mtk_video_dec_buf, bs_buffer);
    diff --git a/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c b/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
    index cbb6728b8a40..cf16cf2807f0 100644
    --- a/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
    +++ b/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c
    @@ -2070,7 +2070,7 @@ static int vdec_vp9_slice_lat_decode(void *h_vdec, struct mtk_vcodec_mem *bs,
    lat_buf = vdec_msg_queue_dqbuf(&instance->ctx->msg_queue.lat_ctx);
    if (!lat_buf) {
    mtk_vcodec_err(instance, "Failed to get VP9 lat buf\n");
    - return -EBUSY;
    + return -EAGAIN;
    }
    pfc = (struct vdec_vp9_slice_pfc *)lat_buf->private_data;
    if (!pfc) {
    --
    2.25.1
    \
     
     \ /
      Last update: 2022-12-19 07:46    [W:2.724 / U:0.144 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site