diff options
author | dyson <dyson@FreeBSD.org> | 1996-02-25 03:02:53 +0000 |
---|---|---|
committer | dyson <dyson@FreeBSD.org> | 1996-02-25 03:02:53 +0000 |
commit | fa277022da80c9662ca1f71008237cedffb02b81 (patch) | |
tree | c6dd94e0161747040028b852b7612df328d98197 /sys/amd64/amd64/trap.c | |
parent | 1fbe25ba15e7516a059c67359958c3c7dbd06cf5 (diff) | |
download | FreeBSD-src-fa277022da80c9662ca1f71008237cedffb02b81.zip FreeBSD-src-fa277022da80c9662ca1f71008237cedffb02b81.tar.gz |
Fix a problem with tracking the modified bit. Eliminate the
ugly inline-asm code, and speed up the page-table-page tracking.
Diffstat (limited to 'sys/amd64/amd64/trap.c')
-rw-r--r-- | sys/amd64/amd64/trap.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/sys/amd64/amd64/trap.c b/sys/amd64/amd64/trap.c index 8b44962..e270a58 100644 --- a/sys/amd64/amd64/trap.c +++ b/sys/amd64/amd64/trap.c @@ -35,7 +35,7 @@ * SUCH DAMAGE. * * from: @(#)trap.c 7.4 (Berkeley) 5/13/91 - * $Id: trap.c,v 1.70 1996/01/04 21:11:03 wollman Exp $ + * $Id: trap.c,v 1.71 1996/01/19 03:57:42 dyson Exp $ */ /* @@ -486,7 +486,7 @@ trap_pfault(frame, usermode) if (va < VM_MIN_KERNEL_ADDRESS) { vm_offset_t v; - vm_page_t ptepg; + vm_page_t mpte; if (p == NULL || (!usermode && va < VM_MAXUSER_ADDRESS && @@ -534,12 +534,12 @@ trap_pfault(frame, usermode) if (*((int *)vtopte(v)) == 0) (void) vm_fault(map, trunc_page(v), VM_PROT_WRITE, FALSE); - pmap_use_pt( vm_map_pmap(map), va); + mpte = pmap_use_pt( vm_map_pmap(map), va); /* Fault in the user page: */ rv = vm_fault(map, va, ftype, FALSE); - pmap_unuse_pt( vm_map_pmap(map), va); + pmap_unuse_pt( vm_map_pmap(map), va, mpte); --p->p_lock; } else { @@ -622,6 +622,7 @@ trap_pfault(frame, usermode) if (map != kernel_map) { vm_offset_t v; + vm_page_t mpte; /* * Keep swapout from messing with us during this @@ -652,12 +653,12 @@ trap_pfault(frame, usermode) (void) vm_fault(map, trunc_page(v), VM_PROT_WRITE, FALSE); - pmap_use_pt( vm_map_pmap(map), va); + mpte = pmap_use_pt( vm_map_pmap(map), va); /* Fault in the user page: */ rv = vm_fault(map, va, ftype, FALSE); - pmap_unuse_pt( vm_map_pmap(map), va); + pmap_unuse_pt( vm_map_pmap(map), va, mpte); --p->p_lock; } else { |