linux_dsm_epyc7002/drivers/gpu/drm/i915
Chris Wilson e7d841ca03 drm/i915: Close race between processing unpin task and queueing the flip
Before queuing the flip but crucially after attaching the unpin-work to
the crtc, we continue to setup the unpin-work. However, should the
hardware fire early, we see the connected unpin-work and queue the task.
The task then promptly runs and unpins the fb before we finish taking
the required references or even pinning it... Havoc.

To close the race, we use the flip-pending atomic to indicate when the
flip is finally setup and enqueued. So during the flip-done processing,
we can check more accurately whether the flip was expected.

v2: Add the appropriate mb() to ensure that the writes to the page-flip
worker are complete prior to marking it active and emitting the MI_FLIP.
On the read side, the mb should be enforced by the spinlocks.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: stable@vger.kernel.org
[danvet: Review the barriers a bit, we need a write barrier both
before and after updating ->pending. Similarly we need a read barrier
in the interrupt handler both before and after reading ->pending. With
well-ordered irqs only one barrier in each place should be required,
but since this patch explicitly sets out to combat spurious interrupts
with is staged activation of the unpin work we need to go full-bore on
the barriers, too. Discussed with Chris Wilson on irc and changes
acked by him.]
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2012-12-06 14:09:37 +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: Close race between processing unpin task and queueing the flip 2012-12-06 14:09:37 +01:00
i915_dma.c drm/i915: Don't allow ring tail to reach the same cacheline as head 2012-12-03 18:31:20 +01:00
i915_drv.c drm/i915: force restore on lid open 2012-11-29 11:43:52 +01:00
i915_drv.h drm/i915: Include the last semaphore sync point in the error-state 2012-11-29 11:43:54 +01:00
i915_gem_context.c drm/i915: Preallocate next seqno before touching the ring 2012-11-29 11:43:52 +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: Preallocate next seqno before touching the ring 2012-11-29 11:43:52 +01:00
i915_gem_gtt.c drm/i915: Fix pte updates in ggtt clear range 2012-11-29 11:14:44 +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: Decouple the object from the unbound list before freeing pages 2012-12-03 17:22:16 +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: Close race between processing unpin task and queueing the flip 2012-12-06 14:09:37 +01:00
i915_reg.h drm/i915: make the panel fitter work on pipes B and C on IVB 2012-11-21 17:47:09 +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: fixup l3 parity sysfs access check 2012-12-05 19:10:20 +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 drm/i915: don't limit Haswell CRT encoder to pipe A 2012-11-21 17:46:45 +01:00
intel_ddi.c drm/i915: fix intel_ddi_get_cdclk_freq for ULT machines 2012-11-21 17:47:11 +01:00
intel_display.c drm/i915: Close race between processing unpin task and queueing the flip 2012-12-06 14:09:37 +01:00
intel_dp.c drm/i915: drm_connector_property -> drm_object_property 2012-11-21 22:12:26 +01:00
intel_drv.h drm/i915: Close race between processing unpin task and queueing the flip 2012-12-06 14:09:37 +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: set the VIC of the mode on the AVI InfoFrame 2012-11-29 11:42:38 +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 drm/i915: force restore on lid open 2012-11-29 11:43:52 +01:00
intel_modes.c drm/i915: drm_connector_property -> drm_object_property 2012-11-21 22:12:26 +01: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: do not access BLC_PWM_CTL2 on pre-gen4 hardware 2012-12-04 22:30:25 +01:00
intel_pm.c drm/i915: Clear the existing watermarks for g4x when modifying the cursor sr 2012-12-04 22:43:39 +01:00
intel_ringbuffer.c drm/i915: Don't allow ring tail to reach the same cacheline as head 2012-12-03 18:31:20 +01:00
intel_ringbuffer.h drm/i915: Don't allow ring tail to reach the same cacheline as head 2012-12-03 18:31:20 +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 drm/i915: Increase the response time for slow SDVO devices 2012-11-29 11:42:38 +01: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: drm_connector_property -> drm_object_property 2012-11-21 22:12:26 +01:00
Makefile drm/i915: Support for ns2501-DVO 2012-07-25 18:23:48 +02:00