diff options
author | dyson <dyson@FreeBSD.org> | 1995-11-05 20:46:03 +0000 |
---|---|---|
committer | dyson <dyson@FreeBSD.org> | 1995-11-05 20:46:03 +0000 |
commit | 1b8e5404ee43d51a47f50d452f1f170f3ca57b22 (patch) | |
tree | 4b5a3508979357f31fb77292bfa5c2930e8ba243 /sys/vm/vm_glue.c | |
parent | d461b5899dc0ba4686df948588f1fb15f2133fb7 (diff) | |
download | FreeBSD-src-1b8e5404ee43d51a47f50d452f1f170f3ca57b22.zip FreeBSD-src-1b8e5404ee43d51a47f50d452f1f170f3ca57b22.tar.gz |
Greatly simplify the msync code. Eliminate complications in vm_pageout
for msyncing. Remove a bug that manifests itself primarily on NFS
(the dirty range on the buffers is not set on msync.)
Diffstat (limited to 'sys/vm/vm_glue.c')
-rw-r--r-- | sys/vm/vm_glue.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/sys/vm/vm_glue.c b/sys/vm/vm_glue.c index e82c4f5..85e1d00 100644 --- a/sys/vm/vm_glue.c +++ b/sys/vm/vm_glue.c @@ -59,7 +59,7 @@ * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * - * $Id: vm_glue.c,v 1.28 1995/10/16 05:45:49 dyson Exp $ + * $Id: vm_glue.c,v 1.29 1995/10/23 05:35:42 dyson Exp $ */ #include <sys/param.h> @@ -251,10 +251,8 @@ vm_fork(p1, p2, isvfork) /* and force-map the upages into the kernel pmap */ for (i = 0; i < UPAGES; i++) - pmap_enter(vm_map_pmap(u_map), - ((vm_offset_t) up) + PAGE_SIZE * i, - pmap_extract(vp->pmap, addr + PAGE_SIZE * i), - VM_PROT_READ | VM_PROT_WRITE, 1); + pmap_kenter(((vm_offset_t) up) + PAGE_SIZE * i, + pmap_extract(vp->pmap, addr + PAGE_SIZE * i)); p2->p_addr = up; @@ -350,9 +348,7 @@ faultin(p) if (pa == 0) panic("faultin: missing page for UPAGES\n"); - pmap_enter(vm_map_pmap(u_map), - ((vm_offset_t) p->p_addr) + off, - pa, VM_PROT_READ | VM_PROT_WRITE, 1); + pmap_kenter(((vm_offset_t) p->p_addr) + off, pa); } s = splhigh(); @@ -506,6 +502,7 @@ swapout(p) { vm_map_t map = &p->p_vmspace->vm_map; vm_offset_t ptaddr; + int i; ++p->p_stats->p_ru.ru_nswap; /* @@ -524,8 +521,8 @@ swapout(p) /* * let the upages be paged */ - pmap_remove(vm_map_pmap(u_map), - (vm_offset_t) p->p_addr, ((vm_offset_t) p->p_addr) + UPAGES * PAGE_SIZE); + for(i=0;i<UPAGES;i++) + pmap_kremove( (vm_offset_t) p->p_addr + PAGE_SIZE * i); vm_map_pageable(map, (vm_offset_t) kstack, (vm_offset_t) kstack + UPAGES * PAGE_SIZE, TRUE); |