Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/sys/uvm/uvm_map.c,v rcsdiff: /ftp/cvs/cvsroot/src/sys/uvm/uvm_map.c,v: warning: Unknown phrases like `commitid ...;' are present. retrieving revision 1.252.2.3 retrieving revision 1.253 diff -u -p -r1.252.2.3 -r1.253 --- src/sys/uvm/uvm_map.c 2008/06/17 09:15:17 1.252.2.3 +++ src/sys/uvm/uvm_map.c 2008/04/26 13:44:00 1.253 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_map.c,v 1.252.2.3 2008/06/17 09:15:17 yamt Exp $ */ +/* $NetBSD: uvm_map.c,v 1.253 2008/04/26 13:44:00 yamt Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -71,7 +71,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: uvm_map.c,v 1.252.2.3 2008/06/17 09:15:17 yamt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uvm_map.c,v 1.253 2008/04/26 13:44:00 yamt Exp $"); #include "opt_ddb.h" #include "opt_uvmhist.h" @@ -102,7 +102,7 @@ __KERNEL_RCSID(0, "$NetBSD: uvm_map.c,v #include #endif -#if !defined(UVMMAP_COUNTERS) +#if defined(UVMMAP_NOCOUNTERS) #define UVMMAP_EVCNT_DEFINE(name) /* nothing */ #define UVMMAP_EVCNT_INCR(ev) /* nothing */ @@ -231,8 +231,7 @@ extern struct vm_map *pager_map; /* XXX * => map need not be locked. */ #define SAVE_HINT(map, check, value) do { \ - if ((map)->hint == (check)) \ - (map)->hint = (value); \ + atomic_cas_ptr(&(map)->hint, (check), (value)); \ } while (/*CONSTCOND*/ 0) /* @@ -1323,11 +1322,10 @@ uvm_map_enter(struct vm_map *map, const goto nomerge; } - if (kmap) { + if (kmap) UVMMAP_EVCNT_INCR(kbackmerge); - } else { + else UVMMAP_EVCNT_INCR(ubackmerge); - } UVMHIST_LOG(maphist," starting back merge", 0, 0, 0, 0); /* @@ -1439,11 +1437,10 @@ forwardmerge: UVMMAP_EVCNT_INCR(ubimerge); } } else { - if (kmap) { + if (kmap) UVMMAP_EVCNT_INCR(kforwmerge); - } else { + else UVMMAP_EVCNT_INCR(uforwmerge); - } } UVMHIST_LOG(maphist," starting forward merge", 0, 0, 0, 0); @@ -1480,11 +1477,10 @@ forwardmerge: nomerge: if (!merged) { UVMHIST_LOG(maphist," allocating new map entry", 0, 0, 0, 0); - if (kmap) { + if (kmap) UVMMAP_EVCNT_INCR(knomerge); - } else { + else UVMMAP_EVCNT_INCR(unomerge); - } /* * allocate new entry and link it in. @@ -3069,7 +3065,9 @@ uvm_map_protect(struct vm_map *map, vadd if (UVM_OBJ_IS_VNODE(uobj) && (current->protection & VM_PROT_EXECUTE)) { + mutex_enter(&uobj->vmobjlock); vn_markexec((struct vnode *) uobj); + mutex_exit(&uobj->vmobjlock); } } } @@ -3988,11 +3986,9 @@ uvmspace_unshare(struct lwp *l) /* make a new vmspace, still holding old one */ nvm = uvmspace_fork(ovm); - kpreempt_disable(); pmap_deactivate(l); /* unbind old vmspace */ p->p_vmspace = nvm; pmap_activate(l); /* switch to new vmspace */ - kpreempt_enable(); uvmspace_free(ovm); /* drop reference to old vmspace */ } @@ -4069,11 +4065,9 @@ uvmspace_exec(struct lwp *l, vaddr_t sta * install new vmspace and drop our ref to the old one. */ - kpreempt_disable(); pmap_deactivate(l); p->p_vmspace = nvm; pmap_activate(l); - kpreempt_enable(); uvmspace_free(ovm); } @@ -4139,7 +4133,6 @@ uvmspace_free(struct vmspace *vm) mutex_destroy(&map->misc_lock); mutex_destroy(&map->mutex); rw_destroy(&map->lock); - cv_destroy(&map->cv); pmap_destroy(map->pmap); pool_cache_put(&uvm_vmspace_cache, vm); } @@ -4876,7 +4869,7 @@ uvm_object_printit(struct uvm_object *uo return; } (*pr)(" PAGES :\n "); - TAILQ_FOREACH(pg, &uobj->memq, listq.queue) { + TAILQ_FOREACH(pg, &uobj->memq, listq) { cnt++; (*pr)("<%p,0x%llx> ", pg, (long long)pg->offset); if ((cnt % 3) == 0) { @@ -4901,7 +4894,7 @@ uvm_page_printit(struct vm_page *pg, boo { struct vm_page *tpg; struct uvm_object *uobj; - struct pgflist *pgl; + struct pglist *pgl; char pgbuf[128]; char pqbuf[128]; @@ -4937,7 +4930,7 @@ uvm_page_printit(struct vm_page *pg, boo uobj = pg->uobject; if (uobj) { (*pr)(" checking object list\n"); - TAILQ_FOREACH(tpg, &uobj->memq, listq.queue) { + TAILQ_FOREACH(tpg, &uobj->memq, listq) { if (tpg == pg) { break; } @@ -4962,7 +4955,7 @@ uvm_page_printit(struct vm_page *pg, boo if (pgl) { (*pr)(" checking pageq list\n"); - LIST_FOREACH(tpg, pgl, pageq.list) { + TAILQ_FOREACH(tpg, pgl, pageq) { if (tpg == pg) { break; }