drm/i915/execlists: Emit i915_trace_request_out for preemption
authorChris Wilson <chris@chris-wilson.co.uk>
Wed, 2 May 2018 23:02:02 +0000 (00:02 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Thu, 3 May 2018 08:39:26 +0000 (09:39 +0100)
Move the tracepoint into the common execlists_context_schedule_out() and
call it from preemption completion as well. A small bit of refactoring
code should help with when tracing, or else we end up with requests
mysteriously disappearing and some being emitted to HW multiple times.

Reported-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180502230202.6848-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/intel_lrc.c

index e04798e98db202038cfd52f50ced250a47031ed9..3d747d1c3d4d12ba4ced476ee3fe368e432777ea 100644 (file)
@@ -398,10 +398,11 @@ execlists_context_schedule_in(struct i915_request *rq)
 }
 
 static inline void
-execlists_context_schedule_out(struct i915_request *rq)
+execlists_context_schedule_out(struct i915_request *rq, unsigned long status)
 {
        intel_engine_context_out(rq->engine);
-       execlists_context_status_change(rq, INTEL_CONTEXT_SCHEDULE_OUT);
+       execlists_context_status_change(rq, status);
+       trace_i915_request_out(rq);
 }
 
 static void
@@ -772,12 +773,10 @@ execlists_cancel_port_requests(struct intel_engine_execlists * const execlists)
                          intel_engine_get_seqno(rq->engine));
 
                GEM_BUG_ON(!execlists->active);
-               intel_engine_context_out(rq->engine);
-
-               execlists_context_status_change(rq,
-                                               i915_request_completed(rq) ?
-                                               INTEL_CONTEXT_SCHEDULE_OUT :
-                                               INTEL_CONTEXT_SCHEDULE_PREEMPTED);
+               execlists_context_schedule_out(rq,
+                                              i915_request_completed(rq) ?
+                                              INTEL_CONTEXT_SCHEDULE_OUT :
+                                              INTEL_CONTEXT_SCHEDULE_PREEMPTED);
 
                i915_request_put(rq);
 
@@ -1105,8 +1104,8 @@ static void execlists_submission_tasklet(unsigned long data)
                                 */
                                GEM_BUG_ON(!i915_request_completed(rq));
 
-                               execlists_context_schedule_out(rq);
-                               trace_i915_request_out(rq);
+                               execlists_context_schedule_out(rq,
+                                                              INTEL_CONTEXT_SCHEDULE_OUT);
                                i915_request_put(rq);
 
                                GEM_TRACE("%s completed ctx=%d\n",