[igt-dev] [PATCH i-g-t 01/79] lib/i915/gem_submission_measure: Take an optional intel_ctx_cfg_t
Jason Ekstrand
jason at jlekstrand.net
Thu Jun 17 19:12:08 UTC 2021
If provided, the engine (or ALL_ENGINES) is relative to the given
context config. This is intended to be transitional. We'll get rid of
all the __for_each_physical_engine stuff later.
---
lib/i915/gem_submission.c | 39 ++++++++++++++++++++++++++++------
lib/i915/gem_submission.h | 5 ++++-
tests/i915/gem_busy.c | 2 +-
tests/i915/gem_exec_await.c | 2 +-
tests/i915/gem_exec_fence.c | 2 +-
tests/i915/gem_exec_latency.c | 2 +-
tests/i915/gem_exec_schedule.c | 6 +++---
tests/i915/perf_pmu.c | 2 +-
8 files changed, 44 insertions(+), 16 deletions(-)
diff --git a/lib/i915/gem_submission.c b/lib/i915/gem_submission.c
index bd4bbb3ef..7c305d6d6 100644
--- a/lib/i915/gem_submission.c
+++ b/lib/i915/gem_submission.c
@@ -306,7 +306,7 @@ static void alarm_handler(int sig)
}
static unsigned int
-__measure_ringsize(int i915, unsigned int engine)
+__measure_ringsize(int i915, uint32_t ctx_id, unsigned int engine)
{
struct sigaction old_sa, sa = { .sa_handler = alarm_handler };
struct drm_i915_gem_exec_object2 obj[2];
@@ -323,6 +323,7 @@ __measure_ringsize(int i915, unsigned int engine)
memset(&execbuf, 0, sizeof(execbuf));
execbuf.buffers_ptr = to_user_pointer(&obj[1]);
execbuf.buffer_count = 1;
+ execbuf.rsvd1 = ctx_id;
execbuf.flags = engine;
gem_execbuf(i915, &execbuf);
@@ -372,8 +373,10 @@ __measure_ringsize(int i915, unsigned int engine)
return count / 2 - 2;
}
-unsigned int gem_submission_measure(int i915, unsigned int engine)
+unsigned int gem_submission_measure(int i915, const intel_ctx_cfg_t *cfg,
+ unsigned int engine)
{
+ const intel_ctx_t *ctx = NULL;
unsigned int size;
bool nonblock;
@@ -381,19 +384,41 @@ unsigned int gem_submission_measure(int i915, unsigned int engine)
if (!nonblock)
fcntl(i915, F_SETFL, fcntl(i915, F_GETFL) | O_NONBLOCK);
+ if (cfg) {
+ if (gem_has_contexts(i915))
+ ctx = intel_ctx_create(i915, cfg);
+ else
+ ctx = intel_ctx_0(i915);
+ }
+
if (engine == ALL_ENGINES) {
struct intel_execution_engine2 *e;
size = -1;
- __for_each_physical_engine(i915, e) {
- unsigned int this = __measure_ringsize(i915, e->flags);
- if (this < size)
- size = this;
+ if (ctx) {
+ for_each_ctx_engine(i915, ctx, e) {
+ unsigned int this = __measure_ringsize(i915, ctx->id, e->flags);
+ if (this < size)
+ size = this;
+ }
+ } else {
+ __for_each_physical_engine(i915, e) {
+ unsigned int this = __measure_ringsize(i915, 0, e->flags);
+ if (this < size)
+ size = this;
+ }
}
} else {
- size = __measure_ringsize(i915, engine);
+ if (ctx)
+ size = __measure_ringsize(i915, ctx->id, engine);
+ else
+ size = __measure_ringsize(i915, 0, engine);
}
+ if (ctx)
+ intel_ctx_destroy(i915, ctx);
+
+
if (!nonblock)
fcntl(i915, F_SETFL, fcntl(i915, F_GETFL) & ~O_NONBLOCK);
diff --git a/lib/i915/gem_submission.h b/lib/i915/gem_submission.h
index 0faba6a3e..a5497a5e2 100644
--- a/lib/i915/gem_submission.h
+++ b/lib/i915/gem_submission.h
@@ -26,6 +26,8 @@
#include <stdint.h>
+#include "intel_ctx.h"
+
#define GEM_SUBMISSION_SEMAPHORES (1 << 0)
#define GEM_SUBMISSION_EXECLISTS (1 << 1)
#define GEM_SUBMISSION_GUC (1 << 2)
@@ -46,7 +48,8 @@ static inline bool gem_has_cmdparser(int i915, uint32_t engine)
bool gem_has_blitter(int i915);
void gem_require_blitter(int i915);
-unsigned int gem_submission_measure(int i915, unsigned int engine);
+unsigned int gem_submission_measure(int i915, const intel_ctx_cfg_t *cfg,
+ unsigned int engine);
void gem_test_engine(int fd, unsigned int engine);
bool gem_has_relocations(int fd);
diff --git a/tests/i915/gem_busy.c b/tests/i915/gem_busy.c
index dc481f3c5..7e2b220aa 100644
--- a/tests/i915/gem_busy.c
+++ b/tests/i915/gem_busy.c
@@ -232,7 +232,7 @@ static void xchg_u32(void *array, unsigned i, unsigned j)
static void close_race(int fd)
{
const unsigned int ncpus = sysconf(_SC_NPROCESSORS_ONLN);
- const unsigned int nhandles = gem_submission_measure(fd, ALL_ENGINES);
+ const unsigned int nhandles = gem_submission_measure(fd, NULL, ALL_ENGINES);
unsigned int engines[I915_EXEC_RING_MASK + 1], nengine;
const struct intel_execution_engine2 *e;
unsigned long *control;
diff --git a/tests/i915/gem_exec_await.c b/tests/i915/gem_exec_await.c
index 6db30695f..ba8325ce3 100644
--- a/tests/i915/gem_exec_await.c
+++ b/tests/i915/gem_exec_await.c
@@ -237,7 +237,7 @@ igt_main
igt_require_gem(device);
gem_submission_print_method(device);
- ring_size = gem_submission_measure(device, ALL_ENGINES);
+ ring_size = gem_submission_measure(device, NULL, ALL_ENGINES);
igt_info("Ring size: %d batches\n", ring_size);
igt_require(ring_size > 0);
diff --git a/tests/i915/gem_exec_fence.c b/tests/i915/gem_exec_fence.c
index c3a650d89..6c4d3035f 100644
--- a/tests/i915/gem_exec_fence.c
+++ b/tests/i915/gem_exec_fence.c
@@ -3103,7 +3103,7 @@ igt_main
long ring_size = 0;
igt_fixture {
- ring_size = gem_submission_measure(i915, ALL_ENGINES);
+ ring_size = gem_submission_measure(i915, NULL, ALL_ENGINES);
igt_info("Ring size: %ld batches\n", ring_size);
igt_require(ring_size);
diff --git a/tests/i915/gem_exec_latency.c b/tests/i915/gem_exec_latency.c
index d31e82bc1..62bad6171 100644
--- a/tests/i915/gem_exec_latency.c
+++ b/tests/i915/gem_exec_latency.c
@@ -897,7 +897,7 @@ igt_main
gem_submission_print_method(device);
- ring_size = gem_submission_measure(device, ALL_ENGINES);
+ ring_size = gem_submission_measure(device, NULL, ALL_ENGINES);
igt_info("Ring size: %d batches\n", ring_size);
igt_require(ring_size > 8);
ring_size -= 8; /* leave some spare */
diff --git a/tests/i915/gem_exec_schedule.c b/tests/i915/gem_exec_schedule.c
index fe3b8d29b..64a693ba5 100644
--- a/tests/i915/gem_exec_schedule.c
+++ b/tests/i915/gem_exec_schedule.c
@@ -1805,7 +1805,7 @@ static void deep(int fd, unsigned ring)
ctx[n] = gem_context_clone_with_engines(fd, 0);
}
- nreq = gem_submission_measure(fd, ring) / (3 * XS) * MAX_CONTEXTS;
+ nreq = gem_submission_measure(fd, NULL, ring) / (3 * XS) * MAX_CONTEXTS;
if (nreq > max_req)
nreq = max_req;
igt_info("Using %d requests (prio range %d)\n", nreq, max_req);
@@ -1950,7 +1950,7 @@ static int __execbuf(int fd, struct drm_i915_gem_execbuffer2 *execbuf)
static void wide(int fd, unsigned ring)
{
- const unsigned int ring_size = gem_submission_measure(fd, ring);
+ const unsigned int ring_size = gem_submission_measure(fd, NULL, ring);
struct timespec tv = {};
IGT_CORK_FENCE(cork);
uint32_t result;
@@ -1995,7 +1995,7 @@ static void wide(int fd, unsigned ring)
static void reorder_wide(int fd, unsigned ring)
{
- const unsigned int ring_size = gem_submission_measure(fd, ring);
+ const unsigned int ring_size = gem_submission_measure(fd, NULL, ring);
const unsigned int gen = intel_gen(intel_get_drm_devid(fd));
const int priorities[] = { MIN_PRIO, MAX_PRIO };
struct drm_i915_gem_relocation_entry reloc;
diff --git a/tests/i915/perf_pmu.c b/tests/i915/perf_pmu.c
index aa297bf19..f92f73919 100644
--- a/tests/i915/perf_pmu.c
+++ b/tests/i915/perf_pmu.c
@@ -1341,7 +1341,7 @@ static void cpu_hotplug(int gem_fd)
static int target_num_interrupts(int i915)
{
- return min(gem_submission_measure(i915, I915_EXEC_DEFAULT), 30);
+ return min(gem_submission_measure(i915, NULL, I915_EXEC_DEFAULT), 30);
}
static void
--
2.31.1
More information about the igt-dev
mailing list