add i915 gpu hang fix
This commit is contained in:
parent
d8ed3147ff
commit
57eee52430
16
PKGBUILD
16
PKGBUILD
@ -8,7 +8,7 @@ pkgname=('linux' 'linux-headers' 'linux-docs') # Build stock -ARCH kernel
|
||||
_kernelname=${pkgname#linux}
|
||||
_basekernel=3.2
|
||||
pkgver=${_basekernel}
|
||||
pkgrel=2
|
||||
pkgrel=3
|
||||
arch=('i686' 'x86_64')
|
||||
url="http://www.kernel.org/"
|
||||
license=('GPL2')
|
||||
@ -21,13 +21,15 @@ source=("http://www.kernel.org/pub/linux/kernel/v3.x/linux-3.2.tar.xz"
|
||||
# standard config files for mkinitcpio ramdisk
|
||||
"${pkgname}.preset"
|
||||
'change-default-console-loglevel.patch'
|
||||
'i915-fix-ghost-tv-output.patch')
|
||||
'i915-fix-ghost-tv-output.patch'
|
||||
'i915-gpu-finish.patch')
|
||||
md5sums=('364066fa18767ec0ae5f4e4abcf9dc51'
|
||||
'4a6567864c49c5bb0f7d76d1a638912e'
|
||||
'd9efdc5f471a4082caf2f61afede6302'
|
||||
'4079a2ae3e2ee308e6db188f7bc04959'
|
||||
'875b121a32a619e0ee262c541f330427'
|
||||
'eb14dcfd80c00852ef81ded6e826826a'
|
||||
'9d3c56a4b999c8bfbd4018089a62f662'
|
||||
'263725f20c0b9eb9c353040792d644e5')
|
||||
'263725f20c0b9eb9c353040792d644e5'
|
||||
'4cd79aa147825837dc8bc9f6b736c0a0')
|
||||
|
||||
build() {
|
||||
cd "${srcdir}/linux-${_basekernel}"
|
||||
@ -38,6 +40,10 @@ build() {
|
||||
# add latest fixes from stable queue, if needed
|
||||
# http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git
|
||||
|
||||
# fix FS#27883
|
||||
# drm/i915: Only clear the GPU domains upon a successful finish
|
||||
patch -Np1 -i "${srcdir}/i915-gpu-finish.patch"
|
||||
|
||||
# Some chips detect a ghost TV output
|
||||
# mailing list discussion: http://lists.freedesktop.org/archives/intel-gfx/2011-April/010371.html
|
||||
# Arch Linux bug report: FS#19234
|
||||
|
55
i915-gpu-finish.patch
Normal file
55
i915-gpu-finish.patch
Normal file
@ -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;
|
||||
}
|
||||
|
||||
/**
|
Loading…
Reference in New Issue
Block a user