Message ID | 20171214220131.11884-1-antonio.argenziano@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Quoting Antonio Argenziano (2017-12-14 22:01:31) > After change "lib: Ask the kernel to quiesce the GPU" was merged, > gem_quiescent_gpu() would not submit noop batches to all engines > therefore the test should submit the workload and use the library > function to wait for the workload to complete. > > Cc: Chris Wilson <chris@chris-wilson.co.uk> > Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com> > Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> > Signed-off-by: Antonio Argenziano <antonio.argenziano@intel.com> > --- > tests/gem_eio.c | 30 +++++++++++++++++++++++++++++- > 1 file changed, 29 insertions(+), 1 deletion(-) > > diff --git a/tests/gem_eio.c b/tests/gem_eio.c > index 2ac9f0a9..868f2236 100644 > --- a/tests/gem_eio.c > +++ b/tests/gem_eio.c > @@ -60,13 +60,41 @@ static bool i915_reset_control(bool enable) > return ret; > } > > +static void noop(int fd, unsigned flags) > +{ > + const uint32_t bbe = MI_BATCH_BUFFER_END; > + struct drm_i915_gem_execbuffer2 eb; > + struct drm_i915_gem_exec_object2 exec; > + > + memset(&exec, 0, sizeof(exec)); > + exec.handle = gem_create(fd, 4096); > + igt_assert((int)exec.handle > 0); gem_create() provides the checks. exec.handle is u32, with 0 being the only special invalid value. It just happens that in the linux implementation it is limited internally by the idr (but that limit may well be removed). Other implementations may use a psuedo-random handle generator. -Chris
diff --git a/tests/gem_eio.c b/tests/gem_eio.c index 2ac9f0a9..868f2236 100644 --- a/tests/gem_eio.c +++ b/tests/gem_eio.c @@ -60,13 +60,41 @@ static bool i915_reset_control(bool enable) return ret; } +static void noop(int fd, unsigned flags) +{ + const uint32_t bbe = MI_BATCH_BUFFER_END; + struct drm_i915_gem_execbuffer2 eb; + struct drm_i915_gem_exec_object2 exec; + + memset(&exec, 0, sizeof(exec)); + exec.handle = gem_create(fd, 4096); + igt_assert((int)exec.handle > 0); + gem_write(fd, exec.handle, 0, &bbe, sizeof(bbe)); + + memset(&eb, 0, sizeof(eb)); + eb.buffers_ptr = to_user_pointer(&exec); + eb.buffer_count = 1; + eb.flags = flags; + + gem_execbuf(fd, &eb); +} + +static void noop_all_engines(int fd) +{ + unsigned engine; + for_each_engine(fd, engine) + noop(fd, engine); + + gem_quiescent_gpu(fd); +} + static void trigger_reset(int fd) { igt_force_gpu_reset(fd); /* And just check the gpu is indeed running again */ igt_debug("Checking that the GPU recovered\n"); - gem_quiescent_gpu(fd); + noop_all_engines(fd); } static void wedge_gpu(int fd)
After change "lib: Ask the kernel to quiesce the GPU" was merged, gem_quiescent_gpu() would not submit noop batches to all engines therefore the test should submit the workload and use the library function to wait for the workload to complete. Cc: Chris Wilson <chris@chris-wilson.co.uk> Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Signed-off-by: Antonio Argenziano <antonio.argenziano@intel.com> --- tests/gem_eio.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-)