]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/i915/gt: Cleanup heartbeat systole first
authorChris Wilson <chris@chris-wilson.co.uk>
Wed, 6 Nov 2019 22:34:10 +0000 (22:34 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Thu, 7 Nov 2019 07:49:55 +0000 (07:49 +0000)
Before we grab the engine wakeref, tidy up the previous heartbeat
request. If we then abort because the engine powerwell is off, we ensure
the request is freed as we know we will not have freed it when
cancelling the work (as the work is running!).

Fixes: 841e86728615 ("drm/i915/gt: Only drop heartbeat.systole if the sole owner")
References: 058179e72e09 ("drm/i915/gt: Replace hangcheck by heartbeats")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191106223410.30334-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/gt/intel_engine_heartbeat.c

index 06aa14c7aa8c7e98e94aef6c5a631236b09f4bc2..c91fd4e4af2930ff3c8c14d6e4a4ad34ae205e5c 100644 (file)
@@ -63,15 +63,15 @@ static void heartbeat(struct work_struct *wrk)
        struct intel_context *ce = engine->kernel_context;
        struct i915_request *rq;
 
-       if (!intel_engine_pm_get_if_awake(engine))
-               return;
-
        rq = engine->heartbeat.systole;
        if (rq && i915_request_completed(rq)) {
                i915_request_put(rq);
                engine->heartbeat.systole = NULL;
        }
 
+       if (!intel_engine_pm_get_if_awake(engine))
+               return;
+
        if (intel_gt_is_wedged(engine->gt))
                goto out;