Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/drm2/ttm/ttm_bo_vm.c
Show First 20 Lines • Show All 231 Lines • ▼ Show 20 Lines | reserve: | ||||
VM_OBJECT_WLOCK(vm_obj); | VM_OBJECT_WLOCK(vm_obj); | ||||
if (vm_page_busy_acquire(m, VM_ALLOC_WAITFAIL) == 0) { | if (vm_page_busy_acquire(m, VM_ALLOC_WAITFAIL) == 0) { | ||||
ttm_mem_io_unlock(man); | ttm_mem_io_unlock(man); | ||||
ttm_bo_unreserve(bo); | ttm_bo_unreserve(bo); | ||||
goto retry; | goto retry; | ||||
} | } | ||||
m1 = vm_page_lookup(vm_obj, OFF_TO_IDX(offset)); | m1 = vm_page_lookup(vm_obj, OFF_TO_IDX(offset)); | ||||
/* XXX This looks like it should just be vm_page_replace? */ | |||||
if (m1 == NULL) { | if (m1 == NULL) { | ||||
if (vm_page_insert(m, vm_obj, OFF_TO_IDX(offset))) { | if (vm_page_insert(m, vm_obj, OFF_TO_IDX(offset))) { | ||||
vm_page_xunbusy(m); | vm_page_xunbusy(m); | ||||
VM_OBJECT_WUNLOCK(vm_obj); | VM_OBJECT_WUNLOCK(vm_obj); | ||||
vm_wait(vm_obj); | vm_wait(vm_obj); | ||||
VM_OBJECT_WLOCK(vm_obj); | VM_OBJECT_WLOCK(vm_obj); | ||||
ttm_mem_io_unlock(man); | ttm_mem_io_unlock(man); | ||||
ttm_bo_unreserve(bo); | ttm_bo_unreserve(bo); | ||||
goto retry; | goto retry; | ||||
} | } | ||||
} else { | } else { | ||||
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)); | ||||
} | } | ||||
vm_page_valid(m); | vm_page_valid(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_xunbusy(*mres); | |||||
vm_page_free(*mres); | vm_page_free(*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); | ||||
▲ Show 20 Lines • Show All 290 Lines • Show Last 20 Lines |