drm/i915: Park the signaler before sleeping
If the signal to park arrives before we sleep, then we need to check kthread_should_park() before sleeping to avoid missing the signal. Otherwise, if the signal arrives whilst we are processing completed requests, we will reset the current->state back to TASK_INTERRUPTIBLE and so miss the wakeup. Fixes:fe3288b5da
("drm/i915: Park the breadcrumbs signaler across a GPU reset") Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Mika Kuoppala <mika.kuoppala@intel.com> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/20170403105124.8969-1-chris@chris-wilson.co.uk Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> (cherry picked from commitb1becb8826
) Signed-off-by: Jani Nikula <jani.nikula@intel.com>
This commit is contained in:
parent
f8a77153b0
commit
1676a2b35c
@ -629,6 +629,9 @@ static int intel_breadcrumbs_signaler(void *arg)
|
||||
} else {
|
||||
DEFINE_WAIT(exec);
|
||||
|
||||
if (kthread_should_park())
|
||||
kthread_parkme();
|
||||
|
||||
if (kthread_should_stop()) {
|
||||
GEM_BUG_ON(request);
|
||||
break;
|
||||
@ -641,9 +644,6 @@ static int intel_breadcrumbs_signaler(void *arg)
|
||||
|
||||
if (request)
|
||||
remove_wait_queue(&request->execute, &exec);
|
||||
|
||||
if (kthread_should_park())
|
||||
kthread_parkme();
|
||||
}
|
||||
i915_gem_request_put(request);
|
||||
} while (1);
|
||||
|
Loading…
Reference in New Issue
Block a user