Lines Matching refs:pg

240     struct vm_page *pg, vm_prot_t prot, vm_prot_t access_type, vaddr_t va)  in ubc_fault_page()  argument
246 KASSERT(rw_write_held(pg->uobject->vmobjlock)); in ubc_fault_page()
248 KASSERT((pg->flags & PG_FAKE) == 0); in ubc_fault_page()
249 if (pg->flags & PG_RELEASED) { in ubc_fault_page()
250 uvm_pagefree(pg); in ubc_fault_page()
253 if (pg->loan_count != 0) { in ubc_fault_page()
265 newpg = uvm_loanbreak(pg); in ubc_fault_page()
267 uvm_page_unbusy(&pg, 1); in ubc_fault_page()
270 pg = newpg; in ubc_fault_page()
282 KASSERT((pg->flags & PG_RDONLY) == 0 || in ubc_fault_page()
284 pg->offset < umap->writeoff || in ubc_fault_page()
285 pg->offset + PAGE_SIZE > umap->writeoff + umap->writelen); in ubc_fault_page()
287 rdonly = uvm_pagereadonly_p(pg); in ubc_fault_page()
290 error = pmap_enter(ufi->orig_map->pmap, va, VM_PAGE_TO_PHYS(pg), in ubc_fault_page()
293 uvm_pagelock(pg); in ubc_fault_page()
294 uvm_pageactivate(pg); in ubc_fault_page()
295 uvm_pagewakeup(pg); in ubc_fault_page()
296 uvm_pageunlock(pg); in ubc_fault_page()
297 pg->flags &= ~PG_BUSY; in ubc_fault_page()
298 UVM_PAGE_OWN(pg, NULL); in ubc_fault_page()
426 struct vm_page *pg; in ubc_fault() local
430 pg = pgs[i]; in ubc_fault()
432 if (pg == NULL || pg == PGO_DONTCARE) { in ubc_fault()
435 KASSERT(uobj->vmobjlock == pg->uobject->vmobjlock); in ubc_fault()
436 error = ubc_fault_page(ufi, umap, pg, prot, access_type, va); in ubc_fault()
603 struct vm_page *pg = pgs[i]; in ubc_alloc() local
605 KASSERT(pg->uobject == uobj); in ubc_alloc()
606 if (pg->loan_count != 0) { in ubc_alloc()
608 if (pg->loan_count != 0) { in ubc_alloc()
609 pg = uvm_loanbreak(pg); in ubc_alloc()
611 if (pg == NULL) { in ubc_alloc()
620 pgs[i] = pg; in ubc_alloc()
624 VM_PAGE_TO_PHYS(pg), in ubc_alloc()
670 struct vm_page *pg = pgs[i]; in ubc_release() local
677 KASSERT(PHYS_TO_VM_PAGE(pa) == pg); in ubc_release()
679 pg->flags &= ~PG_FAKE; in ubc_release()
680 KASSERTMSG(uvm_pagegetdirty(pg) == in ubc_release()
682 "page %p not dirty", pg); in ubc_release()
683 KASSERT(pg->loan_count == 0); in ubc_release()
684 if (uvmpdpol_pageactivate_p(pg)) { in ubc_release()
685 uvm_pagelock(pg); in ubc_release()
686 uvm_pageactivate(pg); in ubc_release()
687 uvm_pageunlock(pg); in ubc_release()
895 struct vm_page *pg = pgs[i]; in ubc_alloc_direct() local
897 KASSERT(pg != NULL); in ubc_alloc_direct()
898 KASSERT(pg != PGO_DONTCARE); in ubc_alloc_direct()
899 KASSERT((pg->flags & PG_FAKE) == 0 || (gpflags & PGO_OVERWRITE)); in ubc_alloc_direct()
900 KASSERT(pg->uobject->vmobjlock == uobj->vmobjlock); in ubc_alloc_direct()
903 if ((flags & UBC_WRITE) && pg->loan_count != 0) { in ubc_alloc_direct()
904 pg = uvm_loanbreak(pg); in ubc_alloc_direct()
905 if (pg == NULL) { in ubc_alloc_direct()
911 pgs[i] = pg; in ubc_alloc_direct()
915 KASSERT((pg->flags & PG_RDONLY) == 0 || (flags & UBC_WRITE) == 0); in ubc_alloc_direct()
922 uvm_pagemarkdirty(pg, UVM_PAGE_STATUS_DIRTY); in ubc_alloc_direct()
936 struct vm_page *pg = pgs[i]; in ubc_direct_release() local
938 pg->flags &= ~PG_BUSY; in ubc_direct_release()
939 UVM_PAGE_OWN(pg, NULL); in ubc_direct_release()
940 if (pg->flags & PG_RELEASED) { in ubc_direct_release()
941 pg->flags &= ~PG_RELEASED; in ubc_direct_release()
942 uvm_pagefree(pg); in ubc_direct_release()
946 if (uvm_pagewanted_p(pg) || uvmpdpol_pageactivate_p(pg)) { in ubc_direct_release()
947 uvm_pagelock(pg); in ubc_direct_release()
948 uvm_pageactivate(pg); in ubc_direct_release()
949 uvm_pagewakeup(pg); in ubc_direct_release()
950 uvm_pageunlock(pg); in ubc_direct_release()
955 KASSERTMSG(uvm_pagegetdirty(pg) == in ubc_direct_release()
957 "page %p not dirty", pg); in ubc_direct_release()
958 pg->flags &= ~PG_FAKE; in ubc_direct_release()