drm/i915/execlists: Notify context-out for lost requests
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 26 Sep 2017 10:17:19 +0000 (11:17 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Wed, 27 Sep 2017 09:48:59 +0000 (10:48 +0100)
When cancelling requests, also send the notification to any listeners
(gvt) that the request is no longer scheduled on hw. They may require to
keep the in/out exactly balanced, and so the reuse after the reset may
confuse the listener.

Fixes: 221ab9719bf3 ("drm/i915/execlists: Unwind incomplete requests on resets")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: "Zhenyu Wang" <zhenyuw@linux.intel.com>
Cc: "Wang, Zhi A" <zhi.a.wang@intel.com>
Cc: MichaƂ Winiarski <michal.winiarski@intel.com>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20170926101720.9479-1-chris@chris-wilson.co.uk
Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
drivers/gpu/drm/i915/intel_lrc.c

index 2c07f3c..61cac26 100644 (file)
@@ -578,7 +578,11 @@ execlist_cancel_port_requests(struct intel_engine_execlists *execlists)
        unsigned int num_ports = ARRAY_SIZE(execlists->port);
 
        while (num_ports-- && port_isset(port)) {
-               i915_gem_request_put(port_request(port));
+               struct drm_i915_gem_request *rq = port_request(port);
+
+               execlists_context_status_change(rq, INTEL_CONTEXT_SCHEDULE_OUT);
+               i915_gem_request_put(rq);
+
                memset(port, 0, sizeof(*port));
                port++;
        }