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: fe3288b5da2c ("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 commit 
b1becb88268beb72df6495e35d3d76c138d215bb)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
                } else {
                        DEFINE_WAIT(exec);
 
+                       if (kthread_should_park())
+                               kthread_parkme();
+
                        if (kthread_should_stop()) {
                                GEM_BUG_ON(request);
                                break;
 
                        if (request)
                                remove_wait_queue(&request->execute, &exec);
-
-                       if (kthread_should_park())
-                               kthread_parkme();
                }
                i915_gem_request_put(request);
        } while (1);