[libdrm/f18] nouveau: fix kernel pushbuf rejection

Ben Skeggs bskeggs at fedoraproject.org
Mon Jan 7 23:35:57 UTC 2013


commit 5c7437531af80ab4793311cc83353d6230459e9a
Author: Ben Skeggs <bskeggs at redhat.com>
Date:   Tue Jan 8 09:34:31 2013 +1000

    nouveau: fix kernel pushbuf rejection

 libdrm-2.4.40-nouveau-pushbuf-type.patch |   44 ++++++++++++++++++++++++++++++
 libdrm.spec                              |    8 +++++-
 2 files changed, 51 insertions(+), 1 deletions(-)
---
diff --git a/libdrm-2.4.40-nouveau-pushbuf-type.patch b/libdrm-2.4.40-nouveau-pushbuf-type.patch
new file mode 100644
index 0000000..1aaaa64
--- /dev/null
+++ b/libdrm-2.4.40-nouveau-pushbuf-type.patch
@@ -0,0 +1,44 @@
+From 891517f5111cd82909906d5e8ee0299db0d46762 Mon Sep 17 00:00:00 2001
+From: Ben Skeggs <bskeggs at redhat.com>
+Date: Mon, 7 Jan 2013 13:07:13 +1000
+Subject: [PATCH] nouveau: disallow pushbuf BOs in multiple memory types
+
+Under certain circumstances it's possible for libdrm to decide to move
+a GART|VRAM pushbuf to be VRAM-only.  This causes the kernel to reject
+the command submission on GF8 and up, due to a stricter policy where
+buffers are only allowed to move to memory types that were specified
+at creation time.
+
+The simplest fix for this is to force the creation-time memory type for
+the lifetime of the push buffer.
+
+Signed-off-by: Ben Skeggs <bskeggs at redhat.com>
+---
+ nouveau/pushbuf.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/nouveau/pushbuf.c b/nouveau/pushbuf.c
+index 0e37ce3..ff8e125 100644
+--- a/nouveau/pushbuf.c
++++ b/nouveau/pushbuf.c
+@@ -574,13 +574,13 @@ nouveau_pushbuf_new(struct nouveau_client *client, struct nouveau_object *chan,
+ 	push->client = client;
+ 	push->channel = immediate ? chan : NULL;
+ 	push->flags = NOUVEAU_BO_RD;
+-	if (fifo->pushbuf & NOUVEAU_GEM_DOMAIN_VRAM) {
+-		push->flags |= NOUVEAU_BO_VRAM;
+-		nvpb->type   = NOUVEAU_BO_VRAM;
+-	}
+ 	if (fifo->pushbuf & NOUVEAU_GEM_DOMAIN_GART) {
+ 		push->flags |= NOUVEAU_BO_GART;
+ 		nvpb->type   = NOUVEAU_BO_GART;
++	} else
++	if (fifo->pushbuf & NOUVEAU_GEM_DOMAIN_VRAM) {
++		push->flags |= NOUVEAU_BO_VRAM;
++		nvpb->type   = NOUVEAU_BO_VRAM;
+ 	}
+ 	nvpb->type |= NOUVEAU_BO_MAP;
+ 
+-- 
+1.8.0.1
+
diff --git a/libdrm.spec b/libdrm.spec
index 83b3594..1c6d164 100644
--- a/libdrm.spec
+++ b/libdrm.spec
@@ -3,7 +3,7 @@
 Summary: Direct Rendering Manager runtime library
 Name: libdrm
 Version: 2.4.40
-Release: 1%{?dist}
+Release: 2%{?dist}
 License: MIT
 Group: System Environment/Libraries
 URL: http://dri.sourceforge.net
@@ -32,6 +32,8 @@ Patch3: libdrm-make-dri-perms-okay.patch
 Patch4: libdrm-2.4.0-no-bc.patch
 # make rule to print the list of test programs
 Patch5: libdrm-2.4.25-check-programs.patch
+# nouveau: force single pushbuf memory type to prevent kernel rejections
+Patch6: libdrm-2.4.40-nouveau-pushbuf-type.patch
 
 %description
 Direct Rendering Manager runtime library
@@ -59,6 +61,7 @@ Utility programs for the kernel DRM interface.  Will void your warranty.
 %patch3 -p1 -b .forceperms
 %patch4 -p1 -b .no-bc
 %patch5 -p1 -b .check
+%patch6 -p1 -b .nvpbtype
 
 %build
 autoreconf -v --install || exit 1
@@ -192,6 +195,9 @@ done
 %{_mandir}/man3/drm*.3*
 
 %changelog
+* Tue Jan 09 2013 Ben Skeggs <bskeggs at redhat.com> 2.4.40-2
+- nouveau: fix bug causing kernel to reject certain command streams
+
 * Tue Nov 06 2012 Dave Airlie <airlied at redhat.com> 2.4.40-1
 - libdrm 2.4.40
 


More information about the scm-commits mailing list