summaryrefslogtreecommitdiff
path: root/tests/i915/gem_exec_balancer.c
diff options
context:
space:
mode:
authorJason Ekstrand <jason@jlekstrand.net>2021-06-14 11:28:24 -0500
committerJason Ekstrand <jason@jlekstrand.net>2021-07-08 12:45:33 -0500
commit5913ab8643a8cf8a288ffe1e69334b7457debec0 (patch)
tree43b430eb58736e20797c9afc4c576b591425d9d4 /tests/i915/gem_exec_balancer.c
parent99d863de8b7bb687daee9d7edd59c4b17419e8d1 (diff)
tests/i915/gem_exec_balancer: Fix invalid-balancer and invalid-bonds for the set-once rule (v2)
Upstream i915 is going to start only allowing CONTEXT_PARAM_ENGINES to be set once on any given context. This means we need to create a new context for every setparam in the test. v2 (Jason Ekstrand): - Also fix invalid-bonds Signed-off-by: Jason Ekstrand <jason@jlekstrand.net> Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com> Acked-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Diffstat (limited to 'tests/i915/gem_exec_balancer.c')
-rw-r--r--tests/i915/gem_exec_balancer.c83
1 files changed, 45 insertions, 38 deletions
diff --git a/tests/i915/gem_exec_balancer.c b/tests/i915/gem_exec_balancer.c
index 85f94d79..1c80b366 100644
--- a/tests/i915/gem_exec_balancer.c
+++ b/tests/i915/gem_exec_balancer.c
@@ -165,6 +165,19 @@ static uint32_t batch_create(int i915)
return __batch_create(i915, 0);
}
+static int
+__set_param_fresh_context(int i915, struct drm_i915_gem_context_param param)
+{
+ int err;
+
+ igt_assert_eq(param.ctx_id, 0);
+ param.ctx_id = gem_context_create(i915);
+ err = __gem_context_set_param(i915, &param);
+ gem_context_destroy(i915, param.ctx_id);
+
+ return err;
+}
+
static void invalid_balancer(int i915)
{
I915_DEFINE_CONTEXT_ENGINES_LOAD_BALANCE(balancer, 64);
@@ -192,7 +205,6 @@ static void invalid_balancer(int i915)
igt_assert_lte(count, 64);
- p.ctx_id = gem_context_create(i915);
p.size = (sizeof(struct i915_context_param_engines) +
(count + 1) * sizeof(*engines.engines));
@@ -200,13 +212,13 @@ static void invalid_balancer(int i915)
engines.engines[0].engine_class = I915_ENGINE_CLASS_INVALID;
engines.engines[0].engine_instance = I915_ENGINE_CLASS_INVALID_NONE;
memcpy(engines.engines + 1, ci, count * sizeof(*ci));
- gem_context_set_param(i915, &p);
+ igt_assert_eq(__set_param_fresh_context(i915, p), 0);
engines.extensions = -1ull;
- igt_assert_eq(__gem_context_set_param(i915, &p), -EFAULT);
+ igt_assert_eq(__set_param_fresh_context(i915, p), -EFAULT);
engines.extensions = 1ull;
- igt_assert_eq(__gem_context_set_param(i915, &p), -EFAULT);
+ igt_assert_eq(__set_param_fresh_context(i915, p), -EFAULT);
memset(&balancer, 0, sizeof(balancer));
balancer.base.name = I915_CONTEXT_ENGINES_EXT_LOAD_BALANCE;
@@ -214,25 +226,25 @@ static void invalid_balancer(int i915)
memcpy(balancer.engines, ci, count * sizeof(*ci));
engines.extensions = to_user_pointer(&balancer);
- gem_context_set_param(i915, &p);
+ igt_assert_eq(__set_param_fresh_context(i915, p), 0);
balancer.engine_index = 1;
- igt_assert_eq(__gem_context_set_param(i915, &p), -EEXIST);
+ igt_assert_eq(__set_param_fresh_context(i915, p), -EEXIST);
balancer.engine_index = count;
- igt_assert_eq(__gem_context_set_param(i915, &p), -EEXIST);
+ igt_assert_eq(__set_param_fresh_context(i915, p), -EEXIST);
balancer.engine_index = count + 1;
- igt_assert_eq(__gem_context_set_param(i915, &p), -EINVAL);
+ igt_assert_eq(__set_param_fresh_context(i915, p), -EINVAL);
balancer.engine_index = 0;
- gem_context_set_param(i915, &p);
+ igt_assert_eq(__set_param_fresh_context(i915, p), 0);
balancer.base.next_extension = to_user_pointer(&balancer);
- igt_assert_eq(__gem_context_set_param(i915, &p), -EEXIST);
+ igt_assert_eq(__set_param_fresh_context(i915, p), -EEXIST);
balancer.base.next_extension = -1ull;
- igt_assert_eq(__gem_context_set_param(i915, &p), -EFAULT);
+ igt_assert_eq(__set_param_fresh_context(i915, p), -EFAULT);
handle = gem_create(i915, 4096 * 3);
ptr = gem_mmap__device_coherent(i915, handle, 0, 4096 * 3,
@@ -247,44 +259,42 @@ static void invalid_balancer(int i915)
memcpy(engines.engines + 2, ci, count * sizeof(ci));
p.size = (sizeof(struct i915_context_param_engines) +
(count + 2) * sizeof(*engines.engines));
- gem_context_set_param(i915, &p);
+ igt_assert_eq(__set_param_fresh_context(i915, p), 0);
balancer.base.next_extension = 0;
balancer.engine_index = 1;
engines.extensions = to_user_pointer(&balancer);
- gem_context_set_param(i915, &p);
+ igt_assert_eq(__set_param_fresh_context(i915, p), 0);
memcpy(ptr + 4096 - 8, &balancer, sizeof(balancer));
memcpy(ptr + 8192 - 8, &balancer, sizeof(balancer));
balancer.engine_index = 0;
engines.extensions = to_user_pointer(ptr) + 4096 - 8;
- gem_context_set_param(i915, &p);
+ igt_assert_eq(__set_param_fresh_context(i915, p), 0);
balancer.base.next_extension = engines.extensions;
engines.extensions = to_user_pointer(&balancer);
- gem_context_set_param(i915, &p);
+ igt_assert_eq(__set_param_fresh_context(i915, p), 0);
munmap(ptr, 4096);
- igt_assert_eq(__gem_context_set_param(i915, &p), -EFAULT);
+ igt_assert_eq(__set_param_fresh_context(i915, p), -EFAULT);
engines.extensions = to_user_pointer(ptr) + 4096 - 8;
- igt_assert_eq(__gem_context_set_param(i915, &p), -EFAULT);
+ igt_assert_eq(__set_param_fresh_context(i915, p), -EFAULT);
engines.extensions = to_user_pointer(ptr) + 8192 - 8;
- gem_context_set_param(i915, &p);
+ igt_assert_eq(__set_param_fresh_context(i915, p), 0);
balancer.base.next_extension = engines.extensions;
engines.extensions = to_user_pointer(&balancer);
- gem_context_set_param(i915, &p);
+ igt_assert_eq(__set_param_fresh_context(i915, p), 0);
munmap(ptr + 8192, 4096);
- igt_assert_eq(__gem_context_set_param(i915, &p), -EFAULT);
+ igt_assert_eq(__set_param_fresh_context(i915, p), -EFAULT);
engines.extensions = to_user_pointer(ptr) + 8192 - 8;
- igt_assert_eq(__gem_context_set_param(i915, &p), -EFAULT);
+ igt_assert_eq(__set_param_fresh_context(i915, p), -EFAULT);
munmap(ptr + 4096, 4096);
-
- gem_context_destroy(i915, p.ctx_id);
free(ci);
}
}
@@ -294,7 +304,6 @@ static void invalid_bonds(int i915)
I915_DEFINE_CONTEXT_ENGINES_BOND(bonds[16], 1);
I915_DEFINE_CONTEXT_PARAM_ENGINES(engines, 1);
struct drm_i915_gem_context_param p = {
- .ctx_id = gem_context_create(i915),
.param = I915_CONTEXT_PARAM_ENGINES,
.value = to_user_pointer(&engines),
.size = sizeof(engines),
@@ -303,7 +312,7 @@ static void invalid_bonds(int i915)
void *ptr;
memset(&engines, 0, sizeof(engines));
- gem_context_set_param(i915, &p);
+ igt_assert_eq(__set_param_fresh_context(i915, p), 0);
memset(bonds, 0, sizeof(bonds));
for (int n = 0; n < ARRAY_SIZE(bonds); n++) {
@@ -313,18 +322,18 @@ static void invalid_bonds(int i915)
bonds[n].num_bonds = 1;
}
engines.extensions = to_user_pointer(&bonds);
- gem_context_set_param(i915, &p);
+ igt_assert_eq(__set_param_fresh_context(i915, p), 0);
bonds[0].base.next_extension = -1ull;
- igt_assert_eq(__gem_context_set_param(i915, &p), -EFAULT);
+ igt_assert_eq(__set_param_fresh_context(i915, p), -EFAULT);
bonds[0].base.next_extension = to_user_pointer(&bonds[0]);
- igt_assert_eq(__gem_context_set_param(i915, &p), -E2BIG);
+ igt_assert_eq(__set_param_fresh_context(i915, p), -E2BIG);
engines.extensions = to_user_pointer(&bonds[1]);
- igt_assert_eq(__gem_context_set_param(i915, &p), -E2BIG);
+ igt_assert_eq(__set_param_fresh_context(i915, p), -E2BIG);
bonds[0].base.next_extension = 0;
- gem_context_set_param(i915, &p);
+ igt_assert_eq(__set_param_fresh_context(i915, p), 0);
handle = gem_create(i915, 4096 * 3);
ptr = gem_mmap__device_coherent(i915, handle, 0, 4096 * 3, PROT_WRITE);
@@ -332,29 +341,27 @@ static void invalid_bonds(int i915)
memcpy(ptr + 4096, &bonds[0], sizeof(bonds[0]));
engines.extensions = to_user_pointer(ptr) + 4096;
- gem_context_set_param(i915, &p);
+ igt_assert_eq(__set_param_fresh_context(i915, p), 0);
memcpy(ptr, &bonds[0], sizeof(bonds[0]));
bonds[0].base.next_extension = to_user_pointer(ptr);
memcpy(ptr + 4096, &bonds[0], sizeof(bonds[0]));
- gem_context_set_param(i915, &p);
+ igt_assert_eq(__set_param_fresh_context(i915, p), 0);
munmap(ptr, 4096);
- igt_assert_eq(__gem_context_set_param(i915, &p), -EFAULT);
+ igt_assert_eq(__set_param_fresh_context(i915, p), -EFAULT);
bonds[0].base.next_extension = 0;
memcpy(ptr + 8192, &bonds[0], sizeof(bonds[0]));
bonds[0].base.next_extension = to_user_pointer(ptr) + 8192;
memcpy(ptr + 4096, &bonds[0], sizeof(bonds[0]));
- gem_context_set_param(i915, &p);
+ igt_assert_eq(__set_param_fresh_context(i915, p), 0);
munmap(ptr + 8192, 4096);
- igt_assert_eq(__gem_context_set_param(i915, &p), -EFAULT);
+ igt_assert_eq(__set_param_fresh_context(i915, p), -EFAULT);
munmap(ptr + 4096, 4096);
- igt_assert_eq(__gem_context_set_param(i915, &p), -EFAULT);
-
- gem_context_destroy(i915, p.ctx_id);
+ igt_assert_eq(__set_param_fresh_context(i915, p), -EFAULT);
}
static void kick_kthreads(void)