[igt-dev] [PATCH i-g-t] tests/i915: Remove subtests that rely on async relocation behavior
David Airlie
airlied at redhat.com
Mon Aug 10 19:07:32 UTC 2020
On Mon, Aug 10, 2020 at 7:07 PM Maarten Lankhorst
<maarten.lankhorst at linux.intel.com> wrote:
>
> These tests are no longer valid, as they require behavior that
> was never accepted upstream; it assumes that relocations don't
> block synchronously, and the reservation_object lock is only
> held at the end of command submission to install the fences.
>
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
> Cc: Dave Airlie <airlied at redhat.com>
Acked-by: Dave Airlie <airlied at redhat.com>
> ---
> tests/i915/gem_exec_reloc.c | 219 ------------------------------------
> 1 file changed, 219 deletions(-)
>
> diff --git a/tests/i915/gem_exec_reloc.c b/tests/i915/gem_exec_reloc.c
> index d50a8b69487f..85df3da7e011 100644
> --- a/tests/i915/gem_exec_reloc.c
> +++ b/tests/i915/gem_exec_reloc.c
> @@ -424,76 +424,6 @@ static void many_active(int i915, unsigned engine)
> }
> }
>
> -static void __wide_active(int i915, unsigned engine, unsigned long count)
> -{
> - struct drm_i915_gem_relocation_entry *reloc =
> - calloc(count, sizeof(*reloc));
> - struct drm_i915_gem_exec_object2 *obj =
> - calloc(count + 1, sizeof(*obj));
> - struct drm_i915_gem_execbuffer2 execbuf = {
> - .buffers_ptr = to_user_pointer(obj),
> - .buffer_count = count + 1,
> - .flags = engine | I915_EXEC_HANDLE_LUT,
> - };
> - igt_spin_t *spin;
> -
> - for (unsigned long i = 0; i < count; i++) {
> - obj[i].handle = gem_create(i915, 4096);
> - obj[i].flags = EXEC_OBJECT_WRITE;
> - obj[i].flags |= EXEC_OBJECT_SUPPORTS_48B_ADDRESS;
> - }
> -
> - spin = __igt_spin_new(i915,
> - .engine = engine,
> - .flags = (IGT_SPIN_FENCE_OUT |
> - IGT_SPIN_NO_PREEMPTION));
> - obj[count] = spin->obj[1];
> - gem_execbuf(i915, &execbuf); /* mark all the objects as active */
> -
> - for (unsigned long i = 0; i < count; i++) {
> - reloc[i].target_handle = i;
> - reloc[i].presumed_offset = ~0ull;
> - obj[i].relocs_ptr = to_user_pointer(&reloc[i]);
> - obj[i].relocation_count = 1;
> - }
> - gem_execbuf(i915, &execbuf); /* relocation onto active objects */
> -
> - igt_assert_eq(sync_fence_status(spin->out_fence), 0);
> - igt_spin_free(i915, spin);
> -
> - for (unsigned long i = 0; i < count; i++) {
> - uint64_t addr;
> -
> - gem_read(i915, obj[i].handle, 0, &addr, sizeof(addr));
> - igt_assert_eq_u64(addr, obj[i].offset);
> -
> - gem_close(i915, obj[i].handle);
> - }
> - free(obj);
> - free(reloc);
> -}
> -
> -static void wide_active(int i915, unsigned engine)
> -{
> - const uint64_t max = gem_aperture_size(i915) / 4096 / 2;
> - unsigned long count = 256;
> -
> - igt_until_timeout(2) {
> - uint64_t required, total;
> -
> - if (!__intel_check_memory(count, 4096, CHECK_RAM,
> - &required, &total))
> - break;
> -
> - igt_debug("Testing count:%lu\n", count);
> - __wide_active(i915, engine, count);
> -
> - count <<= 1;
> - if (count >= max)
> - break;
> - }
> -}
> -
> static unsigned int offset_in_page(void *addr)
> {
> return (uintptr_t)addr & 4095;
> @@ -937,145 +867,6 @@ static void basic_softpin(int fd)
> gem_close(fd, obj[1].handle);
> }
>
> -static struct drm_i915_gem_relocation_entry *
> -parallel_relocs(int count, unsigned long *out)
> -{
> - struct drm_i915_gem_relocation_entry *reloc;
> - unsigned long sz;
> - int i;
> -
> - sz = count * sizeof(*reloc);
> - sz = ALIGN(sz, 4096);
> -
> - reloc = mmap(0, sz, PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);
> - igt_assert(reloc != MAP_FAILED);
> - for (i = 0; i < count; i++) {
> - reloc[i].target_handle = 0;
> - reloc[i].presumed_offset = ~0ull;
> - reloc[i].offset = 8 * i;
> - reloc[i].delta = i;
> - reloc[i].read_domains = I915_GEM_DOMAIN_INSTRUCTION;
> - reloc[i].write_domain = 0;
> - }
> - mprotect(reloc, sz, PROT_READ);
> -
> - *out = sz;
> - return reloc;
> -}
> -
> -static int __execbuf(int i915, struct drm_i915_gem_execbuffer2 *execbuf)
> -{
> - int err;
> -
> - err = 0;
> - if (ioctl(i915, DRM_IOCTL_I915_GEM_EXECBUFFER2, execbuf)) {
> - err = -errno;
> - igt_assume(err);
> - }
> -
> - errno = 0;
> - return err;
> -}
> -
> -static int stop;
> -static void sighandler(int sig)
> -{
> - stop = 1;
> -}
> -
> -static void parallel_child(int i915,
> - const struct intel_execution_engine2 *engine,
> - struct drm_i915_gem_relocation_entry *reloc,
> - uint32_t common)
> -{
> - igt_spin_t *spin = __igt_spin_new(i915, .engine = engine->flags);
> - struct drm_i915_gem_exec_object2 reloc_target = {
> - .handle = gem_create(i915, 32 * 1024 * 8),
> - .relocation_count = 32 * 1024,
> - .relocs_ptr = to_user_pointer(reloc),
> - };
> - struct drm_i915_gem_exec_object2 obj[3] = {
> - reloc_target,
> - { .handle = common },
> - spin->obj[1],
> - };
> - struct drm_i915_gem_execbuffer2 execbuf = {
> - .buffers_ptr = to_user_pointer(obj),
> - .buffer_count = ARRAY_SIZE(obj),
> - .flags = engine->flags | I915_EXEC_HANDLE_LUT,
> - };
> - struct sigaction act = {
> - .sa_handler = sighandler,
> - };
> - unsigned long count = 0;
> -
> - sigaction(SIGINT, &act, NULL);
> - while (!READ_ONCE(stop)) {
> - int err = __execbuf(i915, &execbuf);
> - if (err == -EINTR)
> - break;
> -
> - igt_assert_eq(err, 0);
> - count++;
> - }
> -
> - igt_info("%s: count %lu\n", engine->name, count);
> - igt_spin_free(i915, spin);
> -}
> -
> -static void kill_children(int sig)
> -{
> - signal(sig, SIG_IGN);
> - kill(-getpgrp(), SIGINT);
> - signal(sig, SIG_DFL);
> -}
> -
> -static void parallel(int i915)
> -{
> - const struct intel_execution_engine2 *e;
> - struct drm_i915_gem_relocation_entry *reloc;
> - uint32_t common = gem_create(i915, 4096);
> - uint32_t batch = batch_create(i915);
> - unsigned long reloc_sz;
> -
> - reloc = parallel_relocs(32 * 1024, &reloc_sz);
> -
> - stop = 0;
> - __for_each_physical_engine(i915, e) {
> - igt_fork(child, 1)
> - parallel_child(i915, e, reloc, common);
> - }
> - sleep(2);
> -
> - if (gem_scheduler_has_preemption(i915)) {
> - uint32_t ctx = gem_context_clone_with_engines(i915, 0);
> -
> - __for_each_physical_engine(i915, e) {
> - struct drm_i915_gem_exec_object2 obj[2] = {
> - { .handle = common },
> - { .handle = batch },
> - };
> - struct drm_i915_gem_execbuffer2 execbuf = {
> - .buffers_ptr = to_user_pointer(obj),
> - .buffer_count = ARRAY_SIZE(obj),
> - .flags = e->flags,
> - .rsvd1 = ctx,
> - };
> - gem_execbuf(i915, &execbuf);
> - }
> -
> - gem_context_destroy(i915, ctx);
> - }
> - gem_sync(i915, batch);
> - gem_close(i915, batch);
> -
> - kill_children(SIGINT);
> - igt_waitchildren();
> -
> - gem_close(i915, common);
> - munmap(reloc, reloc_sz);
> -}
> -
> #define CONCURRENT 1024
>
> static uint64_t concurrent_relocs(int i915, int idx, int count)
> @@ -1487,16 +1278,6 @@ igt_main
> }
> }
>
> - igt_subtest_with_dynamic("basic-wide-active") {
> - __for_each_physical_engine(fd, e) {
> - igt_dynamic_f("%s", e->name)
> - wide_active(fd, e->flags);
> - }
> - }
> -
> - igt_subtest("basic-parallel")
> - parallel(fd);
> -
> igt_subtest("basic-concurrent0")
> concurrent(fd, 0);
> igt_subtest("basic-concurrent16")
> --
> 2.28.0
>
More information about the igt-dev
mailing list