From patchwork Fri Oct 13 11:00:17 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Micha=C5=82_Winiarski?= X-Patchwork-Id: 10004155 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 00A46602B3 for ; Fri, 13 Oct 2017 11:00:35 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E66C129029 for ; Fri, 13 Oct 2017 11:00:34 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id DB35C2902B; Fri, 13 Oct 2017 11:00:34 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id D1D7A29029 for ; Fri, 13 Oct 2017 11:00:33 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 6AFE26EAE2; Fri, 13 Oct 2017 11:00:33 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id A3D1B6EADF for ; Fri, 13 Oct 2017 11:00:31 +0000 (UTC) Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 13 Oct 2017 04:00:30 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.43,370,1503385200"; d="scan'208";a="322849912" Received: from irsmsx102.ger.corp.intel.com ([163.33.3.155]) by fmsmga004.fm.intel.com with ESMTP; 13 Oct 2017 04:00:29 -0700 Received: from localhost (172.28.171.152) by IRSMSX102.ger.corp.intel.com (163.33.3.155) with Microsoft SMTP Server (TLS) id 14.3.319.2; Fri, 13 Oct 2017 12:00:28 +0100 From: =?UTF-8?q?Micha=C5=82=20Winiarski?= To: Date: Fri, 13 Oct 2017 13:00:17 +0200 Message-ID: <20171013110020.32078-1-michal.winiarski@intel.com> X-Mailer: git-send-email 2.13.5 MIME-Version: 1.0 X-Originating-IP: [172.28.171.152] Subject: [Intel-gfx] [PATCH i-g-t 1/4] lib: Extract helpers for determining submission method X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" X-Virus-Scanned: ClamAV using ClamSMTP Couple of tests are using either determining submission method, or pretty printing. Let's move those to helpers in lib. Signed-off-by: MichaƂ Winiarski Cc: Arkadiusz Hiler Cc: Chris Wilson Cc: Katarzyna Dec Cc: Petri Latvala Acked-by: Arkadiusz Hiler --- lib/igt_aux.c | 18 +++++++++++++ lib/igt_aux.h | 2 ++ lib/igt_gt.c | 63 +++++++++++++++++++++++++++++++++++++++++++++ lib/igt_gt.h | 7 +++++ tests/gem_ctx_thrash.c | 19 ++------------ tests/gem_eio.c | 45 ++------------------------------ tests/gem_exec_await.c | 39 ++-------------------------- tests/gem_exec_fence.c | 41 +++-------------------------- tests/gem_exec_latency.c | 31 +--------------------- tests/gem_exec_nop.c | 31 +--------------------- tests/gem_exec_schedule.c | 40 ++-------------------------- tests/gem_exec_whisper.c | 31 +--------------------- tests/gem_read_read_speed.c | 17 +----------- tests/gem_sync.c | 31 +--------------------- 14 files changed, 106 insertions(+), 309 deletions(-) diff --git a/lib/igt_aux.c b/lib/igt_aux.c index fa6594c3..0c77f85f 100644 --- a/lib/igt_aux.c +++ b/lib/igt_aux.c @@ -1455,6 +1455,24 @@ igt_show_stat(proc_t *info, int *state, const char *fn) ++*state; } +void igt_show_submission_method(int fd) +{ + const unsigned flags = gem_submission_method(fd); + + if (flags & GEM_SUBMISSION_GUC) { + igt_info("Using GuC submission\n"); + return; + } + + if (flags & GEM_SUBMISSION_EXECLISTS) { + igt_info("Using Execlists submission\n"); + return; + } + + igt_info("Using Legacy submission%s\n", + flags & GEM_SUBMISSION_SEMAPHORES ? ", with semaphores" : ""); +} + static void __igt_lsof_fds(proc_t *proc_info, int *state, char *proc_path, const char *dir) { diff --git a/lib/igt_aux.h b/lib/igt_aux.h index 499a1679..b79c8e5c 100644 --- a/lib/igt_aux.h +++ b/lib/igt_aux.h @@ -278,6 +278,8 @@ void igt_unlock_mem(void); ret_; \ }) +void igt_show_submission_method(int fd); + struct igt_mean; void igt_start_siglatency(int sig); /* 0 => SIGRTMIN (default) */ double igt_stop_siglatency(struct igt_mean *result); diff --git a/lib/igt_gt.c b/lib/igt_gt.c index b3f3b380..de38656a 100644 --- a/lib/igt_gt.c +++ b/lib/igt_gt.c @@ -568,3 +568,66 @@ bool gem_can_store_dword(int fd, unsigned int engine) return true; } + +/** + * gem_submission_method: + * @fd: open i915 drm file descriptor + * + * Returns: Submission method bitmap. + */ +unsigned gem_submission_method(int fd) +{ + unsigned flags = 0; + bool active; + int dir; + + dir = igt_sysfs_open_parameters(fd); + if (dir < 0) + return 0; + + active = igt_sysfs_get_boolean(dir, "enable_guc_submission"); + if (active) { + flags |= GEM_SUBMISSION_GUC | GEM_SUBMISSION_EXECLISTS; + goto out; + } + + active = igt_sysfs_get_boolean(dir, "enable_execlists"); + if (active) { + flags |= GEM_SUBMISSION_EXECLISTS; + goto out; + } + + active = igt_sysfs_get_boolean(dir, "semaphores"); + if (active) { + flags |= GEM_SUBMISSION_SEMAPHORES; + } + +out: + close(dir); + return flags; +} + + +/** + * gem_has_semaphores: + * @fd: open i915 drm file descriptor + * + * Feature test macro to query whether the driver is using semaphores for + * synchronization between engines. + */ +bool gem_has_semaphores(int fd) +{ + return gem_submission_method(fd) & GEM_SUBMISSION_SEMAPHORES; +} + +/** + * gem_has_execlists: + * @fd: open i915 drm file descriptor + * + * Feature test macro to query whether the driver is using execlists as a + * hardware submission method. + */ +bool gem_has_execlists(int fd) +{ + return gem_submission_method(fd) & GEM_SUBMISSION_EXECLISTS; +} diff --git a/lib/igt_gt.h b/lib/igt_gt.h index 2579cbd3..6b8f78eb 100644 --- a/lib/igt_gt.h +++ b/lib/igt_gt.h @@ -80,4 +80,11 @@ extern const struct intel_execution_engine { bool gem_can_store_dword(int fd, unsigned int engine); +#define GEM_SUBMISSION_SEMAPHORES (1 << 0) +#define GEM_SUBMISSION_EXECLISTS (1 << 1) +#define GEM_SUBMISSION_GUC (1 << 2) +unsigned gem_submission_method(int fd); +bool gem_has_semaphores(int fd); +bool gem_has_execlists(int fd); + #endif /* IGT_GT_H */ diff --git a/tests/gem_ctx_thrash.c b/tests/gem_ctx_thrash.c index f79a1f4f..c0740b9f 100644 --- a/tests/gem_ctx_thrash.c +++ b/tests/gem_ctx_thrash.c @@ -42,21 +42,6 @@ static void xchg_int(void *array, unsigned i, unsigned j) igt_swap(A[i], A[j]); } -static bool has_execlists(int fd) -{ - bool enabled = false; - int dir; - - dir = igt_sysfs_open_parameters(fd); - if (dir < 0) - return false; - - enabled = igt_sysfs_get_boolean(dir, "enable_execlists"); - close(dir); - - return enabled; -} - static unsigned context_size(int fd) { const int gen = intel_gen(intel_get_drm_devid(fd)); @@ -86,7 +71,7 @@ static unsigned get_num_contexts(int fd, int num_engines) ggtt_size = gem_global_aperture_size(fd); size = context_size(fd); - if (has_execlists(fd)) { + if (gem_has_execlists(fd)) { size += 4 << 12; /* ringbuffer as well */ if (num_engines) /* one per engine with execlists */ size *= num_engines; @@ -95,7 +80,7 @@ static unsigned get_num_contexts(int fd, int num_engines) count = 3 * (ggtt_size / size) / 2; igt_info("Creating %lld contexts (assuming of size %lld%s)\n", (long long)count, (long long)size, - has_execlists(fd) ? " with execlists" : ""); + gem_has_execlists(fd) ? " with execlists" : ""); intel_require_memory(count, size, CHECK_RAM | CHECK_SWAP); return count; diff --git a/tests/gem_eio.c b/tests/gem_eio.c index 899cb627..26575292 100644 --- a/tests/gem_eio.c +++ b/tests/gem_eio.c @@ -411,45 +411,6 @@ static void test_inflight_internal(int fd) trigger_reset(fd); } -#define HAVE_EXECLISTS 0x1 -#define HAVE_GUC 0x2 -#define HAVE_SEMAPHORES 0x4 - -static unsigned print_welcome(int fd) -{ - unsigned flags = 0; - bool active; - int dir; - - dir = igt_sysfs_open_parameters(fd); - if (dir < 0) - return 0; - - active = igt_sysfs_get_boolean(dir, "enable_guc_submission"); - if (active) { - igt_info("Using GuC submission\n"); - flags |= HAVE_GUC | HAVE_EXECLISTS; - goto out; - } - - active = igt_sysfs_get_boolean(dir, "enable_execlists"); - if (active) { - igt_info("Using Execlists submission\n"); - flags |= HAVE_EXECLISTS; - goto out; - } - - active = igt_sysfs_get_boolean(dir, "semaphores"); - if (active) - flags |= HAVE_SEMAPHORES; - igt_info("Using Legacy submission%s\n", - active ? ", with semaphores" : ""); - -out: - close(dir); - return flags; -} - static int fd = -1; static void @@ -461,8 +422,6 @@ exit_handler(int sig) igt_main { - unsigned int caps = 0; - igt_skip_on_simulation(); igt_fixture { @@ -472,7 +431,7 @@ igt_main igt_force_gpu_reset(fd); igt_install_exit_handler(exit_handler); - caps = print_welcome(fd); + igt_show_submission_method(fd); igt_require_gem(fd); igt_require_hang_ring(fd, I915_EXEC_DEFAULT); } @@ -496,7 +455,7 @@ igt_main test_inflight_external(fd); igt_subtest("in-flight-internal") { - igt_skip_on(caps & HAVE_SEMAPHORES); + igt_skip_on(gem_has_semaphores(fd)); test_inflight_internal(fd); } diff --git a/tests/gem_exec_await.c b/tests/gem_exec_await.c index fb5c0f30..783accd5 100644 --- a/tests/gem_exec_await.c +++ b/tests/gem_exec_await.c @@ -246,40 +246,6 @@ static void wide(int fd, int ring_size, int timeout, unsigned int flags) free(exec); } -#define HAVE_EXECLISTS 0x1 -static unsigned int print_welcome(int fd) -{ - unsigned int result = 0; - bool active; - int dir; - - dir = igt_sysfs_open_parameters(fd); - if (dir < 0) - return 0; - - active = igt_sysfs_get_boolean(dir, "enable_guc_submission"); - if (active) { - igt_info("Using GuC submission\n"); - result |= HAVE_EXECLISTS; - goto out; - } - - active = igt_sysfs_get_boolean(dir, "enable_execlists"); - if (active) { - igt_info("Using Execlists submission\n"); - result |= HAVE_EXECLISTS; - goto out; - } - - active = igt_sysfs_get_boolean(dir, "semaphores"); - igt_info("Using Legacy submission%s\n", - active ? ", with semaphores" : ""); - -out: - close(dir); - return result; -} - struct cork { int device; uint32_t handle; @@ -374,14 +340,13 @@ igt_main int device = -1; igt_fixture { - unsigned int caps; device = drm_open_driver(DRIVER_INTEL); igt_require_gem(device); - caps = print_welcome(device); + igt_show_submission_method(device); ring_size = measure_ring_size(device) - 10; - if (!(caps & HAVE_EXECLISTS)) + if (!gem_has_execlists(device)) ring_size /= 2; igt_info("Ring size: %d batches\n", ring_size); igt_require(ring_size > 0); diff --git a/tests/gem_exec_fence.c b/tests/gem_exec_fence.c index 477386b4..4972747e 100644 --- a/tests/gem_exec_fence.c +++ b/tests/gem_exec_fence.c @@ -692,40 +692,6 @@ static void test_fence_flip(int i915) igt_skip_on_f(1, "no fence-in for atomic flips\n"); } -#define HAVE_EXECLISTS 0x1 -static unsigned int print_welcome(int fd) -{ - unsigned int result = 0; - bool active; - int dir; - - dir = igt_sysfs_open_parameters(fd); - if (dir < 0) - return 0; - - active = igt_sysfs_get_boolean(dir, "enable_guc_submission"); - if (active) { - igt_info("Using GuC submission\n"); - result |= HAVE_EXECLISTS; - goto out; - } - - active = igt_sysfs_get_boolean(dir, "enable_execlists"); - if (active) { - igt_info("Using Execlists submission\n"); - result |= HAVE_EXECLISTS; - goto out; - } - - active = igt_sysfs_get_boolean(dir, "semaphores"); - igt_info("Using Legacy submission%s\n", - active ? ", with semaphores" : ""); - -out: - close(dir); - return result; -} - static bool has_submit_fence(int fd) { struct drm_i915_getparam gp; @@ -1458,7 +1424,6 @@ static void test_syncobj_channel(int fd) igt_main { const struct intel_execution_engine *e; - unsigned int caps = 0; int i915 = -1; igt_skip_on_simulation(); @@ -1469,7 +1434,7 @@ igt_main igt_require(gem_has_exec_fence(i915)); gem_require_mmap_wc(i915); - caps = print_welcome(i915); + igt_show_submission_method(i915); } for (e = intel_execution_engines; e->name; e++) { @@ -1541,7 +1506,7 @@ igt_main igt_info("Ring size: %ld batches\n", ring_size); igt_require(ring_size); - test_long_history(i915, ring_size, caps); + test_long_history(i915, ring_size, 0); } igt_subtest("expired-history") { @@ -1550,7 +1515,7 @@ igt_main igt_info("Ring size: %ld batches\n", ring_size); igt_require(ring_size); - test_long_history(i915, ring_size, caps | EXPIRED); + test_long_history(i915, ring_size, EXPIRED); } igt_subtest("flip") { diff --git a/tests/gem_exec_latency.c b/tests/gem_exec_latency.c index f86dfcb5..7b11f593 100644 --- a/tests/gem_exec_latency.c +++ b/tests/gem_exec_latency.c @@ -407,35 +407,6 @@ static void latency_from_ring(int fd, gem_close(fd, obj[2].handle); } -static void print_welcome(int fd) -{ - bool active; - int dir; - - dir = igt_sysfs_open_parameters(fd); - if (dir < 0) - return; - - active = igt_sysfs_get_boolean(dir, "enable_guc_submission"); - if (active) { - igt_info("Using GuC submission\n"); - goto out; - } - - active = igt_sysfs_get_boolean(dir, "enable_execlists"); - if (active) { - igt_info("Using Execlists submission\n"); - goto out; - } - - active = igt_sysfs_get_boolean(dir, "semaphores"); - igt_info("Using Legacy submission%s\n", - active ? ", with semaphores" : ""); - -out: - close(dir); -} - igt_main { const struct intel_execution_engine *e; @@ -446,7 +417,7 @@ igt_main igt_require_gem(device); gem_require_mmap_wc(device); - print_welcome(device); + igt_show_submission_method(device); ring_size = measure_ring_size(device); igt_info("Ring size: %d batches\n", ring_size); diff --git a/tests/gem_exec_nop.c b/tests/gem_exec_nop.c index 0af64557..6d62e94a 100644 --- a/tests/gem_exec_nop.c +++ b/tests/gem_exec_nop.c @@ -665,35 +665,6 @@ static void preempt(int fd, uint32_t handle, ring_name, count, elapsed(&start, &now)*1e6 / count); } -static void print_welcome(int fd) -{ - bool active; - int dir; - - dir = igt_sysfs_open_parameters(fd); - if (dir < 0) - return; - - active = igt_sysfs_get_boolean(dir, "enable_guc_submission"); - if (active) { - igt_info("Using GuC submission\n"); - goto out; - } - - active = igt_sysfs_get_boolean(dir, "enable_execlists"); - if (active) { - igt_info("Using Execlists submission\n"); - goto out; - } - - active = igt_sysfs_get_boolean(dir, "semaphores"); - igt_info("Using Legacy submission%s\n", - active ? ", with semaphores" : ""); - -out: - close(dir); -} - static unsigned int has_scheduler(int fd) { drm_i915_getparam_t gp; @@ -727,7 +698,7 @@ igt_main device = drm_open_driver(DRIVER_INTEL); igt_require_gem(device); - print_welcome(device); + igt_show_submission_method(device); sched_caps = has_scheduler(device); handle = gem_create(device, 4096); diff --git a/tests/gem_exec_schedule.c b/tests/gem_exec_schedule.c index ad3688cf..b65482ce 100644 --- a/tests/gem_exec_schedule.c +++ b/tests/gem_exec_schedule.c @@ -1000,45 +1000,9 @@ static unsigned int has_scheduler(int fd) return caps; } -#define HAVE_EXECLISTS 0x1 -#define HAVE_GUC 0x2 -static unsigned print_welcome(int fd) -{ - unsigned flags = 0; - bool active; - int dir; - - dir = igt_sysfs_open_parameters(fd); - if (dir < 0) - return 0; - - active = igt_sysfs_get_boolean(dir, "enable_guc_submission"); - if (active) { - igt_info("Using GuC submission\n"); - flags |= HAVE_GUC | HAVE_EXECLISTS; - goto out; - } - - active = igt_sysfs_get_boolean(dir, "enable_execlists"); - if (active) { - igt_info("Using Execlists submission\n"); - flags |= HAVE_EXECLISTS; - goto out; - } - - active = igt_sysfs_get_boolean(dir, "semaphores"); - igt_info("Using Legacy submission%s\n", - active ? ", with semaphores" : ""); - -out: - close(dir); - return flags; -} - igt_main { const struct intel_execution_engine *e; - unsigned int exec_caps = 0; unsigned int sched_caps = 0; int fd = -1; @@ -1046,7 +1010,7 @@ igt_main igt_fixture { fd = drm_open_driver_master(DRIVER_INTEL); - exec_caps = print_welcome(fd); + igt_show_submission_method(fd); sched_caps = has_scheduler(fd); igt_require_gem(fd); gem_require_mmap_wc(fd); @@ -1135,7 +1099,7 @@ igt_main ctx_has_priority(fd); /* need separate rings */ - igt_require(exec_caps & HAVE_EXECLISTS); + igt_require(gem_has_execlists(fd)); } for (e = intel_execution_engines; e->name; e++) { diff --git a/tests/gem_exec_whisper.c b/tests/gem_exec_whisper.c index 15989616..2707171a 100644 --- a/tests/gem_exec_whisper.c +++ b/tests/gem_exec_whisper.c @@ -552,35 +552,6 @@ static void whisper(int fd, unsigned engine, unsigned flags) close(debugfs); } -static void print_welcome(int fd) -{ - bool active; - int dir; - - dir = igt_sysfs_open_parameters(fd); - if (dir < 0) - return; - - active = igt_sysfs_get_boolean(dir, "enable_guc_submission"); - if (active) { - igt_info("Using GuC submission\n"); - goto out; - } - - active = igt_sysfs_get_boolean(dir, "enable_execlists"); - if (active) { - igt_info("Using Execlists submission\n"); - goto out; - } - - active = igt_sysfs_get_boolean(dir, "semaphores"); - igt_info("Using Legacy submission%s\n", - active ? ", with semaphores" : ""); - -out: - close(dir); -} - igt_main { const struct mode { @@ -615,7 +586,7 @@ igt_main fd = drm_open_driver_master(DRIVER_INTEL); igt_require_gem(fd); igt_require(gem_can_store_dword(fd, 0)); - print_welcome(fd); + igt_show_submission_method(fd); igt_fork_hang_detector(fd); } diff --git a/tests/gem_read_read_speed.c b/tests/gem_read_read_speed.c index c1d30f24..523e9c24 100644 --- a/tests/gem_read_read_speed.c +++ b/tests/gem_read_read_speed.c @@ -49,21 +49,6 @@ igt_render_copyfunc_t rendercopy; struct intel_batchbuffer *batch; int width, height; -static int semaphores_enabled(int fd) -{ - bool enabled = false; - int dir; - - dir = igt_sysfs_open_parameters(fd); - if (dir < 0) - return false; - - enabled = igt_sysfs_get_boolean(dir, "semaphores"); - close(dir); - - return enabled; -} - static drm_intel_bo *rcs_copy_bo(drm_intel_bo *dst, drm_intel_bo *src) { struct igt_buf d = { @@ -212,7 +197,7 @@ igt_main batch = intel_batchbuffer_alloc(bufmgr, devid); - igt_info("Semaphores: %d\n", semaphores_enabled(fd)); + igt_show_submission_method(fd); } for (i = 0; sizes[i] != 0; i++) { diff --git a/tests/gem_sync.c b/tests/gem_sync.c index c9e2f014..754c3202 100644 --- a/tests/gem_sync.c +++ b/tests/gem_sync.c @@ -807,35 +807,6 @@ preempt(int fd, unsigned ring, int num_children, int timeout) gem_context_destroy(fd, ctx[0]); } -static void print_welcome(int fd) -{ - bool active; - int dir; - - dir = igt_sysfs_open_parameters(fd); - if (dir < 0) - return; - - active = igt_sysfs_get_boolean(dir, "enable_guc_submission"); - if (active) { - igt_info("Using GuC submission\n"); - goto out; - } - - active = igt_sysfs_get_boolean(dir, "enable_execlists"); - if (active) { - igt_info("Using Execlists submission\n"); - goto out; - } - - active = igt_sysfs_get_boolean(dir, "semaphores"); - igt_info("Using Legacy submission %s\n", - active ? ", with semaphores" : ""); - -out: - close(dir); -} - static unsigned int has_scheduler(int fd) { drm_i915_getparam_t gp; @@ -869,7 +840,7 @@ igt_main igt_fixture { fd = drm_open_driver(DRIVER_INTEL); igt_require_gem(fd); - print_welcome(fd); + igt_show_submission_method(fd); sched_caps = has_scheduler(fd); igt_fork_hang_detector(fd);