linux/drivers/gpu/drm/i915
Chris Wilson 5dce5b9387 drm/i915: Wait for completion of pending flips when starved of fences
On older generations (gen2, gen3) the GPU requires fences for many
operations, such as blits. The display hardware also requires fences for
scanouts and this leads to a situation where an arbitrary number of
fences may be pinned by old scanouts following a pageflip but before we
have executed the unpin workqueue. This is unpredictable by userspace
and leads to random EDEADLK when submitting an otherwise benign
execbuffer. However, we can detect when we have an outstanding flip and
so cause userspace to wait upon their completion before finally
declaring that the system is starved of fences. This is really no worse
than forcing the GPU to stall waiting for older execbuffer to retire and
release their fences before we can reallocate them for the next
execbuffer.

v2: move the test for a pending fb unpin to a common routine for
later reuse during eviction

Reported-and-tested-by: dimon@gmx.net
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=73696
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Jon Bloomfield <jon.bloomfield@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2014-01-22 10:34:40 +01:00
..
dvo_ch7xxx.c drm/i915: dvo_ch7xxx: fix vsync polarity setting 2013-07-25 16:10:22 +02:00
dvo_ch7017.c
dvo_ivch.c
dvo_ns2501.c drm/i915/ns2501: Rip out the reenable hack 2013-11-04 16:32:31 +01:00
dvo_sil164.c
dvo_tfp410.c
dvo.h drm/i915: Remove unused mode_fixup() vfunc of struct intel_dvo_dev_ops 2013-09-05 21:39:59 +02:00
i915_debugfs.c drm/i915/vlv: Add drpc debugfs support for valleyview 2014-01-10 18:00:14 +01:00
i915_dma.c Merge branch 'drm-intel-next' of git://people.freedesktop.org/~danvet/drm-intel into drm-next 2014-01-20 10:21:54 +10:00
i915_drv.c i915: send D1 opregion notification 2014-01-22 10:34:36 +01:00
i915_drv.h Merge commit origin/master into drm-intel-next 2014-01-16 22:06:30 +01:00
i915_gem_context.c Merge commit origin/master into drm-intel-next 2014-01-16 22:06:30 +01:00
i915_gem_debug.c drm/i915: Fix #endif comment 2013-08-09 10:45:52 +02:00
i915_gem_dmabuf.c drm/i915: Pin pages whilst allocating for dma-buf vmap() 2013-11-29 15:51:20 +01:00
i915_gem_evict.c drm/i915: Repeat eviction search after idling the GPU 2013-12-10 08:13:58 +01:00
i915_gem_execbuffer.c drm/i915: Clarify relocation errnos 2014-01-22 09:58:25 +01:00
i915_gem_gtt.c Merge commit origin/master into drm-intel-next 2014-01-16 22:06:30 +01:00
i915_gem_stolen.c drm/i915: grab a pages pin count for preallocate stolen 2013-12-18 13:25:29 +01:00
i915_gem_tiling.c drm/i915: prevent tiling changes on framebuffer backing storage 2013-10-16 22:04:52 +02:00
i915_gem.c drm/i915: Wait for completion of pending flips when starved of fences 2014-01-22 10:34:40 +01:00
i915_gpu_error.c drm/i915: Record BB_ADDR for every ring 2013-12-11 23:52:12 +01:00
i915_ioc32.c
i915_irq.c drm/i915: Add a kludge for DSL incrementing too late and ISR not working 2014-01-20 12:21:36 +02:00
i915_reg.h drm/i915: g4x/vlv: fix dp aux interrupt mask 2014-01-22 10:34:37 +01:00
i915_suspend.c drm/i915: Drop I915_ prefix from HAS_FBC 2014-01-10 10:28:28 +01:00
i915_sysfs.c drm/i915: add some runtime PM get/put calls 2013-12-10 22:50:17 +01:00
i915_trace_points.c
i915_trace.h drm/i915: Add a tracepoint for using a semaphore 2013-10-01 07:45:24 +02:00
i915_ums.c drm/i915: do not save/restore backlight registers in KMS 2013-11-14 12:22:32 +01:00
intel_acpi.c ACPI: Eliminate the DEVICE_ACPI_HANDLE() macro 2013-11-14 23:17:21 +01:00
intel_bios.c drm/i915: parse backlight modulation frequency from the BIOS VBT 2013-12-16 10:02:48 +01:00
intel_bios.h drm/i915: parse backlight modulation frequency from the BIOS VBT 2013-12-16 10:02:48 +01:00
intel_crt.c drm/i915: Return a drm_mode_status enum in the mode_valid vfuncs 2013-11-28 16:49:33 +01:00
intel_ddi.c Merge branch 'drm-intel-next' of git://people.freedesktop.org/~danvet/drm-intel into drm-next 2014-01-20 10:21:54 +10:00
intel_display.c drm/i915: Wait for completion of pending flips when starved of fences 2014-01-22 10:34:40 +01:00
intel_dp.c drm/i915: don't disable DP port after a failed link training 2014-01-22 10:34:39 +01:00
intel_drv.h drm/i915: Wait for completion of pending flips when starved of fences 2014-01-22 10:34:40 +01:00
intel_dsi_cmd.c drm/i915/dsi: s/size_t/int/ 2013-09-04 17:34:51 +02:00
intel_dsi_cmd.h drm/i915/dsi: s/size_t/int/ 2013-09-04 17:34:51 +02:00
intel_dsi_pll.c drm/i915: Try harder to get best m, n, p values with minimal error 2013-12-11 23:52:18 +01:00
intel_dsi.c drm/i915: Parametrize the dphy and other spec specific parameters 2013-12-11 23:52:20 +01:00
intel_dsi.h drm/i915: Parametrize the dphy and other spec specific parameters 2013-12-11 23:52:20 +01:00
intel_dvo.c drm/i915: Return a drm_mode_status enum in the mode_valid vfuncs 2013-11-28 16:49:33 +01:00
intel_fbdev.c drm/i915: remove duplicate MODULE_LICENSE definition 2014-01-07 10:20:47 +01:00
intel_hdmi.c drm/i915: Don't cast away const from infoframe buffer 2013-12-10 14:49:04 +01:00
intel_i2c.c drm/i915/vlv: split CCK and DDR freq usage 2013-11-05 19:28:47 +01:00
intel_lvds.c drm/i915: Make downclock deduction common for all panels 2013-12-10 13:26:15 +01:00
intel_modes.c
intel_opregion.c drm/i915: Eliminate lots of WARNs when there's no backlight present 2014-01-22 10:34:38 +01:00
intel_overlay.c drm/i915: No panel fitter on 830M or non-mobile gen2/3 platforms 2014-01-10 18:03:17 +01:00
intel_panel.c drm/i915: Eliminate lots of WARNs when there's no backlight present 2014-01-22 10:34:38 +01:00
intel_pm.c Merge commit origin/master into drm-intel-next 2014-01-16 22:06:30 +01:00
intel_ringbuffer.c drm/i915: Fix disabled semaphores 2014-01-22 09:58:26 +01:00
intel_ringbuffer.h drm/i915: Write RING_TAIL once per-request 2013-09-10 15:35:58 +02:00
intel_sdvo_regs.h drm/i915: use __packed instead of __attribute__((packed)) 2013-12-03 18:19:49 +01:00
intel_sdvo.c drm/i915: Don't cast away const from infoframe buffer 2013-12-10 14:49:04 +01:00
intel_sideband.c drm/i915: Use FLISDSI interface for band gap reset 2013-12-11 23:52:17 +01:00
intel_sprite.c Revert "drm/i915/sprite: Always enable the scaler on IronLake" 2013-12-17 13:17:59 +01:00
intel_tv.c drm/i915/tv: add ->get_config callback 2013-11-18 22:24:33 +01:00
intel_uncore.c Merge tag 'drm-intel-next-2013-11-29' of git://people.freedesktop.org/~danvet/drm-intel into drm-next 2013-12-18 10:39:56 +10:00
Kconfig i915, fbdev: Fix Kconfig typo 2013-11-21 21:59:02 +01:00
Makefile drm/i915: only build i915_debugfs.c when CONFIG_DEBUG_FS is enabled 2013-12-16 16:53:32 +01:00