[igt-dev] [PATCH i-g-t] i915/kms_busy: reduce heartbeat intervals only if neccessary

Andrzej Hajda andrzej.hajda at intel.com
Thu Jun 15 11:41:39 UTC 2023



On 14.06.2023 17:32, Kamil Konieczny wrote:
> Hi Andrzej,
>
> On 2023-06-13 at 21:52:41 +0200, Andrzej Hajda wrote:
>> Reducing heartbeat intervals may downgrade individual engine resets
>> to full GPU resets. The latter is not desirable, especially
>> on simulations, which do not support GPU reset. Only tests with
>> reset flag enabled need reduced hearbeat intervals.
>>
>> Signed-off-by: Andrzej Hajda <andrzej.hajda at intel.com>
>> ---
>>   tests/i915/kms_busy.c | 19 ++++++++++++-------
>>   1 file changed, 12 insertions(+), 7 deletions(-)
>>
>> diff --git a/tests/i915/kms_busy.c b/tests/i915/kms_busy.c
>> index 20d3058fb6f..ccabc38fd3f 100644
>> --- a/tests/i915/kms_busy.c
>> +++ b/tests/i915/kms_busy.c
>> @@ -390,8 +390,6 @@ igt_main_args("e", NULL, help_str, opt_handler, NULL)
>>   		{ "extended-modeset-hang-oldfb-with-reset", true, false, true },
>>   		{ "extended-modeset-hang-newfb-with-reset", true, true, true },
>>   	};
>> -	struct gem_engine_properties saved_gpu_timeouts[GEM_MAX_ENGINES];
>> -	int num_engines;
>>   	int fd;
>>   
>>   	igt_fixture {
>> @@ -409,8 +407,6 @@ igt_main_args("e", NULL, help_str, opt_handler, NULL)
>>   		for_each_pipe(&display, pipe)
>>   			active_pipes[last_pipe++] = pipe;
>>   		last_pipe--;
>> -
>> -		gpu_engines_init_timeouts(fd, ARRAY_SIZE(saved_gpu_timeouts), &num_engines, saved_gpu_timeouts);
> Restoration of intervals is needed after test fails so maybe we
> need separate functionality into reading timeouts (starting
> fixup), set new one and restore ?

I've forgot that test failure causes longjmp. Thx for pointing it out.

>
>>   	}
>>   
>>   	/* XXX Extend to cover atomic rendering tests to all planes + legacy */
>> @@ -488,14 +484,24 @@ igt_main_args("e", NULL, help_str, opt_handler, NULL)
>>   					continue;
>>   
>>   				igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
>> -					if (tests[i].reset)
>> +					struct gem_engine_properties saved_gpu_timeouts[GEM_MAX_ENGINES];
>> +					int num_engines;
>> +
>> +					if (tests[i].reset) {
>> +						gpu_engines_init_timeouts(display.drm_fd,
>> +									  ARRAY_SIZE(saved_gpu_timeouts),
>> +									  &num_engines, saved_gpu_timeouts);
>>   						igt_set_module_param_int(display.drm_fd, "force_reset_modeset_test", 1);
>> +					}
>>   
>>   					test_hang(&display, pipe, output,
>>   						  tests[i].modeset, tests[i].hang_newfb);
>>   
>> -					if (tests[i].reset)
>> +					if (tests[i].reset) {
>>   						igt_set_module_param_int(display.drm_fd, "force_reset_modeset_test", 0);
>> +						gpu_engines_restore_timeouts(display.drm_fd, num_engines,
>> +									     saved_gpu_timeouts);
> If test fails this will not be run. Other way to ensure it will
> be run would be to use atexit function, it may be set at first
> init. Look at igt_install_exit_handler in igt_core.

OK, but in atexit it will be run only at exit of the process, with 
subsequent tests having wrong timeouts.
Maybe I can put them into fixtures in tests[] loop, restore will be then 
called even if test fails.

Regards
Andrzej

>
> Regards,
> Kamil
>
>> +					}
>>   				}
>>   			}
>>   
>> @@ -504,7 +510,6 @@ igt_main_args("e", NULL, help_str, opt_handler, NULL)
>>   	}
>>   
>>   	igt_fixture {
>> -		gpu_engines_restore_timeouts(fd, num_engines, saved_gpu_timeouts);
>>   		igt_display_fini(&display);
>>   		close(display.drm_fd);
>>   	}
>> -- 
>> 2.34.1
>>



More information about the igt-dev mailing list