[igt-dev] [PATCH i-g-t 1/2] tests/gem_exec_fence: Check stored values only for valid workloads

Karolina Drobnik karolina.drobnik at intel.com
Mon Jul 25 09:05:08 UTC 2022


Hi,

On 22.07.2022 15:36, Kamil Konieczny wrote:
> Hi,
> 
> On 2022-07-20 at 16:01:03 +0200, Karolina Drobnik wrote:
>> From: Chris Wilson <chris at chris-wilson.co.uk>
>>
>> test_fence_await verifies if a fence used to pipeline work signals
>> correctly. await-hang and nb-await-hang test cases inject GPU hang,
>> which causes an erroneous state, meaning the fence will be signaled
>> without execution. The error causes an instant reset of the command
>> streamer for the hanging workload. This revealed a problem with how
>> we verify the fence state and results. The test assumes that the
>> error notification happens after a hang is declared, which takes
>> longer than submitting the next set of fences, making the test pass
>> every time. With the immediate reset, this might not happen, so the
>> assertion fails, as there are no active fences in the GPU hang case.
>>
>> Move the check for active fence to the path for non-hanging workload,
>> and verify results only in this scenario.
>>
>> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
>> Signed-off-by: Karolina Drobnik <karolina.drobnik at intel.com>
>> ---
>>   tests/i915/gem_exec_fence.c | 12 +++++++-----
>>   1 file changed, 7 insertions(+), 5 deletions(-)
>>
>> diff --git a/tests/i915/gem_exec_fence.c b/tests/i915/gem_exec_fence.c
>> index d46914c2..c1bd2a38 100644
>> --- a/tests/i915/gem_exec_fence.c
>> +++ b/tests/i915/gem_exec_fence.c
>> @@ -351,17 +351,19 @@ static void test_fence_await(int fd, const intel_ctx_t *ctx,
>>   	usleep(50 * 1000); /* 50 ms, typical preempt reset is 150+ms */
>>
>>   	/* Check for invalidly completing the task early */
> 
> Please move this comment inside if, just before assert.
> 
>> -	igt_assert(fence_busy(spin->out_fence));
>> -	for (int n = 0; n < i; n++)
>> -		igt_assert_eq_u32(out[n], 0);
>> +	if ((flags & HANG) == 0) {
> 
> This comment belongs here.

OK, can correct this, thanks

>> +		igt_assert(fence_busy(spin->out_fence));
>> +		for (int n = 0; n < i; n++)
>> +			igt_assert_eq_u32(out[n], 0);
>>
>> -	if ((flags & HANG) == 0)
>>   		igt_spin_end(spin);
>> +	}
>>
>>   	igt_waitchildren();
>>
>>   	gem_set_domain(fd, scratch, I915_GEM_DOMAIN_GTT, 0);
>> -	while (i--)
>> +	igt_assert(!fence_busy(spin->out_fence));
>> +	while ((flags & HANG) == 0 && i--)
>>   		igt_assert_eq_u32(out[i], i);
> 
> Please make this like
> 	if ((flags & HANG) == 0)
> 		while ...

I think it's just a style preference: "while ((flags & HANG) == 0 && 
i--)" is more concise, and I'd like to keep it.

All the best,
Karolina

> With that fixed,
> Reviewed-by: Kamil Konieczny <kamil.konieczny at linux.intel.com>
> 
> --
> Kamil
> 
>>   	munmap(out, 4096);
>>
>> --
>> 2.25.1


More information about the igt-dev mailing list