mirror of https://gitee.com/openkylin/linux.git
drm/i915/gt: Only drop heartbeat.systole if the sole owner
Mika spotted that only using cancel_delayed_work() could mean that we attempted to clear the heartbeat.systole while the worker was still running. Rectify the situation by only touching the systole from outside the worker if we suceeded in cancelling the worker before it could run. The worker is expected to clean up by itself upon idling. Reported-by: Mika Kuoppala <mika.kuoppala@linux.intel.com> Fixes:058179e72e
("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/20191106133129.17732-1-chris@chris-wilson.co.uk (cherry picked from commit841e867286
) Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
This commit is contained in:
parent
d9dace9438
commit
d29926fa5f
|
@ -141,8 +141,8 @@ void intel_engine_unpark_heartbeat(struct intel_engine_cs *engine)
|
|||
|
||||
void intel_engine_park_heartbeat(struct intel_engine_cs *engine)
|
||||
{
|
||||
cancel_delayed_work(&engine->heartbeat.work);
|
||||
i915_request_put(fetch_and_zero(&engine->heartbeat.systole));
|
||||
if (cancel_delayed_work(&engine->heartbeat.work))
|
||||
i915_request_put(fetch_and_zero(&engine->heartbeat.systole));
|
||||
}
|
||||
|
||||
void intel_engine_init_heartbeat(struct intel_engine_cs *engine)
|
||||
|
|
Loading…
Reference in New Issue