Module Name: src Committed By: uebayasi Date: Tue Feb 2 05:58:16 UTC 2010
Modified Files: src/sys/uvm: uvm_fault.c Log Message: Indent. To generate a diff of this commit: cvs rdiff -u -r1.151 -r1.152 src/sys/uvm/uvm_fault.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/uvm/uvm_fault.c diff -u src/sys/uvm/uvm_fault.c:1.151 src/sys/uvm/uvm_fault.c:1.152 --- src/sys/uvm/uvm_fault.c:1.151 Tue Feb 2 04:35:35 2010 +++ src/sys/uvm/uvm_fault.c Tue Feb 2 05:58:16 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_fault.c,v 1.151 2010/02/02 04:35:35 uebayasi Exp $ */ +/* $NetBSD: uvm_fault.c,v 1.152 2010/02/02 05:58:16 uebayasi Exp $ */ /* * @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uvm_fault.c,v 1.151 2010/02/02 04:35:35 uebayasi Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uvm_fault.c,v 1.152 2010/02/02 05:58:16 uebayasi Exp $"); #include "opt_uvmhist.h" @@ -1074,37 +1074,37 @@ vaddr_t currva, struct vm_anon *anon) { - mutex_enter(&anon->an_lock); + mutex_enter(&anon->an_lock); - /* ignore loaned and busy pages */ - if (anon->an_page == NULL || anon->an_page->loan_count != 0 || - (anon->an_page->flags & PG_BUSY) != 0) - goto uvm_fault_upper_lookup_enter_done; - - mutex_enter(&uvm_pageqlock); - uvm_pageenqueue(anon->an_page); - mutex_exit(&uvm_pageqlock); - UVMHIST_LOG(maphist, - " MAPPING: n anon: pm=0x%x, va=0x%x, pg=0x%x", - ufi->orig_map->pmap, currva, anon->an_page, 0); - uvmexp.fltnamap++; - - /* - * Since this isn't the page that's actually faulting, - * ignore pmap_enter() failures; it's not critical - * that we enter these right now. - */ - - (void) pmap_enter(ufi->orig_map->pmap, currva, - VM_PAGE_TO_PHYS(anon->an_page), - (anon->an_ref > 1) ? (flt->enter_prot & ~VM_PROT_WRITE) : - flt->enter_prot, - PMAP_CANFAIL | - (VM_MAPENT_ISWIRED(ufi->entry) ? PMAP_WIRED : 0)); + /* ignore loaned and busy pages */ + if (anon->an_page == NULL || anon->an_page->loan_count != 0 || + (anon->an_page->flags & PG_BUSY) != 0) + goto uvm_fault_upper_lookup_enter_done; + + mutex_enter(&uvm_pageqlock); + uvm_pageenqueue(anon->an_page); + mutex_exit(&uvm_pageqlock); + UVMHIST_LOG(maphist, + " MAPPING: n anon: pm=0x%x, va=0x%x, pg=0x%x", + ufi->orig_map->pmap, currva, anon->an_page, 0); + uvmexp.fltnamap++; + + /* + * Since this isn't the page that's actually faulting, + * ignore pmap_enter() failures; it's not critical + * that we enter these right now. + */ + + (void) pmap_enter(ufi->orig_map->pmap, currva, + VM_PAGE_TO_PHYS(anon->an_page), + (anon->an_ref > 1) ? (flt->enter_prot & ~VM_PROT_WRITE) : + flt->enter_prot, + PMAP_CANFAIL | + (VM_MAPENT_ISWIRED(ufi->entry) ? PMAP_WIRED : 0)); uvm_fault_upper_lookup_enter_done: - pmap_update(ufi->orig_map->pmap); - mutex_exit(&anon->an_lock); + pmap_update(ufi->orig_map->pmap); + mutex_exit(&anon->an_lock); } static inline void @@ -1274,50 +1274,50 @@ struct uvm_faultinfo *ufi, struct uvm_faultctx *flt, vaddr_t currva, struct vm_page *curpg) { - bool readonly; + bool readonly; - /* - * calling pgo_get with PGO_LOCKED returns us pages which - * are neither busy nor released, so we don't need to check - * for this. we can just directly enter the pages. - */ + /* + * calling pgo_get with PGO_LOCKED returns us pages which + * are neither busy nor released, so we don't need to check + * for this. we can just directly enter the pages. + */ - mutex_enter(&uvm_pageqlock); - uvm_pageenqueue(curpg); - mutex_exit(&uvm_pageqlock); - UVMHIST_LOG(maphist, - " MAPPING: n obj: pm=0x%x, va=0x%x, pg=0x%x", - ufi->orig_map->pmap, currva, curpg, 0); - uvmexp.fltnomap++; - - /* - * Since this page isn't the page that's actually faulting, - * ignore pmap_enter() failures; it's not critical that we - * enter these right now. - */ - KASSERT((curpg->flags & PG_PAGEOUT) == 0); - KASSERT((curpg->flags & PG_RELEASED) == 0); - KASSERT(!UVM_OBJ_IS_CLEAN(curpg->uobject) || - (curpg->flags & PG_CLEAN) != 0); - readonly = (curpg->flags & PG_RDONLY) - || (curpg->loan_count > 0) - || UVM_OBJ_NEEDS_WRITEFAULT(curpg->uobject); - - (void) pmap_enter(ufi->orig_map->pmap, currva, - VM_PAGE_TO_PHYS(curpg), - readonly ? flt->enter_prot & ~VM_PROT_WRITE : - flt->enter_prot & MASK(ufi->entry), - PMAP_CANFAIL | (flt->wire_mapping ? PMAP_WIRED : 0)); + mutex_enter(&uvm_pageqlock); + uvm_pageenqueue(curpg); + mutex_exit(&uvm_pageqlock); + UVMHIST_LOG(maphist, + " MAPPING: n obj: pm=0x%x, va=0x%x, pg=0x%x", + ufi->orig_map->pmap, currva, curpg, 0); + uvmexp.fltnomap++; + + /* + * Since this page isn't the page that's actually faulting, + * ignore pmap_enter() failures; it's not critical that we + * enter these right now. + */ + KASSERT((curpg->flags & PG_PAGEOUT) == 0); + KASSERT((curpg->flags & PG_RELEASED) == 0); + KASSERT(!UVM_OBJ_IS_CLEAN(curpg->uobject) || + (curpg->flags & PG_CLEAN) != 0); + readonly = (curpg->flags & PG_RDONLY) + || (curpg->loan_count > 0) + || UVM_OBJ_NEEDS_WRITEFAULT(curpg->uobject); + + (void) pmap_enter(ufi->orig_map->pmap, currva, + VM_PAGE_TO_PHYS(curpg), + readonly ? flt->enter_prot & ~VM_PROT_WRITE : + flt->enter_prot & MASK(ufi->entry), + PMAP_CANFAIL | (flt->wire_mapping ? PMAP_WIRED : 0)); - /* - * NOTE: page can't be PG_WANTED or PG_RELEASED because we've - * held the lock the whole time we've had the handle. - */ - KASSERT((curpg->flags & PG_WANTED) == 0); - KASSERT((curpg->flags & PG_RELEASED) == 0); + /* + * NOTE: page can't be PG_WANTED or PG_RELEASED because we've + * held the lock the whole time we've had the handle. + */ + KASSERT((curpg->flags & PG_WANTED) == 0); + KASSERT((curpg->flags & PG_RELEASED) == 0); - curpg->flags &= ~(PG_BUSY); - UVM_PAGE_OWN(curpg, NULL); + curpg->flags &= ~(PG_BUSY); + UVM_PAGE_OWN(curpg, NULL); } static int @@ -1516,59 +1516,59 @@ struct uvm_faultinfo *ufi, struct uvm_faultctx *flt, struct vm_anon *anon, struct uvm_object **ruobj) { - struct vm_page *pg; + struct vm_page *pg; - /* get new un-owned replacement page */ - pg = uvm_pagealloc(NULL, 0, NULL, 0); - if (pg == NULL) { - return ENOMEM; - } + /* get new un-owned replacement page */ + pg = uvm_pagealloc(NULL, 0, NULL, 0); + if (pg == NULL) { + return ENOMEM; + } - /* - * copy data, kill loan, and drop uobj lock - * (if any) - */ - /* copy old -> new */ - uvm_pagecopy(anon->an_page, pg); + /* + * copy data, kill loan, and drop uobj lock + * (if any) + */ + /* copy old -> new */ + uvm_pagecopy(anon->an_page, pg); - /* force reload */ - pmap_page_protect(anon->an_page, VM_PROT_NONE); - mutex_enter(&uvm_pageqlock); /* KILL loan */ - - anon->an_page->uanon = NULL; - /* in case we owned */ - anon->an_page->pqflags &= ~PQ_ANON; - - if (*ruobj) { - /* if we were receiver of loan */ - anon->an_page->loan_count--; - } else { - /* - * we were the lender (A->K); need - * to remove the page from pageq's. - */ - uvm_pagedequeue(anon->an_page); - } + /* force reload */ + pmap_page_protect(anon->an_page, VM_PROT_NONE); + mutex_enter(&uvm_pageqlock); /* KILL loan */ - if (*ruobj) { - mutex_exit(&(*ruobj)->vmobjlock); - *ruobj = NULL; - } + anon->an_page->uanon = NULL; + /* in case we owned */ + anon->an_page->pqflags &= ~PQ_ANON; + + if (*ruobj) { + /* if we were receiver of loan */ + anon->an_page->loan_count--; + } else { + /* + * we were the lender (A->K); need + * to remove the page from pageq's. + */ + uvm_pagedequeue(anon->an_page); + } - /* install new page in anon */ - anon->an_page = pg; - pg->uanon = anon; - pg->pqflags |= PQ_ANON; + if (*ruobj) { + mutex_exit(&(*ruobj)->vmobjlock); + *ruobj = NULL; + } - uvm_pageactivate(pg); - mutex_exit(&uvm_pageqlock); + /* install new page in anon */ + anon->an_page = pg; + pg->uanon = anon; + pg->pqflags |= PQ_ANON; - pg->flags &= ~(PG_BUSY|PG_FAKE); - UVM_PAGE_OWN(pg, NULL); + uvm_pageactivate(pg); + mutex_exit(&uvm_pageqlock); - /* done! */ + pg->flags &= ~(PG_BUSY|PG_FAKE); + UVM_PAGE_OWN(pg, NULL); - return 0; + /* done! */ + + return 0; } static int @@ -2043,44 +2043,42 @@ struct uvm_faultinfo *ufi, struct uvm_faultctx *flt, struct vm_page **rpg, struct vm_page **ruobjpage) { - struct vm_amap * const amap = ufi->entry->aref.ar_amap; - struct uvm_object * const uobj = ufi->entry->object.uvm_obj; - struct vm_page *pg; - struct vm_page *uobjpage = *ruobjpage; - - if (!flt->cow_now) { - /* read fault: cap the protection at readonly */ - /* cap! */ - flt->enter_prot = flt->enter_prot & ~VM_PROT_WRITE; - } else { - /* write fault: must break the loan here */ + struct vm_amap * const amap = ufi->entry->aref.ar_amap; + struct uvm_object * const uobj = ufi->entry->object.uvm_obj; + struct vm_page *pg; + struct vm_page *uobjpage = *ruobjpage; - pg = uvm_loanbreak(uobjpage); - if (pg == NULL) { + if (!flt->cow_now) { + /* read fault: cap the protection at readonly */ + /* cap! */ + flt->enter_prot = flt->enter_prot & ~VM_PROT_WRITE; + } else { + /* write fault: must break the loan here */ - /* - * drop ownership of page, it can't - * be released - */ + pg = uvm_loanbreak(uobjpage); + if (pg == NULL) { - if (uobjpage->flags & PG_WANTED) - wakeup(uobjpage); - uobjpage->flags &= ~(PG_BUSY|PG_WANTED); - UVM_PAGE_OWN(uobjpage, NULL); - - uvmfault_unlockall(ufi, amap, uobj, - NULL); - UVMHIST_LOG(maphist, - " out of RAM breaking loan, waiting", - 0,0,0,0); - uvmexp.fltnoram++; - uvm_wait("flt_noram4"); - return ERESTART; - } - *rpg = pg; - *ruobjpage = pg; + /* + * drop ownership of page, it can't be released + */ + + if (uobjpage->flags & PG_WANTED) + wakeup(uobjpage); + uobjpage->flags &= ~(PG_BUSY|PG_WANTED); + UVM_PAGE_OWN(uobjpage, NULL); + + uvmfault_unlockall(ufi, amap, uobj, NULL); + UVMHIST_LOG(maphist, + " out of RAM breaking loan, waiting", + 0,0,0,0); + uvmexp.fltnoram++; + uvm_wait("flt_noram4"); + return ERESTART; } - return 0; + *rpg = pg; + *ruobjpage = pg; + } + return 0; } int