media: mtk-jpeg: Fix timeout schedule error in mtk_jpegdec_worker.
authorZheng Wang <zyytlz.wz@163.com>
Mon, 6 Nov 2023 14:48:11 +0000 (15:48 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 1 Feb 2024 00:18:55 +0000 (16:18 -0800)
commit 38e1857933def4b3fafc28cc34ff3bbc84cad2c3 upstream.

In mtk_jpegdec_worker, if error occurs in mtk_jpeg_set_dec_dst, it
will start the timeout worker and invoke v4l2_m2m_job_finish at
the same time. This will break the logic of design for there should
be only one function to call v4l2_m2m_job_finish. But now the timeout
handler and mtk_jpegdec_worker will both invoke it.

Fix it by start the worker only if mtk_jpeg_set_dec_dst successfully
finished.

Fixes: da4ede4b7fd6 ("media: mtk-jpeg: move data/code inside CONFIG_OF blocks")
Signed-off-by: Zheng Wang <zyytlz.wz@163.com>
Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Cc: stable@vger.kernel.org
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c

index 60425c9..c3f7064 100644 (file)
@@ -1749,9 +1749,6 @@ retry_select:
        v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx);
        v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
 
-       schedule_delayed_work(&comp_jpeg[hw_id]->job_timeout_work,
-                             msecs_to_jiffies(MTK_JPEG_HW_TIMEOUT_MSEC));
-
        mtk_jpeg_set_dec_src(ctx, &src_buf->vb2_buf, &bs);
        if (mtk_jpeg_set_dec_dst(ctx,
                                 &jpeg_src_buf->dec_param,
@@ -1761,6 +1758,9 @@ retry_select:
                goto setdst_end;
        }
 
+       schedule_delayed_work(&comp_jpeg[hw_id]->job_timeout_work,
+                             msecs_to_jiffies(MTK_JPEG_HW_TIMEOUT_MSEC));
+
        spin_lock_irqsave(&comp_jpeg[hw_id]->hw_lock, flags);
        ctx->total_frame_num++;
        mtk_jpeg_dec_reset(comp_jpeg[hw_id]->reg_base);