diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2016-03-14 13:36:56 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2016-03-14 14:17:12 +0000 |
commit | e5abd779cfa1135bdb7218f7b069eb60b553f6da (patch) | |
tree | e6a7b3bf2e67aeb05f37c816d5a4e4c6f274030a | |
parent | 3d9bcd080498052e73021efdb1e38b5107c0fcc8 (diff) |
tests/gem_ring_sync_loop: Exercise all rings
Fix the engine selection to exercise all possible rings and in doing so
completely obsoletes gem_multi_bsd_sync_loop.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r-- | tests/Makefile.sources | 1 | ||||
-rw-r--r-- | tests/gem_multi_bsd_sync_loop.c | 162 | ||||
-rw-r--r-- | tests/gem_ring_sync_loop.c | 12 |
3 files changed, 9 insertions, 166 deletions
diff --git a/tests/Makefile.sources b/tests/Makefile.sources index 70cfb26b..26413607 100644 --- a/tests/Makefile.sources +++ b/tests/Makefile.sources @@ -156,7 +156,6 @@ TESTS_progs = \ gem_render_tiled_blits \ gem_ring_sync_copy \ gem_ring_sync_loop \ - gem_multi_bsd_sync_loop \ gem_seqno_wrap \ gem_set_tiling_vs_gtt \ gem_set_tiling_vs_pwrite \ diff --git a/tests/gem_multi_bsd_sync_loop.c b/tests/gem_multi_bsd_sync_loop.c deleted file mode 100644 index 1e03544f..00000000 --- a/tests/gem_multi_bsd_sync_loop.c +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - * - * Authors: - * Daniel Vetter <daniel.vetter@ffwll.ch> (based on gem_ring_sync_loop_*.c) - * Zhao Yakui <yakui.zhao@intel.com> - * - */ - -#include "igt.h" -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <fcntl.h> -#include <inttypes.h> -#include <errno.h> -#include <sys/stat.h> -#include <sys/time.h> -#include "drm.h" -#include "intel_bufmgr.h" -#include "i830_reg.h" - -IGT_TEST_DESCRIPTION("Basic check of ring<->ring sync using a dummy reloc."); - -static drm_intel_bufmgr *bufmgr; -struct intel_batchbuffer *batch; -static drm_intel_bo *target_buffer; - -#define NUM_FD 50 - -static int mfd[NUM_FD]; -static drm_intel_bufmgr *mbufmgr[NUM_FD]; -static struct intel_batchbuffer *mbatch[NUM_FD]; -static drm_intel_bo *mbuffer[NUM_FD]; - - -/* - * Testcase: Basic check of ring<->ring sync using a dummy reloc - * - * Extremely efficient at catching missed irqs with semaphores=0 ... - */ - -#define MI_COND_BATCH_BUFFER_END (0x36<<23 | 1) -#define MI_DO_COMPARE (1<<21) - -static void -store_dword_loop(int fd) -{ - int i; - int num_rings = gem_get_num_rings(fd); - - srandom(0xdeadbeef); - - for (i = 0; i < SLOW_QUICK(0x100000, 10); i++) { - int ring, mindex; - ring = random() % num_rings + 1; - mindex = random() % NUM_FD; - batch = mbatch[mindex]; - if (ring == I915_EXEC_RENDER) { - BEGIN_BATCH(4, 1); - OUT_BATCH(MI_COND_BATCH_BUFFER_END | MI_DO_COMPARE); - OUT_BATCH(0xffffffff); /* compare dword */ - OUT_RELOC(mbuffer[mindex], I915_GEM_DOMAIN_RENDER, - I915_GEM_DOMAIN_RENDER, 0); - OUT_BATCH(MI_NOOP); - ADVANCE_BATCH(); - } else { - BEGIN_BATCH(4, 1); - OUT_BATCH(MI_FLUSH_DW | 1); - OUT_BATCH(0); /* reserved */ - OUT_RELOC(mbuffer[mindex], I915_GEM_DOMAIN_RENDER, - I915_GEM_DOMAIN_RENDER, 0); - OUT_BATCH(MI_NOOP | (1<<22) | (0xf)); - ADVANCE_BATCH(); - } - intel_batchbuffer_flush_on_ring(batch, ring); - } - - drm_intel_bo_map(target_buffer, 0); - // map to force waiting on rendering - drm_intel_bo_unmap(target_buffer); -} - -igt_simple_main -{ - int fd; - int devid; - int i; - - fd = drm_open_driver(DRIVER_INTEL); - devid = intel_get_drm_devid(fd); - gem_require_ring(fd, I915_EXEC_BLT); - - - bufmgr = drm_intel_bufmgr_gem_init(fd, 4096); - igt_assert_f(bufmgr, "fail to initialize the buf manager\n"); - drm_intel_bufmgr_gem_enable_reuse(bufmgr); - - - target_buffer = drm_intel_bo_alloc(bufmgr, "target bo", 4096, 4096); - igt_assert_f(target_buffer, "fail to create the gem bo\n"); - - /* Create multiple drm_fd and map one gem_object among multi drm_fd */ - { - unsigned int target_flink; - char buffer_name[32]; - igt_assert(dri_bo_flink(target_buffer, &target_flink) == 0); - - for (i = 0; i < NUM_FD; i++) { - sprintf(buffer_name, "Target buffer %d\n", i); - mfd[i] = drm_open_driver(DRIVER_INTEL); - mbufmgr[i] = drm_intel_bufmgr_gem_init(mfd[i], 4096); - igt_assert_f(mbufmgr[i], - "fail to initialize buf manager for drm_fd %d\n", - mfd[i]); - drm_intel_bufmgr_gem_enable_reuse(mbufmgr[i]); - mbatch[i] = intel_batchbuffer_alloc(mbufmgr[i], devid); - igt_assert_f(mbatch[i], - "fail to create batchbuffer for drm_fd %d\n", - mfd[i]); - mbuffer[i] = intel_bo_gem_create_from_name(mbufmgr[i], buffer_name, target_flink); - igt_assert_f(mbuffer[i], - "fail to create buffer bo from global " - "gem handle %d for drm_fd %d\n", - target_flink, mfd[i]); - } - } - - store_dword_loop(fd); - - { - for (i = 0; i < NUM_FD; i++) { - dri_bo_unreference(mbuffer[i]); - intel_batchbuffer_free(mbatch[i]); - drm_intel_bufmgr_destroy(mbufmgr[i]); - close(mfd[i]); - } - } - drm_intel_bo_unreference(target_buffer); - drm_intel_bufmgr_destroy(bufmgr); - - close(fd); -} diff --git a/tests/gem_ring_sync_loop.c b/tests/gem_ring_sync_loop.c index 52181951..505ba344 100644 --- a/tests/gem_ring_sync_loop.c +++ b/tests/gem_ring_sync_loop.c @@ -39,12 +39,19 @@ static void sync_loop(int fd) { const uint32_t bbe = MI_BATCH_BUFFER_END; - int num_rings = gem_get_num_rings(fd); struct drm_i915_gem_execbuffer2 execbuf; struct drm_i915_gem_exec_object2 object[2]; struct drm_i915_gem_relocation_entry reloc[1]; + unsigned engines[16]; + unsigned nengine; + unsigned engine; int i; + nengine = 0; + for_each_engine(fd, engine) + engines[nengine++] = engine; + igt_require(nengine); + memset(object, 0, sizeof(object)); object[0].handle = gem_create(fd, 4096); object[0].flags = EXEC_OBJECT_WRITE; @@ -74,7 +81,7 @@ sync_loop(int fd) srandom(0xdeadbeef); for (i = 0; i < SLOW_QUICK(0x100000, 10); i++) { - execbuf.flags = random() % num_rings + 1; + execbuf.flags = engines[rand() % nengine]; gem_execbuf(fd, &execbuf); } @@ -88,7 +95,6 @@ igt_simple_main int fd; fd = drm_open_driver(DRIVER_INTEL); - igt_require(gem_get_num_rings(fd) > 1); intel_detect_and_clear_missed_interrupts(fd); sync_loop(fd); |