]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
.33 patch
authorGreg Kroah-Hartman <gregkh@suse.de>
Mon, 6 Dec 2010 20:08:19 +0000 (12:08 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 6 Dec 2010 20:08:19 +0000 (12:08 -0800)
queue-2.6.33/drm-ttm-clear-the-ghost-cpu_writers-flag-on-ttm_buffer_object_transfer.patch [new file with mode: 0644]
queue-2.6.33/series

diff --git a/queue-2.6.33/drm-ttm-clear-the-ghost-cpu_writers-flag-on-ttm_buffer_object_transfer.patch b/queue-2.6.33/drm-ttm-clear-the-ghost-cpu_writers-flag-on-ttm_buffer_object_transfer.patch
new file mode 100644 (file)
index 0000000..5413a63
--- /dev/null
@@ -0,0 +1,40 @@
+From 0fbecd400dd0a82d465b3086f209681e8c54cb0f Mon Sep 17 00:00:00 2001
+From: Francisco Jerez <currojerez@riseup.net>
+Date: Tue, 21 Sep 2010 02:15:15 +0200
+Subject: drm/ttm: Clear the ghost cpu_writers flag on ttm_buffer_object_transfer.
+
+From: Francisco Jerez <currojerez@riseup.net>
+
+commit 0fbecd400dd0a82d465b3086f209681e8c54cb0f upstream.
+
+It makes sense for a BO to move after a process has requested
+exclusive RW access on it (e.g. because the BO used to be located in
+unmappable VRAM and we intercepted the CPU access from the fault
+handler).
+
+If we let the ghost object inherit cpu_writers from the original
+object, ttm_bo_release_list() will raise a kernel BUG when the ghost
+object is destroyed. This can be reproduced with the nouveau driver on
+nv5x.
+
+Reported-by: Marcin Slusarz <marcin.slusarz@gmail.com>
+Reviewed-by: Jerome Glisse <jglisse@redhat.com>
+Tested-by: Marcin Slusarz <marcin.slusarz@gmail.com>
+Signed-off-by: Francisco Jerez <currojerez@riseup.net>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/gpu/drm/ttm/ttm_bo_util.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/gpu/drm/ttm/ttm_bo_util.c
++++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
+@@ -326,6 +326,7 @@ static int ttm_buffer_object_transfer(st
+       INIT_LIST_HEAD(&fbo->lru);
+       INIT_LIST_HEAD(&fbo->swap);
+       fbo->vm_node = NULL;
++      atomic_set(&fbo->cpu_writers, 0);
+       fbo->sync_obj = driver->sync_obj_ref(bo->sync_obj);
+       if (fbo->mem.mm_node)
index f33282de0a3ff851e02967342c30cb4e671d31a3..2257987a7111dbe94e15732e02b5096b6808811f 100644 (file)
@@ -143,3 +143,4 @@ netfilter-nf_conntrack-allow-nf_ct_alloc_hashtable-to-get-highmem-pages.patch
 latencytop-fix-per-task-accumulator.patch
 mm-vfs-revalidate-page-mapping-in-do_generic_file_read.patch
 bio-take-care-not-overflow-page-count-when-mapping-copying-user-data.patch
+drm-ttm-clear-the-ghost-cpu_writers-flag-on-ttm_buffer_object_transfer.patch