Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/xen/privcmd/privcmd.c
Show First 20 Lines • Show All 122 Lines • ▼ Show 20 Lines | privcmd_pg_dtor(void *handle) | ||||
*/ | */ | ||||
if (map->mapped == true) { | if (map->mapped == true) { | ||||
VM_OBJECT_WLOCK(map->mem); | VM_OBJECT_WLOCK(map->mem); | ||||
retry: | retry: | ||||
for (i = 0; i < map->size; i++) { | for (i = 0; i < map->size; i++) { | ||||
m = vm_page_lookup(map->mem, i); | m = vm_page_lookup(map->mem, i); | ||||
if (m == NULL) | if (m == NULL) | ||||
continue; | continue; | ||||
if (vm_page_sleep_if_busy(m, "pcmdum")) | if (vm_page_busy_acquire(m, VM_ALLOC_WAITFAIL) == 0) | ||||
goto retry; | goto retry; | ||||
cdev_pager_free_page(map->mem, m); | cdev_pager_free_page(map->mem, m); | ||||
} | } | ||||
VM_OBJECT_WUNLOCK(map->mem); | VM_OBJECT_WUNLOCK(map->mem); | ||||
for (i = 0; i < map->size; i++) { | for (i = 0; i < map->size; i++) { | ||||
rm.gpfn = atop(map->phys_base_addr) + i; | rm.gpfn = atop(map->phys_base_addr) + i; | ||||
HYPERVISOR_memory_op(XENMEM_remove_from_physmap, &rm); | HYPERVISOR_memory_op(XENMEM_remove_from_physmap, &rm); | ||||
▲ Show 20 Lines • Show All 292 Lines • Show Last 20 Lines |