linux_dsm_epyc7002/drivers/gpu/drm/i915
Chris Wilson c7dca47bd6 drm/i915/ringbuffer: Fix use of stale HEAD position whilst polling for space
During suspend, Linus found that his machine would hang for 3 seconds,
and identified that intel_ring_buffer_wait() was the culprit:

"Because from looking at the code, I get the notion that
"intel_read_status_page()" may not be exact. But what happens if that
inexact value matches our cached ring->actual_head, so we never even
try to read the exact case? Does it _stay_ inexact for arbitrarily
long times? If so, we might wait for the ring to empty forever (well,
until the timeout - the behavior I see), even though the ring really
_is_ empty."

As the reported HEAD position is only updated every time it crosses a
64k boundary, whilst draining the ring it is indeed likely to remain one
value. If that value matches the last known HEAD position, we never read
the true value from the register and so trigger a timeout.

Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-01-20 17:26:57 +00:00
..
dvo_ch7xxx.c drm/i915: use GMBUS to manage i2c links 2010-09-18 15:46:19 +01:00
dvo_ch7017.c drm/i915/dvo: Report LVDS attached to ch701x as connected 2010-12-30 13:50:43 +00:00
dvo_ivch.c drm/i915: use GMBUS to manage i2c links 2010-09-18 15:46:19 +01:00
dvo_sil164.c drm/i915: use GMBUS to manage i2c links 2010-09-18 15:46:19 +01:00
dvo_tfp410.c drm/i915: use GMBUS to manage i2c links 2010-09-18 15:46:19 +01:00
dvo.h drm/i915: Subclass intel_encoder. 2010-08-09 11:24:28 -07:00
i915_debugfs.c drm/i915/debugfs: Correct format after changing type of err object 'size' 2011-01-12 20:24:50 +00:00
i915_dma.c drm/i915: Initialise ring vfuncs for old DRI paths 2011-01-20 11:20:53 +00:00
i915_drv.c drm/i915: Add a module option to override the use of SSC 2011-01-13 16:05:58 +00:00
i915_drv.h drm/i915: Add a module option to override the use of SSC 2011-01-13 16:05:58 +00:00
i915_gem_debug.c drm/i915: Use drm_i915_gem_object as the preferred type 2010-11-23 20:19:10 +00:00
i915_gem_evict.c drm/i915/evict: Ensure we completely cleanup on failure 2011-01-11 22:55:39 +00:00
i915_gem_execbuffer.c drm/i915: Disable GPU semaphores on SandyBridge mobile 2011-01-14 09:51:05 +00:00
i915_gem_gtt.c drm/i915/gtt: Unmap the PCI pages after unbinding them from the GTT 2011-01-11 20:44:56 +00:00
i915_gem_tiling.c drm/i915: Pipelined fencing [infrastructure] 2010-12-02 10:07:05 +00:00
i915_gem.c drm/i915: If we hit OOM when allocating GTT pages, clear the aperture 2011-01-11 22:55:48 +00:00
i915_ioc32.c drm: convert drm_ioctl to unlocked_ioctl 2009-12-18 11:22:31 +10:00
i915_irq.c drm/i915: Don't kick-off hangcheck after a DRI interrupt 2011-01-20 11:21:16 +00:00
i915_mem.c
i915_reg.h drm/i915: make the blitter report buffer modifications to the FBC unit 2011-01-18 19:30:24 +00:00
i915_suspend.c drm/i915: cleanup rc6 code 2011-01-11 20:43:59 +00:00
i915_trace_points.c
i915_trace.h drm/i915: Kill the get_fence tracepoint 2010-12-02 10:20:47 +00:00
intel_acpi.c drm/i915: i915 cannot provide switcher services. 2010-12-08 15:40:44 +10:00
intel_bios.c drm/i915: Add a module option to override the use of SSC 2011-01-13 16:05:58 +00:00
intel_bios.h drm/i915: Initialize panel timing registers if VBIOS did not 2010-10-19 09:17:24 +01:00
intel_crt.c drm/i915/crt: Check for a analog monitor in case of DVI-I 2011-01-11 20:26:33 +00:00
intel_display.c drm/i915: make the blitter report buffer modifications to the FBC unit 2011-01-18 19:30:24 +00:00
intel_dp.c drm/i915: fix calculation of eDP signal levels on Sandybridge 2011-01-11 20:26:54 +00:00
intel_drv.h drm/i915/panel: Only record the backlight level when it is enabled 2011-01-11 20:27:04 +00:00
intel_dvo.c drm/i915/dvo: Fix panel and DDC i2c pins 2010-09-28 23:34:44 +01:00
intel_fb.c Revert "drm: Update fbdev fb_fix_screeninfo" 2011-01-14 16:10:28 -08:00
intel_hdmi.c i915: enable AVI infoframe for intel_hdmi.c [v4] 2010-10-22 09:14:30 +01:00
intel_i2c.c Merge branch 'drm-intel-fixes' into drm-intel-next 2010-11-15 06:49:30 +00:00
intel_lvds.c drm/i915/lvds: Add AOpen i915GMm-HFS to the list of false-positive LVDS 2011-01-14 16:36:20 +00:00
intel_modes.c drm/i915: use GMBUS to manage i2c links 2010-09-18 15:46:19 +01:00
intel_opregion.c drm/i915: Implement GPU semaphores for inter-ring synchronisation on SNB 2010-12-05 00:37:38 +00:00
intel_overlay.c drm/i915: Implement GPU semaphores for inter-ring synchronisation on SNB 2010-12-05 00:37:38 +00:00
intel_panel.c drm/i915/panel: The backlight is enabled if the current value is non-zero 2011-01-12 20:24:50 +00:00
intel_ringbuffer.c drm/i915/ringbuffer: Fix use of stale HEAD position whilst polling for space 2011-01-20 17:26:57 +00:00
intel_ringbuffer.h drm/i915/ringbuffer: Fix use of stale HEAD position whilst polling for space 2011-01-20 17:26:57 +00:00
intel_sdvo_regs.h drm/i915/sdvo: Add missing TV filters 2010-08-09 11:24:29 -07:00
intel_sdvo.c drm/i915/sdvo: Defer detection of output capabilities until probing 2011-01-11 20:26:55 +00:00
intel_tv.c drm/i915: Implement GPU semaphores for inter-ring synchronisation on SNB 2010-12-05 00:37:38 +00:00
Makefile drm/i915: Split i915_gem_execbuffer into its own file. 2010-11-25 21:19:25 +00:00