aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2014-01-30 09:38:16 -0500
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-01-30 11:25:39 -0500
commit8b6124a633d8095b0c8364f585edff9c59568a96 (patch)
tree3ffc006483d7325bd1f4f97d74703a320c5b245e /drivers/gpu
parent53a4c6b26ddef1f2969f8bc17178bcda4782d18d (diff)
drm/i915: Don't access snooped pages through the GTT (even for error capture)
We want to use the GTT for reading back objects upon an error so that we have exactly the information that the GPU saw. However, it is verboten to access snoopable pages through the GTT and causes my PineView GPU to throw a page fault instead. This has not been a problem in the past as we only dumped ringbuffers and batchbuffers, both of which must be not snooped. However, the introduction of HWS page dumping leads to a read of a snooped object through the GTT. This was introduced by commit f3ce3821393e31a3f1a8ca6c24eb2d735a428445 Author: Chris Wilson <chris@chris-wilson.co.uk> Date: Thu Jan 23 22:40:36 2014 +0000 drm/i915: Include HW status page in error capture Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> [danvet:s/uncached/not snooped/ for one case in the commit message as requested by Chris.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/i915/i915_gpu_error.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c
index 64591ca7fa3e..94542d498296 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.c
+++ b/drivers/gpu/drm/i915/i915_gpu_error.c
@@ -536,7 +536,8 @@ i915_error_object_create_sized(struct drm_i915_private *dev_priv,
536 goto unwind; 536 goto unwind;
537 537
538 local_irq_save(flags); 538 local_irq_save(flags);
539 if (reloc_offset < dev_priv->gtt.mappable_end && 539 if (src->cache_level == I915_CACHE_NONE &&
540 reloc_offset < dev_priv->gtt.mappable_end &&
540 src->has_global_gtt_mapping && 541 src->has_global_gtt_mapping &&
541 i915_is_ggtt(vm)) { 542 i915_is_ggtt(vm)) {
542 void __iomem *s; 543 void __iomem *s;