mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 08:33:17 +02:00
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=112405 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20191129103455.744389-1-chris@chris-wilson.co.uk
This commit is contained in:
parent
b006869c6e
commit
0cb7da1062
|
|
@ -11,6 +11,28 @@
|
|||
#include "intel_gt_requests.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 i915_active active;
|
||||
struct kref kref;
|
||||
|
|
@ -90,7 +112,7 @@ static int __live_idle_pulse(struct intel_engine_cs *engine,
|
|||
|
||||
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");
|
||||
|
||||
pr_err("%s: no heartbeat pulse?\n", engine->name);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user