drm/i915: Fix incorrect assert about pending power domain async-put work
authorImre Deak <imre.deak@intel.com>
Wed, 26 May 2021 14:37:28 +0000 (17:37 +0300)
committerImre Deak <imre.deak@intel.com>
Thu, 3 Jun 2021 16:23:39 +0000 (19:23 +0300)
commitdd839aa857eb045e688c893ac588385c7fecde6a
tree75f43ac32b142ee45d50e52c9279344f2da8cafe
parent4a300e65b59b6625a9c258902e6e976054333642
drm/i915: Fix incorrect assert about pending power domain async-put work

It's possible that an already dequeued put_async_work() will release the
reference (*) that was put asynchronously after the dequeue happened.
This leaves an async-put work pending, without any reference to release.
A subsequent async-put may trigger the

drm_WARN_ON(!queue_delayed_work(&power_domains->async_put_work));

warn due to async_put_work() still pending. To avoid the warn, cancel
the pending async_put_work() when releasing the reference at (*) above.

Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/3421
Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/2289
Signed-off-by: Imre Deak <imre.deak@intel.com>
Reviewed-by: Anshuman Gupta <anshuman.gupta@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210526143729.2563672-2-imre.deak@intel.com
drivers/gpu/drm/i915/display/intel_display_power.c