Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/drm2/ttm/ttm_bo_vm.c
Show First 20 Lines • Show All 108 Lines • ▼ Show 20 Lines | ttm_bo_vm_fault(vm_object_t vm_obj, vm_ooffset_t offset, | ||||
vm_page_t m, m1; | vm_page_t m, m1; | ||||
int ret; | int ret; | ||||
int retval = VM_PAGER_OK; | int retval = VM_PAGER_OK; | ||||
struct ttm_mem_type_manager *man = | struct ttm_mem_type_manager *man = | ||||
&bdev->man[bo->mem.mem_type]; | &bdev->man[bo->mem.mem_type]; | ||||
vm_object_pip_add(vm_obj, 1); | vm_object_pip_add(vm_obj, 1); | ||||
if (*mres != NULL) { | if (*mres != NULL) { | ||||
vm_page_lock(*mres); | |||||
(void)vm_page_remove(*mres); | (void)vm_page_remove(*mres); | ||||
vm_page_unlock(*mres); | |||||
} | } | ||||
retry: | retry: | ||||
VM_OBJECT_WUNLOCK(vm_obj); | VM_OBJECT_WUNLOCK(vm_obj); | ||||
m = NULL; | m = NULL; | ||||
reserve: | reserve: | ||||
ret = ttm_bo_reserve(bo, false, false, false, 0); | ret = ttm_bo_reserve(bo, false, false, false, 0); | ||||
if (unlikely(ret != 0)) { | if (unlikely(ret != 0)) { | ||||
▲ Show 20 Lines • Show All 128 Lines • ▼ Show 20 Lines | if (m1 == NULL) { | ||||
KASSERT(m == m1, | KASSERT(m == m1, | ||||
("inconsistent insert bo %p m %p m1 %p offset %jx", | ("inconsistent insert bo %p m %p m1 %p offset %jx", | ||||
bo, m, m1, (uintmax_t)offset)); | bo, m, m1, (uintmax_t)offset)); | ||||
} | } | ||||
m->valid = VM_PAGE_BITS_ALL; | m->valid = VM_PAGE_BITS_ALL; | ||||
vm_page_xbusy(m); | vm_page_xbusy(m); | ||||
if (*mres != NULL) { | if (*mres != NULL) { | ||||
KASSERT(*mres != m, ("losing %p %p", *mres, m)); | KASSERT(*mres != m, ("losing %p %p", *mres, m)); | ||||
vm_page_lock(*mres); | |||||
vm_page_free(*mres); | vm_page_free(*mres); | ||||
vm_page_unlock(*mres); | |||||
} | } | ||||
*mres = m; | *mres = m; | ||||
out_io_unlock1: | out_io_unlock1: | ||||
ttm_mem_io_unlock(man); | ttm_mem_io_unlock(man); | ||||
out_unlock1: | out_unlock1: | ||||
ttm_bo_unreserve(bo); | ttm_bo_unreserve(bo); | ||||
vm_object_pip_wakeup(vm_obj); | vm_object_pip_wakeup(vm_obj); | ||||
▲ Show 20 Lines • Show All 289 Lines • Show Last 20 Lines |