[Intel-gfx] [PATCH v6] igt/gem_trtt: Exercise the TRTT hardware

Goel, Akash akash.goel at intel.com
Fri Mar 18 09:52:51 UTC 2016



On 3/18/2016 2:52 PM, Chris Wilson wrote:
> On Fri, Mar 18, 2016 at 02:31:23PM +0530, Goel, Akash wrote:
>>
>>
>> On 3/18/2016 2:06 PM, Chris Wilson wrote:
>>> On Fri, Mar 18, 2016 at 02:07:40PM +0530, akash.goel at intel.com wrote:
>>>> +/* emit_store_qword
>>>> + * populate batch buffer with MI_STORE_DWORD_IMM command
>>>> + * @fd: drm file descriptor
>>>> + * @cmd_buf: batch buffer
>>>> + * @dw_offset: write offset in batch buffer
>>>> + * @vaddr: destination Virtual address
>>>> + * @data: u64 data to be stored at destination
>>>> + */
>>>> +static int emit_store_qword(int fd, uint32_t *cmd_buf, uint32_t dw_offset,
>>>> +			    uint64_t vaddr, uint64_t data)
>>>> +{
>>>> +	/* Check that softpin addresses are in the correct form */
>>>> +	igt_assert_eq_u64(vaddr, igt_canonical_addr(vaddr));
>>>> +
>>>> +	/* SDI cannot write to unaligned addresses */
>>>> +	igt_assert((vaddr & 3) == 0);
>>>
>>> If I remember correctly a qword write from SDI must be 8 byte aligned.
>>> Right?
>>
>> Yes right. Sorry, my bad..
>>>
>>>> +
>>>> +	cmd_buf[dw_offset++] = MI_STORE_DWORD_IMM | 0x3;
>>>> +	cmd_buf[dw_offset++] = (uint32_t)vaddr;
>>>> +	cmd_buf[dw_offset++] = (uint32_t)(vaddr >> 32);
>>>> +	cmd_buf[dw_offset++] = data;
>>>> +	cmd_buf[dw_offset++] = data >> 32;
>>>> +
>>>> +	return dw_offset;
>>>> +}
>>>
>>> Hopefully final comments!
>>>
>>> Missed EINTR handling during evict, If you repeat the busy/hang tests
>>> within the igt_fork_signal_helper(); igt_stop_signal_helper() that
>>> should cover catching an inopportune signal.
>>
>> Fine will add, thanks for suggesting this
>> So the signal will interrupt the Driver, which would be waiting for
>> the vma unbind to complete, from the eviction path.
>
> Right, and we will report the error back to userspace as EINTR and
> userspace will restart the syscall and we expect it to succeed
> (eventually). Just useful for flushing out the error handling.
>
> Having just remembered how useful this might be, I just extended
> gem_softpin for similar reasons:
> +       igt_subtest("evict-active-interruptible") {
> +               struct timespec start = {};
> +               while (igt_seconds_elapsed(&start) < 20)
> +                       test_evict_active(fd);
> +       }
Thanks I just tested the interruptible versions like this :-

+	igt_fork_signal_helper();
+	igt_subtest("evict_active-interruptible")
+		 test_evict_active();
+
+	igt_subtest("evict_hang-interruptible")
+		test_evict_hang();
+	igt_stop_signal_helper();

Actually the hanging object test implicitly exercises the interruption 
case (otherwise the test won't pass), error recovery as a part of GPU 
reset wakes up/interrupts the waiters.

Best regards
Akash


> -Chris
>


More information about the Intel-gfx mailing list