[PATCH] dma-buf: fix timeout handling in dma_resv_wait_timeout v2
Lucas Stach
l.stach at pengutronix.de
Wed Jan 29 13:08:51 UTC 2025
Am Mittwoch, dem 29.01.2025 um 11:58 +0100 schrieb Christian König:
> Even the kerneldoc says that with a zero timeout the function should not
> wait for anything, but still return 1 to indicate that the fences are
> signaled now.
>
> Unfortunately that isn't what was implemented, instead of only returning
> 1 we also waited for at least one jiffies.
>
> Fix that by adjusting the handling to what the function is actually
> documented to do.
>
> v2: improve code readability
>
> Reported-by: Marek Olšák <marek.olsak at amd.com>
> Reported-by: Lucas Stach <l.stach at pengutronix.de>
> Signed-off-by: Christian König <christian.koenig at amd.com>
> Cc: <stable at vger.kernel.org>
Reviewed-by: Lucas Stach <l.stach at pengutronix.de>
> ---
> drivers/dma-buf/dma-resv.c | 12 +++++++-----
> 1 file changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/dma-buf/dma-resv.c b/drivers/dma-buf/dma-resv.c
> index 5f8d010516f0..c78cdae3deaf 100644
> --- a/drivers/dma-buf/dma-resv.c
> +++ b/drivers/dma-buf/dma-resv.c
> @@ -684,11 +684,13 @@ long dma_resv_wait_timeout(struct dma_resv *obj, enum dma_resv_usage usage,
> dma_resv_iter_begin(&cursor, obj, usage);
> dma_resv_for_each_fence_unlocked(&cursor, fence) {
>
> - ret = dma_fence_wait_timeout(fence, intr, ret);
> - if (ret <= 0) {
> - dma_resv_iter_end(&cursor);
> - return ret;
> - }
> + ret = dma_fence_wait_timeout(fence, intr, timeout);
> + if (ret <= 0)
> + break;
> +
> + /* Even for zero timeout the return value is 1 */
> + if (timeout)
> + timeout = ret;
> }
> dma_resv_iter_end(&cursor);
>
More information about the dri-devel
mailing list