Changeset View
Changeset View
Standalone View
Standalone View
head/sys/compat/linuxkpi/common/src/linux_page.c
Show First 20 Lines • Show All 148 Lines • ▼ Show 20 Lines | |||||
{ | { | ||||
if (PMAP_HAS_DMAP) { | if (PMAP_HAS_DMAP) { | ||||
unsigned long npages = 1UL << order; | unsigned long npages = 1UL << order; | ||||
unsigned long x; | unsigned long x; | ||||
for (x = 0; x != npages; x++) { | for (x = 0; x != npages; x++) { | ||||
vm_page_t pgo = page + x; | vm_page_t pgo = page + x; | ||||
vm_page_lock(pgo); | |||||
if (vm_page_unwire_noq(pgo)) | if (vm_page_unwire_noq(pgo)) | ||||
vm_page_free(pgo); | vm_page_free(pgo); | ||||
vm_page_unlock(pgo); | |||||
} | } | ||||
} else { | } else { | ||||
vm_offset_t vaddr; | vm_offset_t vaddr; | ||||
vaddr = (vm_offset_t)page_address(page); | vaddr = (vm_offset_t)page_address(page); | ||||
linux_free_kmem(vaddr, order); | linux_free_kmem(vaddr, order); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 121 Lines • ▼ Show 20 Lines | linux_shmem_read_mapping_page_gfp(vm_object_t obj, int pindex, gfp_t gfp) | ||||
VM_OBJECT_WLOCK(obj); | VM_OBJECT_WLOCK(obj); | ||||
page = vm_page_grab(obj, pindex, VM_ALLOC_NORMAL | VM_ALLOC_NOBUSY | | page = vm_page_grab(obj, pindex, VM_ALLOC_NORMAL | VM_ALLOC_NOBUSY | | ||||
VM_ALLOC_WIRED); | VM_ALLOC_WIRED); | ||||
if (page->valid != VM_PAGE_BITS_ALL) { | if (page->valid != VM_PAGE_BITS_ALL) { | ||||
vm_page_xbusy(page); | vm_page_xbusy(page); | ||||
if (vm_pager_has_page(obj, pindex, NULL, NULL)) { | if (vm_pager_has_page(obj, pindex, NULL, NULL)) { | ||||
rv = vm_pager_get_pages(obj, &page, 1, NULL, NULL); | rv = vm_pager_get_pages(obj, &page, 1, NULL, NULL); | ||||
if (rv != VM_PAGER_OK) { | if (rv != VM_PAGER_OK) { | ||||
vm_page_lock(page); | |||||
vm_page_unwire_noq(page); | vm_page_unwire_noq(page); | ||||
vm_page_free(page); | vm_page_free(page); | ||||
vm_page_unlock(page); | |||||
VM_OBJECT_WUNLOCK(obj); | VM_OBJECT_WUNLOCK(obj); | ||||
return (ERR_PTR(-EINVAL)); | return (ERR_PTR(-EINVAL)); | ||||
} | } | ||||
MPASS(page->valid == VM_PAGE_BITS_ALL); | MPASS(page->valid == VM_PAGE_BITS_ALL); | ||||
} else { | } else { | ||||
pmap_zero_page(page); | pmap_zero_page(page); | ||||
page->valid = VM_PAGE_BITS_ALL; | page->valid = VM_PAGE_BITS_ALL; | ||||
page->dirty = 0; | page->dirty = 0; | ||||
▲ Show 20 Lines • Show All 71 Lines • Show Last 20 Lines |