[igt-dev] [PATCH i-g-t] i915/gem_vm_create: Update of active VM disallowed
Chris Wilson
chris at chris-wilson.co.uk
Thu Mar 19 14:44:53 UTC 2020
Allow the kernel the rights to reject updating an active VM with -EBUSY.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
---
tests/i915/gem_ctx_param.c | 13 +++++++------
tests/i915/gem_vm_create.c | 11 ++++++++++-
2 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/tests/i915/gem_ctx_param.c b/tests/i915/gem_ctx_param.c
index 179992875..b2940abc2 100644
--- a/tests/i915/gem_ctx_param.c
+++ b/tests/i915/gem_ctx_param.c
@@ -211,13 +211,14 @@ static void test_vm(int i915)
gem_execbuf(i915, &eb);
igt_assert_eq_u64(batch.offset, nonzero_offset);
+ /* Note: changing an active ctx->vm may be verboten */
arg.ctx_id = child;
- gem_context_set_param(i915, &arg);
-
- eb.rsvd1 = child;
- batch.offset = 0;
- gem_execbuf(i915, &eb);
- igt_assert_eq_u64(batch.offset, nonzero_offset);
+ if (__gem_context_set_param(i915, &arg) != -EBUSY) {
+ eb.rsvd1 = child;
+ batch.offset = 0;
+ gem_execbuf(i915, &eb);
+ igt_assert_eq_u64(batch.offset, nonzero_offset);
+ }
gem_context_destroy(i915, child);
gem_context_destroy(i915, parent);
diff --git a/tests/i915/gem_vm_create.c b/tests/i915/gem_vm_create.c
index e14b07b5f..a6d2dd91b 100644
--- a/tests/i915/gem_vm_create.c
+++ b/tests/i915/gem_vm_create.c
@@ -164,6 +164,7 @@ static void check_same_vm(int i915, uint32_t ctx_a, uint32_t ctx_b)
eb.rsvd1 = ctx_a;
gem_execbuf(i915, &eb);
igt_assert_eq_u64(batch.offset, 48 << 20);
+ gem_sync(i915, batch.handle); /* be still */
/* An already active VMA will try to keep its offset */
batch.offset = 0;
@@ -224,6 +225,7 @@ static void execbuf(int i915)
batch.offset = 48 << 20;
gem_execbuf(i915, &eb);
igt_assert_eq_u64(batch.offset, 48 << 20);
+ gem_sync(i915, batch.handle);
arg.value = gem_vm_create(i915);
gem_context_set_param(i915, &arg);
@@ -231,6 +233,8 @@ static void execbuf(int i915)
igt_assert_eq_u64(batch.offset, 48 << 20);
gem_vm_destroy(i915, arg.value);
+ gem_sync(i915, batch.handle); /* be idle! */
+
arg.value = gem_vm_create(i915);
gem_context_set_param(i915, &arg);
batch.offset = 0;
@@ -354,13 +358,18 @@ static void async_destroy(int i915)
.param = I915_CONTEXT_PARAM_VM,
};
igt_spin_t *spin[2];
+ int err;
spin[0] = igt_spin_new(i915,
.ctx = arg.ctx_id,
.flags = IGT_SPIN_POLL_RUN);
igt_spin_busywait_until_started(spin[0]);
- gem_context_set_param(i915, &arg);
+ err = __gem_context_set_param(i915, &arg);
+ if (err == -EBUSY) /* update while busy may be verboten, let it ride. */
+ err = 0;
+ igt_assert_eq(err, 0);
+
spin[1] = __igt_spin_new(i915, .ctx = arg.ctx_id);
igt_spin_end(spin[0]);
--
2.25.1
More information about the igt-dev
mailing list