From f57b0af8d8500d4216578003dc47950b0d450c29 Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Sat, 10 Jan 2015 09:35:24 -0800 Subject: [PATCH] drm - Fix deadlock in ttm pager * Fix a deadlock which most often occurs via the ttm (radeon) VM pager. A similar path is also used by i915 (all intel). * Basically removes an unnecessary lock in the paging path which was creating the deadlock. Reported-by: ivadasz, ftigeot --- sys/vm/device_pager.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sys/vm/device_pager.c b/sys/vm/device_pager.c index 7e2fca3008..7328279da2 100644 --- a/sys/vm/device_pager.c +++ b/sys/vm/device_pager.c @@ -220,6 +220,9 @@ dev_pager_dealloc(vm_object_t object) /* * No requirements. + * + * WARNING! Do not obtain dev_pager_mtx here, doing so will cause a + * deadlock in DRMs VM paging code. */ static int dev_pager_getpage(vm_object_t object, vm_page_t *mpp, int seqaccess) @@ -227,14 +230,11 @@ dev_pager_getpage(vm_object_t object, vm_page_t *mpp, int seqaccess) vm_page_t page; int error; - mtx_lock(&dev_pager_mtx); - page = *mpp; - error = object->un_pager.devp.ops->cdev_pg_fault(object, - IDX_TO_OFF(page->pindex), PROT_READ, mpp); - - mtx_unlock(&dev_pager_mtx); + error = object->un_pager.devp.ops->cdev_pg_fault( + object, IDX_TO_OFF(page->pindex), + PROT_READ, mpp); return (error); } -- 2.41.0