[igt-dev] [v2 i-g-t 1/3] tests/kms_setmode: Use dynamic subtests

Rodrigo Siqueira Jordao rjordrigo at amd.com
Wed Mar 16 12:34:19 UTC 2022



On 2022-03-15 09:52, Petri Latvala wrote:
> On Tue, Mar 15, 2022 at 09:37:31AM -0400, Rodrigo Siqueira Jordao wrote:
>>
>>
>> On 2022-03-08 09:22, Bhanuprakash Modem wrote:
>>> Add support to use dynamic subtests.
>>>
>>> Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem at intel.com>
>>> Reviewed-by: Swati Sharma <swati2.sharma at intel.com>
>>> ---
>>>    tests/kms_setmode.c | 37 ++++++++++++++++++++++++++++++++++---
>>>    1 file changed, 34 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/tests/kms_setmode.c b/tests/kms_setmode.c
>>> index 18d81ee4f3..a47d47e5ab 100644
>>> --- a/tests/kms_setmode.c
>>> +++ b/tests/kms_setmode.c
>>> @@ -653,6 +653,26 @@ static void test_crtc_config(const struct test_config *tconf,
>>>    	return;
>>>    }
>>> +static int get_test_name_str(struct crtc_config *crtc, char *buf,
>>> +				size_t buf_size)
>>> +{
>>> +	int pos;
>>> +	int i;
>>> +
>>> +	pos = snprintf(buf, buf_size, "pipe-%s-", kmstest_pipe_name(crtc->pipe_id));
>>> +
>>> +	for (i = 0; i < crtc->connector_count; i++) {
>>> +		drmModeConnector *connector = crtc->cconfs[i].connector;
>>> +
>>> +		pos += snprintf(&buf[pos], buf_size - pos,
>>> +			"%s%s-%d", i ? "-" : "",
>>> +			kmstest_connector_type_str(connector->connector_type),
>>> +			connector->connector_type_id);
>>> +	}
>>> +
>>> +	return pos;
>>> +}
>>> +
>>>    static void test_one_combination(const struct test_config *tconf,
>>>    				 struct connector_config *cconfs,
>>>    				 int connector_count)
>>> @@ -664,8 +684,19 @@ static void test_one_combination(const struct test_config *tconf,
>>>    	setup_crtcs(tconf, cconfs, connector_count, crtcs,
>>>    		    &crtc_count, &config_valid);
>>> -	if (config_valid == !(tconf->flags & TEST_INVALID))
>>> -		test_crtc_config(tconf, crtcs, crtc_count);
>>> +	if (config_valid == !(tconf->flags & TEST_INVALID)) {
>>> +		int i, pos = 0;
>>> +		char test_name[256];
>>> +
>>> +		for (i = 0; i < crtc_count; i++) {
>>> +			if (i > 0)
>>> +				pos += snprintf(&test_name[pos], ARRAY_SIZE(test_name) - pos, "-");
>>> +			pos += get_test_name_str(&crtcs[i], &test_name[pos], ARRAY_SIZE(test_name) - pos);
>>> +		}
>>> +
>>> +		igt_dynamic_f("%s", test_name)
>>> +			test_crtc_config(tconf, crtcs, crtc_count);
>>> +	}
>>>    	cleanup_crtcs(crtcs, crtc_count);
>>>    }
>>> @@ -939,7 +970,7 @@ igt_main_args("det:", NULL, help_str, opt_handler, NULL)
>>>    	for (i = 0; i < ARRAY_SIZE(tests); i++) {
>>>    		igt_describe("Tests the mode by iterating through all valid/invalid crtc/connector combinations");
>>> -		igt_subtest(tests[i].name) {
>>> +		igt_subtest_with_dynamic(tests[i].name) {
>>
>> Hi Bhanuprakash,
>>
>> The above change causes a regression in AMD CI. Previously, all the below
>> tests were passing, but now they are skipping.
>>
>> basic-clone-single-crtc
>> clone-exclusive-crtc
>> invalid-clone-exclusive-crtc
>> invalid-clone-single-crtc
>> invalid-clone-single-crtc-stealing
>> basic-clone-single-crtc
>>
>> If we use igt_subtest instead of igt_subtest_with_dynamic, everything gets
>> back to normal. Can we reintroduce igt_subtest? Or is there a better way to
>> fix this issue?
> 
> What is the skip message? If it's "no dynamic subtests executed", then
> you don't have any valid configs. Previously that would just silently
> give a pass even when the test did absolutely nothing.
> 
> 

Hi Petri/Bhanuprakash

Thanks for the explanation. I checked with other ASICs on our side, and 
it looks like we have different results per device, which makes sense 
based on your explanation. We already updated our baseline.

Thanks again
Siqueira



More information about the igt-dev mailing list