diff options
author | alc <alc@FreeBSD.org> | 2004-07-08 07:44:55 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2004-07-08 07:44:55 +0000 |
commit | 66bf3365a74eb59868c255ba337a4c8b7bff8825 (patch) | |
tree | 6b6f449ae9810e14265846594718b8572453c9a3 /sys/alpha | |
parent | 038b71d4b69f2775a64db3db0bb1f70d1a1b53bd (diff) | |
download | FreeBSD-src-66bf3365a74eb59868c255ba337a4c8b7bff8825.zip FreeBSD-src-66bf3365a74eb59868c255ba337a4c8b7bff8825.tar.gz |
Add pmap locking to pmap_emulate_reference(). Remove unused and once-used
variables.
Tested by: kensmith@
Diffstat (limited to 'sys/alpha')
-rw-r--r-- | sys/alpha/alpha/pmap.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/sys/alpha/alpha/pmap.c b/sys/alpha/alpha/pmap.c index 90c7689..51bd126 100644 --- a/sys/alpha/alpha/pmap.c +++ b/sys/alpha/alpha/pmap.c @@ -2480,9 +2480,8 @@ pmap_clear_reference(vm_page_t m) void pmap_emulate_reference(struct vmspace *vm, vm_offset_t v, int user, int write) { + pmap_t pmap; pt_entry_t faultoff, *pte; - vm_offset_t pa; - int user_addr; /* * Convert process and virtual address to physical address. @@ -2490,12 +2489,14 @@ pmap_emulate_reference(struct vmspace *vm, vm_offset_t v, int user, int write) if (v >= VM_MIN_KERNEL_ADDRESS) { if (user) panic("pmap_emulate_reference: user ref to kernel"); + pmap = kernel_pmap; + PMAP_LOCK(pmap); pte = vtopte(v); - user_addr = 0; } else { KASSERT(vm != NULL, ("pmap_emulate_reference: bad vmspace")); - pte = pmap_lev3pte(vm->vm_map.pmap, v); - user_addr = 1; + pmap = &vm->vm_pmap; + PMAP_LOCK(pmap); + pte = pmap_lev3pte(pmap, v); } #ifdef DEBUG /* These checks are more expensive */ if (!pmap_pte_v(pte)) @@ -2520,11 +2521,9 @@ pmap_emulate_reference(struct vmspace *vm, vm_offset_t v, int user, int write) #endif /* Other diagnostics? */ #endif - pa = pmap_pte_pa(pte); - KASSERT((*pte & PG_MANAGED) != 0, ("pmap_emulate_reference(%p, 0x%lx, %d, %d): pa 0x%lx not managed", - curthread, v, user, write, pa)); + curthread, v, user, write, pmap_pte_pa(pte))); /* * Twiddle the appropriate bits to reflect the reference @@ -2542,6 +2541,7 @@ pmap_emulate_reference(struct vmspace *vm, vm_offset_t v, int user, int write) *pte = (*pte & ~faultoff); ALPHA_TBIS(v); + PMAP_UNLOCK(pmap); } /* |