drm/i915: Retire any pending operations on the old scanout when switching
authorChris Wilson <chris@chris-wilson.co.uk>
Sat, 13 Nov 2010 09:49:11 +0000 (09:49 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Sat, 13 Nov 2010 09:49:11 +0000 (09:49 +0000)
commit85345517fe6d4de27b0d6ca19fef9d28ac947c4a
tree6838e17e790c99c1cd90ada31f31714208d6d3c6
parent69669455b049c0f1f04bb306625c5d4db6838b11
drm/i915: Retire any pending operations on the old scanout when switching

An old and oft reported bug, is that of the GPU hanging on a
MI_WAIT_FOR_EVENT following a mode switch. The cause is that the GPU is
waiting on a scanline counter on an inactive pipe, and so waits for a
very long time until eventually the user reboots his machine.

We can prevent this either by moving the WAIT into the kernel and
thereby incurring considerable cost on every swapbuffers, or by waiting
for the GPU to retire the last batch that accesses the framebuffer
before installing a new one. As mode switches are much rarer than swap
buffers, this looks like an easy choice.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=28964
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=29252
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: stable@kernel.org
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_gem.c
drivers/gpu/drm/i915/intel_display.c