[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

libdrm: Changes to 'ubuntu'



 debian/changelog                                 |   14 ++-
 debian/patches/100_intel_remember_named_bo.patch |   99 +++++++++++++++++++++++
 debian/patches/series                            |    1 
 3 files changed, 112 insertions(+), 2 deletions(-)

New commits:
commit 75fa93e6f343689d87dcfd2de76f32319e43b058
Author: Bryce Harrington <bryce@canonical.com>
Date:   Fri Apr 1 17:53:49 2011 -0700

    Looks like u5 was in the archive but not in git, updating to u6

diff --git a/debian/changelog b/debian/changelog
index 319c05a..6d5d78f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,18 @@
-libdrm (2.4.23-1ubuntu5) UNRELEASED; urgency=low
+libdrm (2.4.23-1ubuntu6) natty; urgency=low
+
+  * Add 100_intel_remember_named_bo.patch: Reuse already requested buffer
+    objects if re-requested.  Fixes error where dmesg shows "Object
+    ... appears more than once in object list".  Cherrypick from upstream
+    libdrm 2.4.24 tree.
+    (LP: #747205)
+
+ -- Bryce Harrington <bryce@ubuntu.com>  Fri, 01 Apr 2011 17:53:28 -0700
+
+libdrm (2.4.23-1ubuntu5) natty; urgency=low
 
   * Fix up libdrm-dev symlinks for multiarch.
 
- -- Steve Langasek <steve.langasek@ubuntu.com>  Sat, 19 Mar 2011 20:59:37 -0700
+ -- Bryce Harrington <bryce@ubuntu.com>  Fri, 01 Apr 2011 11:44:30 -0700
 
 libdrm (2.4.23-1ubuntu4) natty; urgency=low
 
diff --git a/debian/patches/100_intel_remember_named_bo.patch b/debian/patches/100_intel_remember_named_bo.patch
new file mode 100644
index 0000000..5c76ce5
--- /dev/null
+++ b/debian/patches/100_intel_remember_named_bo.patch
@@ -0,0 +1,99 @@
+commit 36d4939343d8789d9066f7245fa2d4fe69119dd8
+Author: Chris Wilson <chris@chris-wilson.co.uk>
+Date:   Mon Feb 14 09:39:06 2011 +0000
+
+    intel: Remember named bo
+    
+    ... and if asked to open a bo by the same global name, return a fresh
+    reference to the previously allocated buffer.
+    
+    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+
+diff --git a/intel/intel_bufmgr_gem.c b/intel/intel_bufmgr_gem.c
+index 092b56a..3cdffce 100644
+--- a/intel/intel_bufmgr_gem.c
++++ b/intel/intel_bufmgr_gem.c
+@@ -95,6 +95,8 @@ typedef struct _drm_intel_bufmgr_gem {
+ 	int num_buckets;
+ 	time_t time;
+ 
++	drmMMListHead named;
++
+ 	uint64_t gtt_size;
+ 	int available_fences;
+ 	int pci_device;
+@@ -124,6 +126,7 @@ struct _drm_intel_bo_gem {
+ 	 * Kenel-assigned global name for this object
+ 	 */
+ 	unsigned int global_name;
++	drmMMListHead name_list;
+ 
+ 	/**
+ 	 * Index of the buffer within the validation list while preparing a
+@@ -690,6 +693,8 @@ retry:
+ 		    drm_intel_gem_bo_free(&bo_gem->bo);
+ 		    return NULL;
+ 		}
++
++		DRMINITLISTHEAD(&bo_gem->name_list);
+ 	}
+ 
+ 	bo_gem->name = name;
+@@ -792,6 +797,23 @@ drm_intel_bo_gem_create_from_name(drm_intel_bufmgr *bufmgr,
+ 	int ret;
+ 	struct drm_gem_open open_arg;
+ 	struct drm_i915_gem_get_tiling get_tiling;
++	drmMMListHead *list;
++
++	/* At the moment most applications only have a few named bo.
++	 * For instance, in a DRI client only the render buffers passed
++	 * between X and the client are named. And since X returns the
++	 * alternating names for the front/back buffer a linear search
++	 * provides a sufficiently fast match.
++	 */
++	for (list = bufmgr_gem->named.next;
++	     list != &bufmgr_gem->named;
++	     list = list->next) {
++		bo_gem = DRMLISTENTRY(drm_intel_bo_gem, list, name_list);
++		if (bo_gem->global_name == handle) {
++			drm_intel_gem_bo_reference(&bo_gem->bo);
++			return &bo_gem->bo;
++		}
++	}
+ 
+ 	bo_gem = calloc(1, sizeof(*bo_gem));
+ 	if (!bo_gem)
+@@ -834,6 +856,7 @@ drm_intel_bo_gem_create_from_name(drm_intel_bufmgr *bufmgr,
+ 	/* XXX stride is unknown */
+ 	drm_intel_bo_gem_set_in_aperture_size(bufmgr_gem, bo_gem);
+ 
++	DRMLISTADDTAIL(&bo_gem->name_list, &bufmgr_gem->named);
+ 	DBG("bo_create_from_handle: %d (%s)\n", handle, bo_gem->name);
+ 
+ 	return &bo_gem->bo;
+@@ -925,6 +948,8 @@ drm_intel_gem_bo_unreference_final(drm_intel_bo *bo, time_t time)
+ 		bo_gem->relocs = NULL;
+ 	}
+ 
++	DRMLISTDEL(&bo_gem->name_list);
++
+ 	bucket = drm_intel_gem_bo_bucket_for_size(bufmgr_gem, bo->size);
+ 	/* Put the buffer into our internal cache for reuse if we can. */
+ 	if (bufmgr_gem->bo_reuse && bo_gem->reusable && bucket != NULL &&
+@@ -1771,6 +1796,8 @@ drm_intel_gem_bo_flink(drm_intel_bo *bo, uint32_t * name)
+ 			return -errno;
+ 		bo_gem->global_name = flink.name;
+ 		bo_gem->reusable = 0;
++
++		DRMLISTADDTAIL(&bo_gem->name_list, &bufmgr_gem->named);
+ 	}
+ 
+ 	*name = bo_gem->global_name;
+@@ -2217,6 +2244,7 @@ drm_intel_bufmgr_gem_init(int fd, int batch_size)
+ 	    drm_intel_gem_get_pipe_from_crtc_id;
+ 	bufmgr_gem->bufmgr.bo_references = drm_intel_gem_bo_references;
+ 
++	DRMINITLISTHEAD(&bufmgr_gem->named);
+ 	init_cache_buckets(bufmgr_gem);
+ 
+ 	return &bufmgr_gem->bufmgr;
diff --git a/debian/patches/series b/debian/patches/series
index e23f0b1..c37b7ae 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,2 +1,3 @@
 01_default_perms.diff
 02_build_libkms_against_in_tree_drm.diff
+100_intel_remember_named_bo.patch


Reply to: