]> git.baikalelectronics.ru Git - kernel.git/commit
drm/i915/gt: Defer enabling the breadcrumb interrupt to after submission
authorChris Wilson <chris@chris-wilson.co.uk>
Mon, 23 Nov 2020 11:37:14 +0000 (11:37 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Mon, 23 Nov 2020 17:26:28 +0000 (17:26 +0000)
commit86e3d9c6297b9f774d3a3d0e10d86aaaf84ce9ab
tree44666273773d0c09d3f930210db837078539896b
parentd08d048a488a07fd1f6e4d38ae39e015fe3a70a2
drm/i915/gt: Defer enabling the breadcrumb interrupt to after submission

Move the register slow register write and readback from out of the
critical path for execlists submission and delay it until the following
worker, shaving off around 200us. Note that the same signal_irq_work() is
allowed to run concurrently on each CPU (but it will only be queued once,
once running though it can be requeued and reexecuted) so we have to
remember to lock the global interactions as we cannot rely on the
signal_irq_work() itself providing the serialisation (in constrast to a
tasklet).

By pushing the arm/disarm into the central signaling worker we can close
the race for disarming the interrupt (and dropping its associated
GT wakeref) on parking the engine. If we loose the race, that GT wakeref
may be held indefinitely, preventing the machine from sleeping while
the GPU is ostensibly idle.

v2: Move the self-arming parking of the signal_irq_work to a flush of
the irq-work from intel_breadcrumbs_park().

Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/2271
Fixes: 4b3845bd888c ("drm/i915/gt: Hold context/request reference while breadcrumbs are active")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20201123113717.20500-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/gt/intel_breadcrumbs.c