On Sat Aug 15 21:49:49 2026 +0800, Pengpeng Hou wrote:
> wait_event_interruptible_timeout() returns a positive value when its
> condition becomes true before the timeout. mtk_jpegdec_worker() treats
> every nonzero result as a failure, so a normal decoder wakeup finishes
> the mem2mem job as though no hardware became available.
> 
> Handle interrupted waits and exhausted timeout retries separately, and
> retry hardware selection after a successful wakeup. Increment the retry
> count only for actual timeouts. The encoder uses
> wait_event_interruptible(), whose successful return is zero, so its
> existing check is correct; leave that separate no-timeout policy
> unchanged.
> 
> Fixes: dedc21500334 ("media: mtk-jpegdec: add jpeg decode worker interface")
> Cc: [email protected]
> Assisted-by: Codex:gpt-5
> Signed-off-by: Pengpeng Hou <[email protected]>
> Signed-off-by: Nicolas Dufresne <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

---

diff --git a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c 
b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c
index 640ae30736f9..deb515641521 100644
--- a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c
+++ b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c
@@ -1698,9 +1698,15 @@ retry_select:
                ret = wait_event_interruptible_timeout(jpeg->hw_wq,
                                                       
atomic_read(&jpeg->hw_rdy) > 0,
                                                       
MTK_JPEG_HW_TIMEOUT_MSEC);
-               if (ret != 0 || (i++ > MTK_JPEG_MAX_RETRY_TIME)) {
-                       dev_err(jpeg->dev, "%s : %d, all HW are busy\n",
-                               __func__, __LINE__);
+               if (ret < 0) {
+                       dev_err(jpeg->dev, "decoder HW wait interrupted: %d\n",
+                               ret);
+                       v4l2_m2m_job_finish(jpeg->m2m_dev, ctx->fh.m2m_ctx);
+                       return;
+               }
+
+               if (!ret && i++ > MTK_JPEG_MAX_RETRY_TIME) {
+                       dev_err(jpeg->dev, "all decoder HW are busy\n");
                        v4l2_m2m_job_finish(jpeg->m2m_dev, ctx->fh.m2m_ctx);
                        return;
                }
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to