[PATCH i-g-t 2/3] tests/kms_async_flips: Add hang subtest
Karthik B S
karthik.b.s at intel.com
Tue Jun 24 09:21:08 UTC 2025
On 6/24/2025 11:16 AM, B, Jeevan wrote:
>> -----Original Message-----
>> From: igt-dev <igt-dev-bounces at lists.freedesktop.org> On Behalf Of Karthik B
>> S
>> Sent: Thursday, June 19, 2025 4:54 PM
>> To: igt-dev at lists.freedesktop.org
>> Cc: Reddy Guddati, Santhosh <santhosh.reddy.guddati at intel.com>; Murthy,
>> Arun R <arun.r.murthy at intel.com>; B S, Karthik <karthik.b.s at intel.com>
>> Subject: [PATCH i-g-t 2/3] tests/kms_async_flips: Add hang subtest
>>
>> Test functionality of async flips with hang.
>>
>> Signed-off-by: Karthik B S <karthik.b.s at intel.com>
>> ---
>> tests/kms_async_flips.c | 37 ++++++++++++++++++++++++++++++++++---
>> 1 file changed, 34 insertions(+), 3 deletions(-)
>>
>> diff --git a/tests/kms_async_flips.c b/tests/kms_async_flips.c index
>> 0f2d932e4..8587e4675 100644
>> --- a/tests/kms_async_flips.c
>> +++ b/tests/kms_async_flips.c
>> @@ -86,6 +86,9 @@
>> * SUBTEST: async-flip-suspend-resume
>> * Description: Verify the async flip functionality with suspend and resume
>> cycle
>> *
>> + * SUBTEST: async-flip-hang
>> + * Description: Verify the async flip functionality with hang cycle
>> + *
>> * SUBTEST: overlay-atomic
>> * Description: Verify overlay planes with async flips in atomic API
>> *
>> @@ -132,6 +135,7 @@ typedef struct {
>> enum pipe pipe;
>> bool alternate_sync_async;
>> bool suspend_resume;
>> + bool hang;
>> bool allow_fail;
>> struct buf_ops *bops;
>> bool atomic_path;
>> @@ -376,8 +380,10 @@ static void test_async_flip(data_t *data)
>> int ret, frame;
>> long long int fps;
>> struct timeval start, end, diff;
>> - int suspend_time = RUN_TIME / 2;
>> - bool temp = data->suspend_resume;
>> + igt_hang_t hang;
>> + uint64_t ahnd = 0;
>> + int mid_time = RUN_TIME / 2;
>> + bool temp = data->suspend_resume || data->hang;
>>
>> igt_display_commit2(&data->display, data->display.is_atomic ?
>> COMMIT_ATOMIC : COMMIT_LEGACY);
>>
>> @@ -433,13 +439,29 @@ static void test_async_flip(data_t *data)
>> data->flip_interval, data->refresh_rate,
>> MIN_FLIPS_PER_FRAME);
>> }
>>
>> - if (data->suspend_resume && diff.tv_sec == suspend_time &&
>> temp) {
>> + if (data->suspend_resume && diff.tv_sec == mid_time &&
>> temp) {
>> temp = false;
>>
>> igt_system_suspend_autoresume(SUSPEND_STATE_MEM,
>> SUSPEND_TEST_NONE);
>>
> Can we add a comment line describing what we are doing here.
> /* Trigger a GPU hang at mid-point to test async flip recovery */
Thank you for the review.
Since the test description is already mentioning this, I feel this would
be a slight overkill to add this and so could be avoided. Please let me
know if you see this otherwise.
> With this minor suggestion patch LGTM.
>
> Reviewed-by: Jeevan B <jeevan.b at intel.com>
Thank you for the rb.
Thanks,
Karthik.B.S
>> +
>> + if (data->hang && diff.tv_sec == mid_time && temp) {
>> + temp = false;
>> + memset(&hang, 0, sizeof(hang));
>> +
>> + ahnd = is_i915_device(data->drm_fd) ?
>> + get_reloc_ahnd(data->drm_fd, 0) :
>> + intel_allocator_open(data->drm_fd, 0,
>> INTEL_ALLOCATOR_RELOC);
>> + hang = igt_hang_ring_with_ahnd(data->drm_fd,
>> I915_EXEC_DEFAULT, ahnd);
>> + }
>> +
>> frame++;
>> } while (diff.tv_sec < RUN_TIME);
>>
>> + if (data->hang) {
>> + igt_post_hang_ring(data->drm_fd, hang);
>> + put_ahnd(ahnd);
>> + }
>> +
>> if (!data->alternate_sync_async) {
>> fps = frame * 1000 / RUN_TIME;
>> igt_assert_f((fps / 1000) > (data->refresh_rate *
>> MIN_FLIPS_PER_FRAME), @@ -1032,6 +1054,15 @@ igt_main
>> data.suspend_resume = false;
>> }
>>
>> + igt_describe("Verify the async flip functionality after hang cycle");
>> + igt_subtest_with_dynamic("async-flip-hang") {
>> + igt_require(is_intel_device(data.drm_fd));
>> + test_init_ops(&data);
>> + data.hang = true;
>> + run_test(&data, test_async_flip);
>> + data.hang = false;
>> + }
>> +
>> igt_fixture {
>> for (i = 0; i < NUM_FBS; i++) {
>> igt_remove_fb(data.drm_fd, &data.bufs[i]);
>> --
>> 2.43.0
More information about the igt-dev
mailing list