[kernel/f13/master] nouveau: fix potential dma race

Ben Skeggs bskeggs at fedoraproject.org
Thu Sep 30 03:14:56 UTC 2010


commit 5c3c16ba28b8f4aeb2c4a6e853b6c515c1841231
Author: Ben Skeggs <bskeggs at redhat.com>
Date:   Thu Sep 30 13:14:12 2010 +1000

    nouveau: fix potential dma race

 drm-nouveau-ibdma-race.patch |   29 +++++++++++++++++++++++++++++
 kernel.spec                  |    8 +++++++-
 2 files changed, 36 insertions(+), 1 deletions(-)
---
diff --git a/drm-nouveau-ibdma-race.patch b/drm-nouveau-ibdma-race.patch
new file mode 100644
index 0000000..23a6004
--- /dev/null
+++ b/drm-nouveau-ibdma-race.patch
@@ -0,0 +1,29 @@
+From 55647c139cf7d6caeaa08a99b2165763a02ab71a Mon Sep 17 00:00:00 2001
+From: Ben Skeggs <bskeggs at redhat.com>
+Date: Thu, 30 Sep 2010 09:09:42 +1000
+Subject: [PATCH] drm/nv50: prevent (IB_PUT == IB_GET) for occurring unless idle
+
+Should fix a DMA race condition I've never seen myself, but could be
+the culprit in some random hangs that have been reported.
+
+Signed-off-by: Ben Skeggs <bskeggs at redhat.com>
+---
+ drivers/gpu/drm/nouveau/nouveau_dma.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/gpu/drm/nouveau/nouveau_dma.c b/drivers/gpu/drm/nouveau/nouveau_dma.c
+index 9d27acd..eb24e2b 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_dma.c
++++ b/drivers/gpu/drm/nouveau/nouveau_dma.c
+@@ -214,7 +214,7 @@ nv50_dma_push_wait(struct nouveau_channel *chan, int count)
+ 
+ 		chan->dma.ib_free = get - chan->dma.ib_put;
+ 		if (chan->dma.ib_free <= 0)
+-			chan->dma.ib_free += chan->dma.ib_max + 1;
++			chan->dma.ib_free += chan->dma.ib_max;
+ 	}
+ 
+ 	return 0;
+-- 
+1.7.2.2
+
diff --git a/kernel.spec b/kernel.spec
index e2e4369..eba8cbc 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -48,7 +48,7 @@ Summary: The Linux kernel
 # reset this by hand to 1 (or to 0 and then use rpmdev-bumpspec).
 # scripts/rebase.sh should be made to do that for you, actually.
 #
-%global baserelease 58
+%global baserelease 59
 %global fedora_build %{baserelease}
 
 # base_sublevel is the kernel version we're starting with and patching
@@ -715,6 +715,7 @@ Patch1900: linux-2.6-intel-iommu-igfx.patch
 Patch1901: drm-nouveau-acpi-edid-fix.patch
 Patch1902: agp-intel-use-the-correct-mask-to-detect-i830-aperture-size.patch
 Patch1903: drm-nouveau-pusher-intr.patch
+Patch1904: drm-nouveau-ibdma-race.patch
 # radeon
 
 # linux1394 git patches
@@ -1408,6 +1409,7 @@ ApplyPatch drm-nouveau-nva3-noaccel.patch
 ApplyPatch drm-nouveau-nv50-crtc-update-delay.patch
 ApplyPatch drm-nouveau-acpi-edid-fix.patch
 ApplyPatch drm-nouveau-pusher-intr.patch
+ApplyPatch drm-nouveau-ibdma-race.patch
 
 ApplyPatch drm-intel-big-hammer.patch
 ApplyOptionalPatch drm-intel-next.patch
@@ -2164,6 +2166,10 @@ fi
 
 
 %changelog
+* Thu Sep 30 2010 Ben Skeggs <bskeggs at redhat.com> 2.6.34.7-59
+- nouveau: fix theoretical race condition that could be responsible for
+  certain random hangs that have been reported.
+
 * Mon Sep 27 2010 Ben Skeggs <bskeggs at redhat.com> 2.6.34.7-58
 - nouveau: better handling of certain GPU errors
 


More information about the scm-commits mailing list