From e2ee529bb96320da0968ae52d318883106f3fa55 Mon Sep 17 00:00:00 2001 From: Michał Winiarski Date: Wed, 18 Oct 2017 10:02:12 +0200 Subject: lib/i915: Move submission related helpers to lib/i915/gem_submission MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since I accidentally broke the build for some, by putting the pretty printer for submission inside ifdef HAVE_PROCPS, it's time to move the whole thing into lib/i915 while fixing this mistake. Let's also rename the pretty printer and add a doc to it as well as the section. Fixes: f6dfe556659f ("lib: Extract helpers for determining submission method") Signed-off-by: Michał Winiarski Cc: Arkadiusz Hiler Cc: Chris Wilson Reviewed-by: Chris Wilson --- lib/Makefile.sources | 2 + lib/i915/gem_submission.c | 128 ++++++++++++++++++++++++++++++++++++++++++++++ lib/i915/gem_submission.h | 35 +++++++++++++ lib/igt_aux.c | 18 ------- lib/igt_aux.h | 4 +- lib/igt_gt.c | 63 ----------------------- lib/igt_gt.h | 7 --- lib/meson.build | 2 + 8 files changed, 169 insertions(+), 90 deletions(-) create mode 100644 lib/i915/gem_submission.c create mode 100644 lib/i915/gem_submission.h (limited to 'lib') diff --git a/lib/Makefile.sources b/lib/Makefile.sources index 09c9ef9f..6e968d9f 100644 --- a/lib/Makefile.sources +++ b/lib/Makefile.sources @@ -7,6 +7,8 @@ lib_source_list = \ i915/gem_context.h \ i915/gem_scheduler.c \ i915/gem_scheduler.h \ + i915/gem_submission.c \ + i915/gem_submission.h \ i915_3d.h \ i915_reg.h \ i915_pciids.h \ diff --git a/lib/i915/gem_submission.c b/lib/i915/gem_submission.c new file mode 100644 index 00000000..efc3151f --- /dev/null +++ b/lib/i915/gem_submission.c @@ -0,0 +1,128 @@ +/* + * Copyright © 2017 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. + */ + +#include + +#include "igt_core.h" +#include "igt_sysfs.h" + +#include "i915/gem_submission.h" + +/** + * SECTION:gem_submission + * @short_description: Helpers for determining submission method + * @title: GEM Submission + * + * This helper library contains functions used for getting information on + * currently used hardware submission method. Different generations of hardware + * support different submission backends, currently we're distinguishing 3 + * different methods: legacy ringbuffer submission, execlists, GuC submission. + * For legacy ringbuffer submission, there's also a variation where we're using + * semaphores for synchronization between engines. + */ + +/** + * 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_submission_print_method: + * @fd: open i915 drm file descriptor + * + * Helper for pretty-printing currently used submission method + */ +void gem_submission_print_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" : ""); +} + +/** + * 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/i915/gem_submission.h b/lib/i915/gem_submission.h new file mode 100644 index 00000000..783ed7a0 --- /dev/null +++ b/lib/i915/gem_submission.h @@ -0,0 +1,35 @@ +/* + * Copyright © 2017 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. + */ + +#ifndef GEM_SUBMISSION_H +#define GEM_SUBMISSION_H + +#define GEM_SUBMISSION_SEMAPHORES (1 << 0) +#define GEM_SUBMISSION_EXECLISTS (1 << 1) +#define GEM_SUBMISSION_GUC (1 << 2) +unsigned gem_submission_method(int fd); +void gem_submission_print_method(int fd); +bool gem_has_semaphores(int fd); +bool gem_has_execlists(int fd); + +#endif /* GEM_SUBMISSION_H */ diff --git a/lib/igt_aux.c b/lib/igt_aux.c index c1082143..ee53559c 100644 --- a/lib/igt_aux.c +++ b/lib/igt_aux.c @@ -1493,24 +1493,6 @@ igt_show_stat(proc_t *info, int *state, const char *fn) ++*state; } -void gem_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 e4a48eba..0bd226be 100644 --- a/lib/igt_aux.h +++ b/lib/igt_aux.h @@ -33,6 +33,8 @@ #include #include +#include + extern drm_intel_bo **trash_bos; extern int num_trash_bos; @@ -280,8 +282,6 @@ void igt_unlock_mem(void); ret_; \ }) -void gem_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 601b03f6..f6cc20b0 100644 --- a/lib/igt_gt.c +++ b/lib/igt_gt.c @@ -607,66 +607,3 @@ 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 6b8f78eb..2579cbd3 100644 --- a/lib/igt_gt.h +++ b/lib/igt_gt.h @@ -80,11 +80,4 @@ 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/lib/meson.build b/lib/meson.build index f0125a6d..b31c68e4 100644 --- a/lib/meson.build +++ b/lib/meson.build @@ -4,6 +4,7 @@ lib_headers = [ 'i830_reg.h', 'i915/gem_context.h', 'i915/gem_scheduler.h', + 'i915/gem_submission.h', 'i915_3d.h', 'i915_reg.h', 'i915_pciids.h', @@ -52,6 +53,7 @@ lib_sources = [ 'drmtest.c', 'i915/gem_context.c', 'i915/gem_scheduler.c', + 'i915/gem_submission.c', 'igt_debugfs.c', 'igt_aux.c', 'igt_gt.c', -- cgit v1.2.3