Commit e2ee529b authored by Michał Winiarski's avatar Michał Winiarski Committed by Arkadiusz Hiler

lib/i915: Move submission related helpers to lib/i915/gem_submission

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: f6dfe556 ("lib: Extract helpers for determining submission method")
Signed-off-by: Michał Winiarski's avatarMichał Winiarski <michal.winiarski@intel.com>
Cc: Arkadiusz Hiler <arkadiusz.hiler@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Chris Wilson's avatarChris Wilson <chris@chris-wilson.co.uk>
parent d4a4fbec
......@@ -50,6 +50,7 @@
<title>igt/i915 API Reference</title>
<xi:include href="xml/gem_context.xml"/>
<xi:include href="xml/gem_scheduler.xml"/>
<xi:include href="xml/gem_submission.xml"/>
</chapter>
<xi:include href="xml/igt_test_programs.xml"/>
......
......@@ -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 \
......
/*
* 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 <stdbool.h>
#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;
}
/*
* 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 */
......@@ -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)
{
......
......@@ -33,6 +33,8 @@
#include <stddef.h>
#include <sys/time.h>
#include <i915/gem_submission.h>
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);
......
......@@ -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;
}
......@@ -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 */
......@@ -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',
......
......@@ -431,7 +431,7 @@ igt_main
igt_force_gpu_reset(fd);
igt_install_exit_handler(exit_handler);
gem_show_submission_method(fd);
gem_submission_print_method(fd);
igt_require_gem(fd);
igt_require_hang_ring(fd, I915_EXEC_DEFAULT);
}
......
......@@ -343,7 +343,7 @@ igt_main
device = drm_open_driver(DRIVER_INTEL);
igt_require_gem(device);
gem_show_submission_method(device);
gem_submission_print_method(device);
ring_size = measure_ring_size(device) - 10;
if (!gem_has_execlists(device))
......
......@@ -1432,7 +1432,7 @@ igt_main
igt_require(gem_has_exec_fence(i915));
gem_require_mmap_wc(i915);
gem_show_submission_method(i915);
gem_submission_print_method(i915);
}
for (e = intel_execution_engines; e->name; e++) {
......
......@@ -417,7 +417,7 @@ igt_main
igt_require_gem(device);
gem_require_mmap_wc(device);
gem_show_submission_method(device);
gem_submission_print_method(device);
ring_size = measure_ring_size(device);
igt_info("Ring size: %d batches\n", ring_size);
......
......@@ -652,7 +652,7 @@ igt_main
device = drm_open_driver(DRIVER_INTEL);
igt_require_gem(device);
gem_show_submission_method(device);
gem_submission_print_method(device);
gem_scheduler_print_capability(device);
handle = gem_create(device, 4096);
......
......@@ -957,7 +957,7 @@ igt_main
igt_fixture {
fd = drm_open_driver_master(DRIVER_INTEL);
gem_show_submission_method(fd);
gem_submission_print_method(fd);
gem_scheduler_print_capability(fd);
igt_require_gem(fd);
gem_require_mmap_wc(fd);
......
......@@ -553,7 +553,7 @@ igt_main
fd = drm_open_driver_master(DRIVER_INTEL);
igt_require_gem(fd);
igt_require(gem_can_store_dword(fd, 0));
gem_show_submission_method(fd);
gem_submission_print_method(fd);
igt_fork_hang_detector(fd);
}
......
......@@ -197,7 +197,7 @@ igt_main
batch = intel_batchbuffer_alloc(bufmgr, devid);
gem_show_submission_method(fd);
gem_submission_print_method(fd);
}
for (i = 0; sizes[i] != 0; i++) {
......
......@@ -793,7 +793,7 @@ igt_main
igt_fixture {
fd = drm_open_driver(DRIVER_INTEL);
igt_require_gem(fd);
gem_show_submission_method(fd);
gem_submission_print_method(fd);
gem_scheduler_print_capability(fd);
igt_fork_hang_detector(fd);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment