drm/i915: add schedule out notification of preempted but completed request
authorWeinan Li <weinan.z.li@intel.com>
Tue, 6 Mar 2018 02:15:57 +0000 (10:15 +0800)
committerJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
Thu, 8 Mar 2018 11:50:11 +0000 (13:50 +0200)
There is one corner case missing schedule out notification of the preempted
request. The preempted request is just completed when preemption happen,
then it will be canceled and won't be resubmitted later, GVT-g will lost
the schedule out notification.

Here add schedule out notification if found the preempted request has been
completed.

v2:
- refine description, add completed check and notification in
  execlists_cancel_port_requests. (Chris)

v3:
- use ternary confitional, remove local variable. (Tvrtko)

Cc: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Weinan Li <weinan.z.li@intel.com>
Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/1520302557-25079-1-git-send-email-weinan.z.li@intel.com
drivers/gpu/drm/i915/intel_lrc.c

index d763dfb5119019401d41634a8a5716d0c45d1c4b..3a69b367e56552114a1048f41204ab03d8692705 100644 (file)
@@ -727,7 +727,12 @@ execlists_cancel_port_requests(struct intel_engine_execlists * const execlists)
 
                GEM_BUG_ON(!execlists->active);
                intel_engine_context_out(rq->engine);
-               execlists_context_status_change(rq, INTEL_CONTEXT_SCHEDULE_PREEMPTED);
+
+               execlists_context_status_change(rq,
+                                               i915_request_completed(rq) ?
+                                               INTEL_CONTEXT_SCHEDULE_OUT :
+                                               INTEL_CONTEXT_SCHEDULE_PREEMPTED);
+
                i915_request_put(rq);
 
                memset(port, 0, sizeof(*port));