summaryrefslogtreecommitdiff
path: root/tests/i915/gem_ctx_persistence.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2019-11-22 00:41:30 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2019-11-22 11:04:25 +0000
commit3fa72891269b16943e6511166aeebee094206791 (patch)
tree6f1a7ebf7efc5678aa3e43cbeafb4d9bd170035f /tests/i915/gem_ctx_persistence.c
parent97dbcb39759f553e915a81a474e6cb1923a5033b (diff)
i915/gem_ctx_persistence: Double the fput hammer!
Deferred rcu work is tricky to pin down and encourage to run, so try again... Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=112277 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Acked-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Diffstat (limited to 'tests/i915/gem_ctx_persistence.c')
-rw-r--r--tests/i915/gem_ctx_persistence.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/tests/i915/gem_ctx_persistence.c b/tests/i915/gem_ctx_persistence.c
index 2525a85e..c232ddd5 100644
--- a/tests/i915/gem_ctx_persistence.c
+++ b/tests/i915/gem_ctx_persistence.c
@@ -77,6 +77,13 @@ static void enable_hangcheck(int i915)
close(dir);
}
+static void flush_delayed_fput(int i915)
+{
+ rcu_barrier(i915); /* flush the delayed fput */
+ sched_yield();
+ rcu_barrier(i915); /* again, in case it was added after we waited! */
+}
+
static void test_idempotent(int i915)
{
struct drm_i915_gem_context_param p = {
@@ -352,8 +359,7 @@ static void test_nonpersistent_file(int i915)
spin = igt_spin_new(i915, .flags = IGT_SPIN_FENCE_OUT);
close(i915);
- sched_yield();
- rcu_barrier(debugfs); /* force the delayed fput() */
+ flush_delayed_fput(i915);
igt_assert_eq(sync_fence_wait(spin->out_fence, MSEC_PER_SEC / 5), 0);
igt_assert_eq(sync_fence_status(spin->out_fence), -EIO);
@@ -468,7 +474,7 @@ static void test_process(int i915)
}
close(sv[0]);
igt_waitchildren();
- rcu_barrier(i915); /* force the delayed fput() */
+ flush_delayed_fput(i915);
fence = recvfd(sv[1]);
close(sv[1]);
@@ -517,7 +523,7 @@ static void test_process_mixed(int i915, unsigned int engine)
}
close(sv[0]);
igt_waitchildren();
- rcu_barrier(i915); /* force the delayed fput() */
+ flush_delayed_fput(i915);
fence[0] = recvfd(sv[1]);
fence[1] = recvfd(sv[1]);
@@ -594,7 +600,7 @@ static void test_processes(int i915)
sched_yield();
close(p[i].sv[0]);
close(p[i].sv[1]);
- rcu_barrier(i915);
+ flush_delayed_fput(i915);
if (i == 0) {
/* First fence is non-persistent, so should be reset */
@@ -635,10 +641,7 @@ static void __smoker(int i915, unsigned int engine, int expected)
}
close(fd);
-
- rcu_barrier(i915); /* flush the delayed fput */
- sched_yield();
- rcu_barrier(i915); /* again, in case it was added after we waited! */
+ flush_delayed_fput(i915);
igt_spin_end(spin);