[Intel-gfx] [PATCH igt 2/2] lib: Remove illegal instructions from hang injection

Daniel Vetter daniel at ffwll.ch
Tue Aug 8 13:25:32 UTC 2017


On Mon, Aug 07, 2017 at 04:33:40PM +0300, Mika Kuoppala wrote:
> Chris Wilson <chris at chris-wilson.co.uk> writes:
> 
> > The idea behind using an illegal instruction was to hang the GPU must
> > faster than simply using the recursive batch. However, we stopped doing
> > so on gen8+ as the CS parser was much laxer and allowed the illegal
> > command through but still interpreted the packet length (jumping over
> > the recursive batch buffer start that followed). Sandybridge doesn't
> > just hang the GPU when it encounters an illegal command on the BLT
> > engine, it hangs the machine. That goes above and beyond testing our
> > hangcheck + reset, so remove the deadly instructions.
> >
> > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> > ---
> >  lib/igt_gt.c | 25 +++++--------------------
> >  1 file changed, 5 insertions(+), 20 deletions(-)
> >
> > diff --git a/lib/igt_gt.c b/lib/igt_gt.c
> > index 6f7daa5e..d5e8b557 100644
> > --- a/lib/igt_gt.c
> > +++ b/lib/igt_gt.c
> > @@ -270,30 +270,15 @@ igt_hang_t igt_hang_ctx(int fd,
> >  
> >  	memset(b, 0xc5, sizeof(b));
> >  
> > -	/*
> > -	 * We emit invalid command to provoke a gpu hang.
> > -	 * If that doesn't work, we do bb start loop.
> > -	 * Note that the bb start aligment is illegal due this.
> > -	 * But hey, we are here to hang the gpu so whatever works.
> > -	 * We skip 0xfffffff on gen9 as it confuses hw in an such a way that
> > -	 * it will skip over the bb start, causing runaway head and
> > -	 * thus much slower hang detection.
> > -	 */
> 
> Daydreaming about MI_HALT,
> 
> Reviewed-by: Mika Kuoppala <mika.kuoppala at intel.com>

I tested both on my snb for a few hours, works solid. I guess I botched
the job when I tried this conversion, resulting in a gpu that couldn't
reset somehow.

Both patches pushed to igt, thanks a lot.
-Daniel

> 
> >  	len = 2;
> > -	if (intel_gen(intel_get_drm_devid(fd)) >= 8) {
> > -		b[0] = MI_NOOP;
> > +	if (intel_gen(intel_get_drm_devid(fd)) >= 8)
> >  		len++;
> > -	} else {
> > -		b[0] = 0xffffffff;
> > -	}
> > -
> > -	b[1] = MI_BATCH_BUFFER_START | (len - 2);
> > -	b[1+len] = MI_BATCH_BUFFER_END;
> > -	b[2+len] = MI_NOOP;
> > +	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));
> >  
> > -	reloc.offset = 8;
> > -	reloc.delta = 4;
> > +	reloc.offset = sizeof(uint32_t);
> >  	reloc.target_handle = exec.handle;
> >  	reloc.read_domains = I915_GEM_DOMAIN_COMMAND;
> >  
> > -- 
> > 2.13.3
> >
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch


More information about the Intel-gfx mailing list