aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/drm2/ttm/ttm_bo_vm.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/drm2/ttm/ttm_bo_vm.c')
-rw-r--r--sys/dev/drm2/ttm/ttm_bo_vm.c14
1 files changed, 3 insertions, 11 deletions
diff --git a/sys/dev/drm2/ttm/ttm_bo_vm.c b/sys/dev/drm2/ttm/ttm_bo_vm.c
index 43d027fc5cd9..3538831bbdfd 100644
--- a/sys/dev/drm2/ttm/ttm_bo_vm.c
+++ b/sys/dev/drm2/ttm/ttm_bo_vm.c
@@ -114,9 +114,7 @@ ttm_bo_vm_fault(vm_object_t vm_obj, vm_ooffset_t offset,
vm_object_pip_add(vm_obj, 1);
if (*mres != NULL) {
- vm_page_lock(*mres);
(void)vm_page_remove(*mres);
- vm_page_unlock(*mres);
}
retry:
VM_OBJECT_WUNLOCK(vm_obj);
@@ -233,11 +231,7 @@ reserve:
}
VM_OBJECT_WLOCK(vm_obj);
- if (vm_page_busied(m)) {
- vm_page_lock(m);
- VM_OBJECT_WUNLOCK(vm_obj);
- vm_page_busy_sleep(m, "ttmpbs", false);
- VM_OBJECT_WLOCK(vm_obj);
+ if (vm_page_busy_acquire(m, VM_ALLOC_WAITFAIL) == 0) {
ttm_mem_io_unlock(man);
ttm_bo_unreserve(bo);
goto retry;
@@ -245,6 +239,7 @@ reserve:
m1 = vm_page_lookup(vm_obj, OFF_TO_IDX(offset));
if (m1 == NULL) {
if (vm_page_insert(m, vm_obj, OFF_TO_IDX(offset))) {
+ vm_page_xunbusy(m);
VM_OBJECT_WUNLOCK(vm_obj);
vm_wait(vm_obj);
VM_OBJECT_WLOCK(vm_obj);
@@ -258,12 +253,9 @@ reserve:
bo, m, m1, (uintmax_t)offset));
}
m->valid = VM_PAGE_BITS_ALL;
- vm_page_xbusy(m);
if (*mres != NULL) {
KASSERT(*mres != m, ("losing %p %p", *mres, m));
- vm_page_lock(*mres);
vm_page_free(*mres);
- vm_page_unlock(*mres);
}
*mres = m;
@@ -382,7 +374,7 @@ retry:
m = vm_page_lookup(vm_obj, i);
if (m == NULL)
continue;
- if (vm_page_sleep_if_busy(m, "ttm_unm"))
+ if (vm_page_busy_acquire(m, VM_ALLOC_WAITFAIL) == 0)
goto retry;
cdev_pager_free_page(vm_obj, m);
}