Commit 0cb7da10 authored by Chris Wilson's avatar Chris Wilson

drm/i915/selftests: Wait only on the expected barrier

Wait on only the last request on the kernel_context after emitting a
barrier so that we do not wait for everything in general and by doing so
cause an accidental emission of the barrier!

Bugzilla; https://bugs.freedesktop.org/show_bug.cgi?id=112405Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191129103455.744389-1-chris@chris-wilson.co.uk
parent b006869c
...@@ -11,6 +11,28 @@ ...@@ -11,6 +11,28 @@
#include "intel_gt_requests.h" #include "intel_gt_requests.h"
#include "i915_selftest.h" #include "i915_selftest.h"
static int timeline_sync(struct intel_timeline *tl)
{
struct dma_fence *fence;
long timeout;
fence = i915_active_fence_get(&tl->last_request);
if (!fence)
return 0;
timeout = dma_fence_wait_timeout(fence, true, HZ / 2);
dma_fence_put(fence);
if (timeout < 0)
return timeout;
return 0;
}
static int engine_sync_barrier(struct intel_engine_cs *engine)
{
return timeline_sync(engine->kernel_context->timeline);
}
struct pulse { struct pulse {
struct i915_active active; struct i915_active active;
struct kref kref; struct kref kref;
...@@ -90,7 +112,7 @@ static int __live_idle_pulse(struct intel_engine_cs *engine, ...@@ -90,7 +112,7 @@ static int __live_idle_pulse(struct intel_engine_cs *engine,
GEM_BUG_ON(!llist_empty(&engine->barrier_tasks)); GEM_BUG_ON(!llist_empty(&engine->barrier_tasks));
if (intel_gt_retire_requests_timeout(engine->gt, HZ / 5)) { if (engine_sync_barrier(engine)) {
struct drm_printer m = drm_err_printer("pulse"); struct drm_printer m = drm_err_printer("pulse");
pr_err("%s: no heartbeat pulse?\n", engine->name); pr_err("%s: no heartbeat pulse?\n", engine->name);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment