Re: [PATCH v3] media: mediatek: jpeg: retry HW selection after successful wait

From: Nicolas Dufresne

Date: Sun Oct 04 2026 - 07:28:17 EST


Le samedi 15 août 2026 à 21:49 +0800, Pengpeng Hou a écrit :
> 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")
> Assisted-by: Codex:gpt-5
> Signed-off-by: Pengpeng Hou <pengpeng@xxxxxxxxxxx>

Reviewed-by: Nicolas Dufresne <nicolas.dufresne@xxxxxxxxxxxxx>

Applied, ty.

> ---
> Changes since v2:
> https://lore.kernel.org/all/20260720115322.89784-1-pengpeng@xxxxxxxxxxx/
> - add the Fixes tag
> - revalidate the decoder-only change against current mainline
> - add the required coding-assistant attribution
>
> Changes since v1:
> https://lore.kernel.org/all/20260625003142.99598-1-pengpeng@xxxxxxxxxxx/
> - split interrupted waits, timeout exhaustion and successful wakeups
> - use distinct diagnostics and explain why the encoder path is unchanged
>
> 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 d147ec483081..9634c95aaada 100644
> --- a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c
> +++ b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c
> @@ -1697,9 +1697,15 @@ static void mtk_jpegdec_worker(struct work_struct *work)
> 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;
> }
>
> base-commit: dac3e89a2c90c2feeb471e1f22a2512ad424b792

Attachment: signature.asc
Description: This is a digitally signed message part