[Intel-gfx] [PATCH i-g-t v2] i915/gem_ctx_exec: Cover all engines for nohangcheck

Chris Wilson chris at chris-wilson.co.uk
Wed Feb 5 11:52:11 UTC 2020


Quoting Tvrtko Ursulin (2020-02-05 11:48:42)
> 
> On 04/02/2020 16:19, Chris Wilson wrote:
> > No engine can be missed when verifying that a rogue user cannot cause a
> > denial-of-service with nohangcheck.
> > 
> > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> > Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> > ---
> > __for_each_physical_engine, keep the leaks
> > ---
> >   tests/i915/gem_ctx_exec.c | 38 ++++++++++++++++++++++++++++++++------
> >   1 file changed, 32 insertions(+), 6 deletions(-)
> > 
> > diff --git a/tests/i915/gem_ctx_exec.c b/tests/i915/gem_ctx_exec.c
> > index b1ae65774..aeb8d2976 100644
> > --- a/tests/i915/gem_ctx_exec.c
> > +++ b/tests/i915/gem_ctx_exec.c
> > @@ -42,6 +42,7 @@
> >   
> >   #include "igt_dummyload.h"
> >   #include "igt_sysfs.h"
> > +#include "sw_sync.h"
> >   
> >   IGT_TEST_DESCRIPTION("Test context batch buffer execution.");
> >   
> > @@ -203,9 +204,9 @@ static bool __enable_hangcheck(int dir, bool state)
> >   
> >   static void nohangcheck_hostile(int i915)
> >   {
> > -     int64_t timeout = NSEC_PER_SEC / 2;
> > -     igt_spin_t *spin;
> > +     const struct intel_execution_engine2 *e;
> >       igt_hang_t hang;
> > +     int fence = -1;
> >       uint32_t ctx;
> >       int err = 0;
> >       int dir;
> > @@ -215,6 +216,8 @@ static void nohangcheck_hostile(int i915)
> >        * we forcibly terminate that context.
> >        */
> >   
> > +     i915 = gem_reopen_driver(i915);
> > +
> >       dir = igt_sysfs_open_parameters(i915);
> >       igt_require(dir != -1);
> >   
> > @@ -223,16 +226,35 @@ static void nohangcheck_hostile(int i915)
> >   
> >       igt_require(__enable_hangcheck(dir, false));
> >   
> > -     spin = igt_spin_new(i915, ctx, .flags = IGT_SPIN_NO_PREEMPTION);
> > +     __for_each_physical_engine(i915, e) {
> > +             igt_spin_t *spin;
> > +
> > +             spin = igt_spin_new(i915, ctx,
> > +                                 .engine = e->flags,
> 
> Ouch, I missed a mismatch between ctx and e->flags here. Thanks to 
> Sreedhar for reporting it.
> 
> We either need gem_context_set_all_engines back or to rethink a cleaner 
> strategy.

Copy engines, or pass the ctx into __for_each_physical_engine.
-Chris


More information about the Intel-gfx mailing list