[PATCH i-g-t 1/3] lib/amdgpu: add timeout support for user queue submissions
vitaly prosyak
vprosyak at amd.com
Fri May 9 02:33:35 UTC 2025
The change looks good to me
Reviewed-by Vitaly Prosyak <vitaly.prosyak at amd.com>
On 2025-05-08 02:07, Jesse.Zhang wrote:
> This patch adds timeout control for user queue operations in IGT's AMDGPU
> tests by:
>
> 1. Adding a time_out field to struct amdgpu_ring_context to store per-ring
> timeout values
> 2. Modifying amdgpu_user_queue_submit() to use the specified timeout or
> default to INT64_MAX (infinite wait) if not set
> 3. Passing the timeout value to amdgpu_cs_syncobj_wait()
>
> The changes allow tests to specify timeout values for user queue operations
> rather than always using an infinite wait. This provides better control
> over test execution and helps prevent hangs during test development and
> debugging.
>
> Cc: Prosyak, Vitaly <Vitaly.Prosyak at amd.com>
> Cc: Sunil Khatri <sunil.khatri at amd.com>
> Cc: Christian Koenig <christian.koenig at amd.com>
> Cc: Alexander Deucher <alexander.deucher at amd.com>
>
> Signed-off-by: Jesse Zhang <jesse.zhang at amd.com>
> ---
> lib/amdgpu/amd_command_submission.c | 3 +++
> lib/amdgpu/amd_ip_blocks.h | 1 +
> lib/amdgpu/amd_userq.c | 4 ++--
> 3 files changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/lib/amdgpu/amd_command_submission.c b/lib/amdgpu/amd_command_submission.c
> index 80d03a498..fcc356f8f 100644
> --- a/lib/amdgpu/amd_command_submission.c
> +++ b/lib/amdgpu/amd_command_submission.c
> @@ -153,6 +153,7 @@ void amdgpu_command_submission_write_linear_helper(amdgpu_device_handle device,
> ring_context->pm4_size = pm4_dw;
> ring_context->res_cnt = 1;
> ring_context->user_queue = user_queue;
> + ring_context->time_out = 0;
> igt_assert(ring_context->pm4);
>
> r = amdgpu_query_hw_ip_info(device, ip_block->type, 0, &ring_context->hw_ip_info);
> @@ -280,6 +281,7 @@ void amdgpu_command_submission_const_fill_helper(amdgpu_device_handle device,
> ring_context->pm4_size = pm4_dw;
> ring_context->res_cnt = 1;
> ring_context->user_queue = user_queue;
> + ring_context->time_out = 0;
> igt_assert(ring_context->pm4);
> r = amdgpu_query_hw_ip_info(device, ip_block->type, 0, &ring_context->hw_ip_info);
> igt_assert_eq(r, 0);
> @@ -374,6 +376,7 @@ void amdgpu_command_submission_copy_linear_helper(amdgpu_device_handle device,
> ring_context->pm4_size = pm4_dw;
> ring_context->res_cnt = 2;
> ring_context->user_queue = user_queue;
> + ring_context->time_out = 0;
> igt_assert(ring_context->pm4);
> r = amdgpu_query_hw_ip_info(device, ip_block->type, 0, &ring_context->hw_ip_info);
> igt_assert_eq(r, 0);
> diff --git a/lib/amdgpu/amd_ip_blocks.h b/lib/amdgpu/amd_ip_blocks.h
> index 3c2ecd1ba..a6c35c171 100644
> --- a/lib/amdgpu/amd_ip_blocks.h
> +++ b/lib/amdgpu/amd_ip_blocks.h
> @@ -175,6 +175,7 @@ struct amdgpu_ring_context {
> uint32_t timeline_syncobj_handle;
> uint64_t point;
> bool user_queue;
> + uint64_t time_out;
>
> struct drm_amdgpu_info_uq_fw_areas info;
> };
> diff --git a/lib/amdgpu/amd_userq.c b/lib/amdgpu/amd_userq.c
> index 50d058609..f8e1a4b45 100644
> --- a/lib/amdgpu/amd_userq.c
> +++ b/lib/amdgpu/amd_userq.c
> @@ -133,7 +133,7 @@ void amdgpu_user_queue_submit(amdgpu_device_handle device, struct amdgpu_ring_co
> uint32_t control = ring_context->pm4_dw;
> uint32_t syncarray[1];
> struct drm_amdgpu_userq_signal signal_data;
> -
> + uint64_t timeout = ring_context->time_out ? ring_context->time_out : INT64_MAX;
>
> amdgpu_pkt_begin();
> /* Prepare the Indirect IB to submit the IB to user queue */
> @@ -179,7 +179,7 @@ void amdgpu_user_queue_submit(amdgpu_device_handle device, struct amdgpu_ring_co
> r = amdgpu_userq_signal(device, &signal_data);
> igt_assert_eq(r, 0);
>
> - r = amdgpu_cs_syncobj_wait(device, &ring_context->timeline_syncobj_handle, 1, INT64_MAX,
> + r = amdgpu_cs_syncobj_wait(device, &ring_context->timeline_syncobj_handle, 1, timeout,
> DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL, NULL);
> igt_assert_eq(r, 0);
> }
More information about the igt-dev
mailing list