summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/i915/selftests
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2018-01-17 16:57:13 +0300
committerChris Wilson <chris@chris-wilson.co.uk>2018-01-17 20:09:59 +0300
commitba02f4c26b37102ab030aa81d42d8021c81a43ab (patch)
tree3a55cb2c9fb41e26120b76c5d48b72c5f8562474 /drivers/gpu/drm/i915/selftests
parent3f5b933e60506452ea4f83d8a436607cb1c8fa24 (diff)
downloadlinux-ba02f4c26b37102ab030aa81d42d8021c81a43ab.tar.xz
drm/i915/selftests: Wait for the dma-fence timeout
When testing that the timeout fired, we need to be sure we have waited just long enough for the timeout to have occurred and for the softirq (on another cpu) to have completed. Sleeping for an arbitrary amount is prone to error, so wait for the timeout instead and complain if it was too late. v2: Use wait_event_timeout to provide an upper bound v3: Fix inverted check for wait_event_timeout timing out v4: Restore the check that the fences aren't signalled too early, by inspecting them before the expected timeout. References: https://bugs.freedesktop.org/show_bug.cgi?id=104670 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20180117135713.2324-1-chris@chris-wilson.co.uk
Diffstat (limited to 'drivers/gpu/drm/i915/selftests')
-rw-r--r--drivers/gpu/drm/i915/selftests/i915_sw_fence.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/drivers/gpu/drm/i915/selftests/i915_sw_fence.c b/drivers/gpu/drm/i915/selftests/i915_sw_fence.c
index 4fb51deb81a1..570e325af93e 100644
--- a/drivers/gpu/drm/i915/selftests/i915_sw_fence.c
+++ b/drivers/gpu/drm/i915/selftests/i915_sw_fence.c
@@ -693,7 +693,8 @@ static int test_dma_fence(void *arg)
sleep = jiffies_to_usecs(delay) / 3;
usleep_range(sleep, 2 * sleep);
if (time_after(jiffies, end)) {
- pr_debug("Slept too long, delay=%lu, skipping!\n", delay);
+ pr_debug("Slept too long, delay=%lu, (target=%lu, now=%lu) skipping\n",
+ delay, end, jiffies);
goto skip;
}
@@ -702,18 +703,15 @@ static int test_dma_fence(void *arg)
goto err;
}
- do {
- sleep = jiffies_to_usecs(end - jiffies + 1);
- usleep_range(sleep, 2 * sleep);
- } while (!time_after(jiffies, end));
-
- if (i915_sw_fence_done(not)) {
- pr_err("No timeout fence signaled!\n");
+ if (!wait_event_timeout(timeout->wait,
+ i915_sw_fence_done(timeout),
+ 2 * (end - jiffies) + 1)) {
+ pr_err("Timeout fence unsignaled!\n");
goto err;
}
- if (!i915_sw_fence_done(timeout)) {
- pr_err("Timeout fence unsignaled!\n");
+ if (i915_sw_fence_done(not)) {
+ pr_err("No timeout fence signaled!\n");
goto err;
}