linux/drivers/gpu/drm/i915
Chris Wilson b4a98e57fc drm/i915: Flush outstanding unpin tasks before pageflipping
If we accumulate unpin tasks because we are pageflipping faster than the
system can schedule its workers, we can effectively create a
pin-leak. The solution taken here is to limit the number of unpin tasks
we have per-crtc and to flush those outstanding tasks if we accumulate
too many. This should prevent any jitter in the normal case, and also
prevent the hang if we should run too fast.

Note: It is important that we switch from the system workqueue to our
own dev_priv->wq since all work items on that queue are guaranteed to
only need the dev->struct_mutex and not any modeset resources. For
otherwise if we have a work item ahead in the queue which needs the
modeset lock (like the output detect work used by both polling or
hpd), this work and so the unpin work will never execute since the
pageflip code already holds that lock. Unfortunately there's no
lockdep support for this scenario in the workqueue code.

Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=46991
Reported-and-tested-by: Tvrtko Ursulin <tvrtko.ursulin@onelan.co.uk>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
[danvet: Added note about workqueu deadlock.]
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=56337
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2012-11-21 17:45:06 +01:00
..
dvo_ch7xxx.c drm/i915/dvo-ch7xxx: fix get_hw_state 2012-10-12 10:59:11 +02:00
dvo_ch7017.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
dvo_ivch.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
dvo_ns2501.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
dvo_sil164.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
dvo_tfp410.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
dvo.h Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2012-10-03 23:29:23 -07:00
i915_debugfs.c drm/i915: Missed lock change with rps lock 2012-11-11 23:51:45 +01:00
i915_dma.c Merge branch 'for-airlied' of git://people.freedesktop.org/~danvet/drm-intel into drm-next 2012-11-20 09:22:35 +10:00
i915_drv.c drm/i915: resurrect panel lid handling 2012-11-21 17:45:05 +01:00
i915_drv.h drm/i915: Remove save/restore of physical HWS_PGA register 2012-11-21 17:45:02 +01:00
i915_gem_context.c drm/i915: Allocate the proper size for contexts. 2012-11-11 23:51:47 +01:00
i915_gem_debug.c UAPI: (Scripted) Convert #include "..." to #include <path/...> in drivers/gpu/ 2012-10-02 18:01:07 +01:00
i915_gem_dmabuf.c Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2012-10-03 23:29:23 -07:00
i915_gem_evict.c Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2012-10-03 23:29:23 -07:00
i915_gem_execbuffer.c drm/i915: Remove bogus test for a present execbuffer 2012-11-21 17:45:03 +01:00
i915_gem_gtt.c drm/i915: Report amount of usable graphics memory in MiB 2012-11-13 16:10:56 +01:00
i915_gem_stolen.c UAPI: (Scripted) Convert #include "..." to #include <path/...> in drivers/gpu/ 2012-10-02 18:01:07 +01:00
i915_gem_tiling.c Merge branch 'drm-intel-fixes' of git://people.freedesktop.org/~danvet/drm-intel into drm-next 2012-10-07 21:13:54 +10:00
i915_gem.c drm/i915: Pin the object whilst faulting it in 2012-11-21 17:45:04 +01:00
i915_ioc32.c UAPI: (Scripted) Convert #include "..." to #include <path/...> in drivers/gpu/ 2012-10-02 18:01:07 +01:00
i915_irq.c drm/i915: protect RPS/RC6 related accesses (including PCU) with a new mutex 2012-11-11 23:51:41 +01:00
i915_reg.h drm/i915: Move the remaining gtt code 2012-11-11 23:51:44 +01:00
i915_suspend.c drm/i915: Remove save/restore of physical HWS_PGA register 2012-11-21 17:45:02 +01:00
i915_sysfs.c drm/i915: protect RPS/RC6 related accesses (including PCU) with a new mutex 2012-11-11 23:51:41 +01:00
i915_trace_points.c drm/i915: [sparse] trivial sparse fixes 2012-04-18 10:34:49 +02:00
i915_trace.h drm/i915: Allow DRM_ROOT_ONLY|DRM_MASTER to submit privileged batchbuffers 2012-10-17 21:06:59 +02:00
intel_acpi.c UAPI: (Scripted) Convert #include "..." to #include <path/...> in drivers/gpu/ 2012-10-02 18:01:07 +01:00
intel_bios.c drm/i915: Only check for valid PP_{ON, OFF}_DELAYS on pre ILK hardware 2012-11-21 17:45:01 +01:00
intel_bios.h UAPI: (Scripted) Convert #include "..." to #include <path/...> in drivers/gpu/ 2012-10-02 18:01:07 +01:00
intel_crt.c Merge branch 'for-airlied' of git://people.freedesktop.org/~danvet/drm-intel into drm-next 2012-11-20 09:22:35 +10:00
intel_ddi.c drm/i915: Enable DP audio for Haswell 2012-11-21 17:45:05 +01:00
intel_display.c drm/i915: Flush outstanding unpin tasks before pageflipping 2012-11-21 17:45:06 +01:00
intel_dp.c Merge branch 'for-airlied' of git://people.freedesktop.org/~danvet/drm-intel into drm-next 2012-11-20 09:22:35 +10:00
intel_drv.h drm/i915: Flush outstanding unpin tasks before pageflipping 2012-11-21 17:45:06 +01:00
intel_dvo.c Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2012-10-03 23:29:23 -07:00
intel_fb.c UAPI: (Scripted) Convert #include "..." to #include <path/...> in drivers/gpu/ 2012-10-02 18:01:07 +01:00
intel_hdmi.c drm/i915: create the DDI encoder 2012-11-11 23:51:08 +01:00
intel_i2c.c drm/i915/i2c: Track users of GMBUS force-bit 2012-11-13 16:10:04 +01:00
intel_lvds.c Merge branch 'for-airlied' of git://people.freedesktop.org/~danvet/drm-intel into drm-next 2012-11-20 09:22:35 +10:00
intel_modes.c drm/i915: Do not free the passed EDID in intel_connector_update_modes() 2012-10-22 19:33:46 +02:00
intel_opregion.c Linux 3.7-rc2 2012-10-22 14:34:51 +02:00
intel_overlay.c drm/i915: fix overlay on i830M 2012-10-23 12:57:50 +02:00
intel_panel.c drm/i915: resurrect panel lid handling 2012-11-21 17:45:05 +01:00
intel_pm.c drm/i915: Optimize DIV_ROUND_CLOSEST call 2012-11-21 17:44:59 +01:00
intel_ringbuffer.c drm/i915: Use LRI to update the semaphore registers 2012-11-21 17:45:00 +01:00
intel_ringbuffer.h drm/i915: TLB invalidation with MI_FLUSH_DW requires a post-sync op v3 2012-11-11 23:51:36 +01:00
intel_sdvo_regs.h drm/i915: clear the entire sdvo infoframe buffer 2012-10-24 15:12:48 +02:00
intel_sdvo.c Merge branch 'for-airlied' of git://people.freedesktop.org/~danvet/drm-intel into drm-next 2012-11-20 09:22:35 +10:00
intel_sprite.c drm/i915: Bad pixel formats can't reach the sprite code 2012-11-11 23:51:14 +01:00
intel_tv.c drm/i915/tv: Use intel_flush_display_plane() to flush the primary plane 2012-11-11 23:51:00 +01:00
Makefile drm/i915: Support for ns2501-DVO 2012-07-25 18:23:48 +02:00