linux/drivers/gpu/drm/i915
Daniel Vetter 94a335dba3 drm/i915: correctly restore fences with objects attached
To avoid stalls we delay tiling changes and especially hold of
committing the new fence state for as long as possible.
Synchronization points are in the execbuf code and in our gtt fault
handler.

Unfortunately we've missed that tricky detail when adding proper fence
restore code in

commit 19b2dbde57
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Wed Jun 12 10:15:12 2013 +0100

    drm/i915: Restore fences after resume and GPU resets

The result was that we've restored fences for objects with no tiling,
since the object<->fence link still existed after resume. Now that
wouldn't have been too bad since any subsequent access would have
fixed things up, but if we've changed from tiled to untiled real havoc
happened:

The tiling stride is stored -1 in the fence register, so a stride of 0
resulted in all 1s in the top 32bits, and so a completely bogus fence
spanning everything from the start of the object to the top of the
GTT. The tell-tale in the register dumps looks like:

                 FENCE START 2: 0x0214d001
                 FENCE END 2: 0xfffff3ff

Bit 11 isn't set since the hw doesn't store it, even when writing all
1s (at least on my snb here).

To prevent such a gaffle in the future add a sanity check for fences
with an untiled object attached in i915_gem_write_fence.

v2: Fix the WARN, spotted by Chris.

v3: Trying to reuse get_fences looked ugly and obfuscated the code.
Instead reuse update_fence and to make it really dtrt also move the
fence dirty state clearing into update_fence.

Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Stéphane Marchesin <marcheu@chromium.org>
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=60530
Cc: stable@vger.kernel.org (for 3.10 only)
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Tested-by: Matthew Garrett <matthew.garrett@nebula.com>
Tested-by: Björn Bidar <theodorstormgrade@gmail.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2013-07-19 00:08:16 +02:00
..
dvo.h
dvo_ch7xxx.c
dvo_ch7017.c
dvo_ivch.c
dvo_ns2501.c
dvo_sil164.c
dvo_tfp410.c
i915_debugfs.c drm/i915: Break up the large vsnprintf() in print_error_buffers() 2013-07-01 11:15:01 +02:00
i915_dma.c drm/i915: fix long-standing SNB regression in power consumption after resume v2 2013-07-17 08:55:44 +02:00
i915_drv.c drm/i915: switch disable_power_well default value to 1 2013-07-09 16:31:48 +02:00
i915_drv.h Linux 3.10 2013-07-18 12:03:29 +02:00
i915_gem.c drm/i915: correctly restore fences with objects attached 2013-07-19 00:08:16 +02:00
i915_gem_context.c drm/i915: Fix context sizes on HSW 2013-07-01 11:14:54 +02:00
i915_gem_debug.c
i915_gem_dmabuf.c
i915_gem_evict.c
i915_gem_execbuffer.c
i915_gem_gtt.c
i915_gem_stolen.c drm/i915: Don't try to tear down the stolen drm_mm if it's not there 2013-07-02 11:47:19 +02:00
i915_gem_tiling.c
i915_ioc32.c
i915_irq.c drm/i915: fix hpd interrupt register locking 2013-07-01 11:14:59 +02:00
i915_reg.h drm/i915: Fix context sizes on HSW 2013-07-01 11:14:54 +02:00
i915_suspend.c Linux 3.10 2013-07-18 12:03:29 +02:00
i915_sysfs.c
i915_trace.h
i915_trace_points.c
i915_ums.c
intel_acpi.c
intel_bios.c
intel_bios.h
intel_crt.c
intel_ddi.c drm/i915: Preserve the DDI_A_4_LANES bit from the bios 2013-07-13 10:44:32 +02:00
intel_display.c drm/i915: Fix dereferencing invalid connectors in is_crtc_connector_off() 2013-07-17 13:24:18 +02:00
intel_dp.c drm/i915: fix lane bandwidth capping for DP 1.2 sinks 2013-07-09 16:35:50 +02:00
intel_drv.h drm/i915: Preserve the DDI_A_4_LANES bit from the bios 2013-07-13 10:44:32 +02:00
intel_dvo.c
intel_fb.c Merge tag 'drm-intel-next-2013-06-18' of git://people.freedesktop.org/~danvet/drm-intel into drm-next 2013-06-28 09:50:34 +10:00
intel_hdmi.c Revert "drm/i915: Don't use the HDMI port color range bit on Valleyview" 2013-07-01 11:14:53 +02:00
intel_i2c.c
intel_lvds.c drm/i915: fix pfit regression for non-autoscaled resolutions 2013-07-12 18:55:08 +02:00
intel_modes.c
intel_opregion.c drm/i915: tune down DIDL warning about too many outputs 2013-07-01 11:14:42 +02:00
intel_overlay.c
intel_panel.c drm/i915: fix pfit regression for non-autoscaled resolutions 2013-07-12 18:55:08 +02:00
intel_pm.c drm/i915: fix long-standing SNB regression in power consumption after resume v2 2013-07-17 08:55:44 +02:00
intel_ringbuffer.c drm/i915: fix up ring cleanup for the i830/i845 CS tlb w/a 2013-07-09 16:31:49 +02:00
intel_ringbuffer.h
intel_sdvo.c Merge tag 'drm-intel-next-2013-06-18' of git://people.freedesktop.org/~danvet/drm-intel into drm-next 2013-06-28 09:50:34 +10:00
intel_sdvo_regs.h
intel_sideband.c
intel_sprite.c
intel_tv.c
Makefile