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

Nicolas Dufresne nicolas at ndufresne.ca
Sun Oct 4 04:27:59 PDT 2026


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 at iscas.ac.cn>

Reviewed-by: Nicolas Dufresne <nicolas.dufresne at collabora.com>

Applied, ty.

> ---
> Changes since v2:
> https://lore.kernel.org/all/20260720115322.89784-1-pengpeng@iscas.ac.cn/
> - 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@iscas.ac.cn/
> - 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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: This is a digitally signed message part
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20261004/66932301/attachment-0001.sig>


More information about the Linux-mediatek mailing list