[igt-dev] [PATCH i-g-t] tests/i915/gem_exec_schedule.c: Switch to gem_sync and gem_read

Antonio Argenziano antonio.argenziano at intel.com
Thu Feb 14 23:53:29 UTC 2019



On 14/02/19 00:59, Chris Wilson wrote:
> Quoting Antonio Argenziano (2019-02-14 01:22:50)
>> use IOCTLs gem_read for reading and, gem_sync to wait on a batch.
> 
> At least give a hint as to why.
>   
>> Signed-off-by: Antonio Argenziano <antonio.argenziano at intel.com>
>>
>> Cc: Chris Wilson <chris at chris-wilson.co.uk>
>> ---
>>   tests/i915/gem_exec_schedule.c | 113 +++++++++++++--------------------
>>   1 file changed, 45 insertions(+), 68 deletions(-)
>>
>> diff --git a/tests/i915/gem_exec_schedule.c b/tests/i915/gem_exec_schedule.c
>> index 00f9528a..5df48960 100644
>> --- a/tests/i915/gem_exec_schedule.c
>> +++ b/tests/i915/gem_exec_schedule.c
>> @@ -152,7 +152,7 @@ static void fifo(int fd, unsigned ring)
>>   {
>>          IGT_CORK_HANDLE(cork);
>>          uint32_t scratch, plug;
>> -       uint32_t *ptr;
>> +       uint32_t result;
>>   
>>          scratch = gem_create(fd, 4096);
>>   
>> @@ -165,13 +165,10 @@ static void fifo(int fd, unsigned ring)
>>          unplug_show_queue(fd, &cork, ring);
>>          gem_close(fd, plug);
>>   
>> -       ptr = gem_mmap__gtt(fd, scratch, 4096, PROT_READ);
>> -       gem_set_domain(fd, scratch, /* no write hazard lies! */
>> -                       I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
> 
> gem_sync.
> 
>> +       gem_read(fd, scratch, 0, &result, sizeof(result));
> 
> So I think something like a
> 
> static inline uint32_t
> sync_read_u32(int i915, uint32_t handle, uint64_t offset)
> {
> 	uint32_t result;
> 
> 	gem_sync(i915, handle); /* no write hazard lies! */
> 	gem_read(i915, handle, offset, &results, sizeof(result));
> 
> 	return result;
> }
> 
> result = sync_read_u32(fd, scratch, 0);
> 
> would tidy up most of the conversions.
> 
>>          gem_close(fd, scratch);
>>   
>> -       igt_assert_eq_u32(ptr[0], 2);
>> -       munmap(ptr, 4096);
>> +       igt_assert_eq_u32(result, 2);
>>   }
>>   
>>   static void independent(int fd, unsigned int engine)
>> @@ -249,7 +246,7 @@ static void smoketest(int fd, unsigned ring, unsigned timeout)
>>          unsigned nengine;
>>          unsigned engine;
>>          uint32_t scratch;
>> -       uint32_t *ptr;
>> +       uint32_t result[4096 / sizeof(uint32_t)];
> 
> Is ncpus not known at this point, could it be?
> uint32_t results[2 * ncpus];

I went with the size of the source mainly because it is easier to find 
at a glance.

Antonio

> 
>>          nengine = 0;
>>          if (ring == ALL_ENGINES) {
>> @@ -287,22 +284,19 @@ static void smoketest(int fd, unsigned ring, unsigned timeout)
>>          }
>>          igt_waitchildren();
>>   
>> -       ptr = gem_mmap__gtt(fd, scratch, 4096, PROT_READ);
>> -       gem_set_domain(fd, scratch, /* no write hazard lies! */
>> -                       I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
> 
> Anything that has /* no write hazard lies! */ must be replaced by
> gem_sync() with the same warning.
> 
>> +       gem_read(fd, scratch, 0, result, 4096);
> s/4096/sizeof(results))
>>          gem_close(fd, scratch);
> 
> [snip more of the same]
> -Chris
> 


More information about the igt-dev mailing list