summaryrefslogtreecommitdiffstats
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.c27
1 files changed, 12 insertions, 15 deletions
diff --git a/sys/dev/drm2/ttm/ttm_bo_vm.c b/sys/dev/drm2/ttm/ttm_bo_vm.c
index 5d72d97..96ebeca 100644
--- a/sys/dev/drm2/ttm/ttm_bo_vm.c
+++ b/sys/dev/drm2/ttm/ttm_bo_vm.c
@@ -106,21 +106,18 @@ ttm_bo_vm_fault(vm_object_t vm_obj, vm_ooffset_t offset,
struct ttm_buffer_object *bo = vm_obj->handle;
struct ttm_bo_device *bdev = bo->bdev;
struct ttm_tt *ttm = NULL;
- vm_page_t m, m1, oldm;
+ vm_page_t m, m1;
int ret;
int retval = VM_PAGER_OK;
struct ttm_mem_type_manager *man =
&bdev->man[bo->mem.mem_type];
vm_object_pip_add(vm_obj, 1);
- oldm = *mres;
- if (oldm != NULL) {
- vm_page_lock(oldm);
- vm_page_remove(oldm);
- vm_page_unlock(oldm);
- *mres = NULL;
- } else
- oldm = NULL;
+ if (*mres != NULL) {
+ vm_page_lock(*mres);
+ vm_page_remove(*mres);
+ vm_page_unlock(*mres);
+ }
retry:
VM_OBJECT_WUNLOCK(vm_obj);
m = NULL;
@@ -261,14 +258,14 @@ reserve:
bo, m, m1, (uintmax_t)offset));
}
m->valid = VM_PAGE_BITS_ALL;
- *mres = m;
vm_page_xbusy(m);
-
- if (oldm != NULL) {
- vm_page_lock(oldm);
- vm_page_free(oldm);
- vm_page_unlock(oldm);
+ if (*mres != NULL) {
+ KASSERT(*mres != m, ("loosing %p %p", *mres, m));
+ vm_page_lock(*mres);
+ vm_page_free(*mres);
+ vm_page_unlock(*mres);
}
+ *mres = m;
out_io_unlock1:
ttm_mem_io_unlock(man);
OpenPOWER on IntegriCloud