[Intel-gfx] [PATCH igt] lib/gt: Insert an arbitration point in our hang batch

Ville Syrjälä ville.syrjala at linux.intel.com
Fri Oct 27 12:54:49 UTC 2017


On Fri, Oct 27, 2017 at 01:45:35PM +0100, Chris Wilson wrote:
> A purely recursive batch has the downside that it is a severe drain on
> system resources (see commit f978cc027cd0 "lib/dummyload: Pad with a few
> nops so that we do not completely hog the system") which can result in
> the test being starved and failing to make reasonably progress. For more
> reliable resets, also include an arbitration point. This should lessen
> the efficacy of the hang...
> 
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
> Cc: Mika Kuoppala <mika.kuoppala at linux.intel.com>
> ---
>  lib/igt_gt.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/lib/igt_gt.c b/lib/igt_gt.c
> index 89727d22..2aebad14 100644
> --- a/lib/igt_gt.c
> +++ b/lib/igt_gt.c
> @@ -313,12 +313,12 @@ igt_hang_t igt_hang_ctx(int fd,
>  	len = 2;
>  	if (intel_gen(intel_get_drm_devid(fd)) >= 8)
>  		len++;
> -	b[0] = MI_BATCH_BUFFER_START | (len - 2);
> -	b[len] = MI_BATCH_BUFFER_END;
> -	b[len+1] = MI_NOOP;
> -	gem_write(fd, exec.handle, 0, b, sizeof(b));
> +	b[0] = 0x5 << 24; /* ARB_CHk */

That seems to be gen4+ only. Also
"This instruction can be placed only in a ring buffer, never in a batch
buffer."

> +	b[1] = MI_BATCH_BUFFER_START | (len - 2);
> +	b[len+1] = MI_BATCH_BUFFER_END;
> +	gem_write(fd, exec.handle, 4096-sizeof(b), b, sizeof(b));
>  
> -	reloc.offset = sizeof(uint32_t);
> +	reloc.offset = 4096 - sizeof(b) + 2*sizeof(uint32_t);
>  	reloc.target_handle = exec.handle;
>  	reloc.read_domains = I915_GEM_DOMAIN_COMMAND;
>  
> -- 
> 2.15.0.rc2

-- 
Ville Syrjälä
Intel OTC


More information about the Intel-gfx mailing list