summaryrefslogtreecommitdiffstats
path: root/sys/alpha
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2004-07-08 07:44:55 +0000
committeralc <alc@FreeBSD.org>2004-07-08 07:44:55 +0000
commit66bf3365a74eb59868c255ba337a4c8b7bff8825 (patch)
tree6b6f449ae9810e14265846594718b8572453c9a3 /sys/alpha
parent038b71d4b69f2775a64db3db0bb1f70d1a1b53bd (diff)
downloadFreeBSD-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.c16
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);
}
/*
OpenPOWER on IntegriCloud