summaryrefslogtreecommitdiff
path: root/kernels/linux-libre-lts-xen/i915-gpu-finish.patch
diff options
context:
space:
mode:
authorLuke Shumaker <LukeShu@sbcglobal.net>2012-05-06 21:39:39 -0400
committerLuke Shumaker <LukeShu@sbcglobal.net>2012-05-06 21:39:39 -0400
commit38dbfc58450f5064f8534435ccc7b4c005bbfa68 (patch)
tree829e9c277a024cf520db2b7bfaf7d5cb4fe5ba45 /kernels/linux-libre-lts-xen/i915-gpu-finish.patch
parente1f7b97ab1603aea664ee3f392f6263fd7812b3c (diff)
parentd48da3adb2e5eaab66403aa3f0fce2d78f3ecd12 (diff)
downloadabslibre-38dbfc58450f5064f8534435ccc7b4c005bbfa68.tar.gz
abslibre-38dbfc58450f5064f8534435ccc7b4c005bbfa68.tar.bz2
abslibre-38dbfc58450f5064f8534435ccc7b4c005bbfa68.zip
Merge branch 'master' of ssh://parabolagnulinux.org:1863/srv/git/abslibre
Diffstat (limited to 'kernels/linux-libre-lts-xen/i915-gpu-finish.patch')
-rw-r--r--kernels/linux-libre-lts-xen/i915-gpu-finish.patch55
1 files changed, 55 insertions, 0 deletions
diff --git a/kernels/linux-libre-lts-xen/i915-gpu-finish.patch b/kernels/linux-libre-lts-xen/i915-gpu-finish.patch
new file mode 100644
index 000000000..5840c9181
--- /dev/null
+++ b/kernels/linux-libre-lts-xen/i915-gpu-finish.patch
@@ -0,0 +1,55 @@
+commit 389a55581e30607af0fcde6cdb4e54f189cf46cf
+Author: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Tue Nov 29 15:12:16 2011 +0000
+
+ drm/i915: Only clear the GPU domains upon a successful finish
+
+ By clearing the GPU read domains before waiting upon the buffer, we run
+ the risk of the wait being interrupted and the domains prematurely
+ cleared. The next time we attempt to wait upon the buffer (after
+ userspace handles the signal), we believe that the buffer is idle and so
+ skip the wait.
+
+ There are a number of bugs across all generations which show signs of an
+ overly haste reuse of active buffers.
+
+ Such as:
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=29046
+ https://bugs.freedesktop.org/show_bug.cgi?id=35863
+ https://bugs.freedesktop.org/show_bug.cgi?id=38952
+ https://bugs.freedesktop.org/show_bug.cgi?id=40282
+ https://bugs.freedesktop.org/show_bug.cgi?id=41098
+ https://bugs.freedesktop.org/show_bug.cgi?id=41102
+ https://bugs.freedesktop.org/show_bug.cgi?id=41284
+ https://bugs.freedesktop.org/show_bug.cgi?id=42141
+
+ A couple of those pre-date i915_gem_object_finish_gpu(), so may be
+ unrelated (such as a wild write from a userspace command buffer), but
+ this does look like a convincing cause for most of those bugs.
+
+ Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+ Cc: stable@kernel.org
+ Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+ Reviewed-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
+
+diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
+index d560175..036bc58 100644
+--- a/drivers/gpu/drm/i915/i915_gem.c
++++ b/drivers/gpu/drm/i915/i915_gem.c
+@@ -3087,10 +3087,13 @@ i915_gem_object_finish_gpu(struct drm_i915_gem_object *obj)
+ return ret;
+ }
+
++ ret = i915_gem_object_wait_rendering(obj);
++ if (ret)
++ return ret;
++
+ /* Ensure that we invalidate the GPU's caches and TLBs. */
+ obj->base.read_domains &= ~I915_GEM_GPU_DOMAINS;
+-
+- return i915_gem_object_wait_rendering(obj);
++ return 0;
+ }
+
+ /**