Index: sys/external/bsd/drm2/dist/drm/i915/i915_gem.c =================================================================== RCS file: /cvsroot/src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c,v retrieving revision 1.14 diff -p -u -r1.14 i915_gem.c --- sys/external/bsd/drm2/dist/drm/i915/i915_gem.c 16 Jul 2014 21:48:53 -0000 1.14 +++ sys/external/bsd/drm2/dist/drm/i915/i915_gem.c 19 Aug 2014 03:10:15 -0000 @@ -1857,7 +1857,10 @@ i915_gem_fault(struct uvm_faultinfo *ufi goto unlock; } + /* Drop the lock to wire the pages. */ + mutex_exit(obj->base.gemo_uvmobj.vmobjlock); ret = i915_gem_obj_ggtt_pin(obj, 0, PIN_MAPPABLE); + mutex_enter(obj->base.gemo_uvmobj.vmobjlock); if (ret) goto unlock; Index: sys/external/bsd/drm2/ttm/ttm_bo_vm.c =================================================================== RCS file: /cvsroot/src/sys/external/bsd/drm2/ttm/ttm_bo_vm.c,v retrieving revision 1.3 diff -p -u -r1.3 ttm_bo_vm.c --- sys/external/bsd/drm2/ttm/ttm_bo_vm.c 18 Aug 2014 01:17:34 -0000 1.3 +++ sys/external/bsd/drm2/ttm/ttm_bo_vm.c 19 Aug 2014 03:10:15 -0000 @@ -159,10 +159,14 @@ ttm_bo_uvm_fault(struct uvm_faultinfo *u pgprot = vm_prot; else pgprot = ttm_io_prot(bo->mem.placement, vm_prot); + /* Drop the lock to wire the pages. */ + mutex_exit(bo->uvmobj.vmobjlock); if ((*u.ttm->bdev->driver->ttm_tt_populate)(u.ttm)) { + mutex_enter(bo->uvmobj.vmobjlock); ret = -ENOMEM; goto out2; } + mutex_enter(bo->uvmobj.vmobjlock); } KASSERT(ufi->entry->start <= vaddr);