[arch-commits] Commit in libdrm/trunk (PKGBUILD intel_gitupdate.diff)

Thomas Bächler thomas at archlinux.org
Thu Feb 11 08:19:15 UTC 2010


    Date: Thursday, February 11, 2010 @ 03:19:14
  Author: thomas
Revision: 68164

Fix intel bugs that made the 2.10 driver unusable

This adds the following 3 commits from upstream libdrm master:
973d8d6bd04230da801a8bc19af41dbc60e1918d: intel: check return value for calloc
fdcde592c2c48e143251672cf2e82debb07606bd: intel: Account for potential pinned buffers hogging fences
4f0f871730b76730ca58209181d16725b0c40184: intel: Handle resetting of input params after EINTR during SET_TILING

Added:
  libdrm/trunk/intel_gitupdate.diff
Modified:
  libdrm/trunk/PKGBUILD

----------------------+
 PKGBUILD             |    3 ++
 intel_gitupdate.diff |   64 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 67 insertions(+)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2010-02-11 08:00:48 UTC (rev 68163)
+++ PKGBUILD	2010-02-11 08:19:14 UTC (rev 68164)
@@ -13,16 +13,19 @@
 source=(http://dri.freedesktop.org/${pkgname}/${pkgname}-${pkgver}.tar.bz2
         no-pthread-stubs.patch
 	nouveau_gitupdate.diff
+	intel_gitupdate.diff
         COPYING)
  md5sums=('667d81f993f7fd8a1b1b1b830a28a748'
          '9b5ec3bbebe86921e2057694c42f65b8'
          'f83babf7dc9d2a698b94d46b090ed674'
+         '3ebf954a427746af68330d2fa2da4e47'
          'ba65e71c481b94ef0fb6c23c7f21ffa1')
            
 build() {
   cd "${srcdir}/${pkgname}-${pkgver}"
   patch -Np1 -i "${srcdir}/no-pthread-stubs.patch" || return 1
   patch -Np0 -i "${srcdir}/nouveau_gitupdate.diff" || return 1
+  patch -Np1 -i "${srcdir}/intel_gitupdate.diff" || return 1
   libtoolize --force || return 1
   aclocal || return 1
   autoconf || return 1

Added: intel_gitupdate.diff
===================================================================
--- intel_gitupdate.diff	                        (rev 0)
+++ intel_gitupdate.diff	2010-02-11 08:19:14 UTC (rev 68164)
@@ -0,0 +1,64 @@
+diff -u b/intel/intel_bufmgr_gem.c b/intel/intel_bufmgr_gem.c
+--- b/intel/intel_bufmgr_gem.c
++++ b/intel/intel_bufmgr_gem.c
+@@ -1423,18 +1423,15 @@
+ 
+ 	memset(&set_tiling, 0, sizeof(set_tiling));
+ 	set_tiling.handle = bo_gem->gem_handle;
+-	set_tiling.tiling_mode = *tiling_mode;
+-	set_tiling.stride = stride;
+ 
+ 	do {
++		set_tiling.tiling_mode = *tiling_mode;
++		set_tiling.stride = stride;
++
+ 		ret = ioctl(bufmgr_gem->fd,
+ 			    DRM_IOCTL_I915_GEM_SET_TILING,
+ 			    &set_tiling);
+ 	} while (ret == -1 && errno == EINTR);
+-	if (ret != 0) {
+-		*tiling_mode = bo_gem->tiling_mode;
+-		return -errno;
+-	}
+ 	bo_gem->tiling_mode = set_tiling.tiling_mode;
+ 	bo_gem->swizzle_mode = set_tiling.swizzle_mode;
+ 
+@@ -1445,7 +1442,7 @@
+ 	drm_intel_bo_gem_set_in_aperture_size(bufmgr_gem, bo_gem);
+ 
+ 	*tiling_mode = bo_gem->tiling_mode;
+-	return 0;
++	return ret == 0 ? 0 : -errno;
+ }
+ 
+ static int
+@@ -1727,6 +1724,9 @@
+ 	unsigned long size;
+ 
+ 	bufmgr_gem = calloc(1, sizeof(*bufmgr_gem));
++	if (bufmgr_gem == NULL)
++		return NULL;
++
+ 	bufmgr_gem->fd = fd;
+ 
+ 	if (pthread_mutex_init(&bufmgr_gem->lock, NULL) != 0) {
+@@ -1766,6 +1766,19 @@
+ 			fprintf(stderr, "param: %d, val: %d\n", gp.param,
+ 				*gp.value);
+ 			bufmgr_gem->available_fences = 0;
++		} else {
++			/* XXX The kernel reports the total number of fences,
++			 * including any that may be pinned.
++			 *
++			 * We presume that there will be at least one pinned
++			 * fence for the scanout buffer, but there may be more
++			 * than one scanout and the user may be manually
++			 * pinning buffers. Let's move to execbuffer2 and
++			 * thereby forget the insanity of using fences...
++			 */
++			bufmgr_gem->available_fences -= 2;
++			if (bufmgr_gem->available_fences < 0)
++				bufmgr_gem->available_fences = 0;
+ 		}
+ 	}
+ 




More information about the arch-commits mailing list