summaryrefslogtreecommitdiffstats
path: root/sys/alpha
diff options
context:
space:
mode:
authorjake <jake@FreeBSD.org>2000-11-22 07:42:04 +0000
committerjake <jake@FreeBSD.org>2000-11-22 07:42:04 +0000
commit0c0be4e82677a2d8fb49b7a70676bf359e7360b0 (patch)
treea0c32260edfde6d861e66b11172147608684043e /sys/alpha
parent1b544875743d53491a096b0c757bf30ce73bb83b (diff)
downloadFreeBSD-src-0c0be4e82677a2d8fb49b7a70676bf359e7360b0.zip
FreeBSD-src-0c0be4e82677a2d8fb49b7a70676bf359e7360b0.tar.gz
Protect the following with a lockmgr lock:
allproc zombproc pidhashtbl proc.p_list proc.p_hash nextpid Reviewed by: jhb Obtained from: BSD/OS and netbsd
Diffstat (limited to 'sys/alpha')
-rw-r--r--sys/alpha/alpha/pmap.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/sys/alpha/alpha/pmap.c b/sys/alpha/alpha/pmap.c
index 8164ca6..09cf8ec 100644
--- a/sys/alpha/alpha/pmap.c
+++ b/sys/alpha/alpha/pmap.c
@@ -723,12 +723,16 @@ pmap_get_asn(pmap_t pmap)
printf("pmap_get_asn: generation rollover\n");
#endif
PCPU_GET(current_asngen) = 1;
+ lockmgr(&allproc_lock, LK_SHARED, NULL,
+ CURPROC);
LIST_FOREACH(p, &allproc, p_list) {
if (p->p_vmspace) {
tpmap = vmspace_pmap(p->p_vmspace);
tpmap->pm_asn[PCPU_GET(cpuno)].gen = 0;
}
}
+ lockmgr(&allproc_lock, LK_RELEASE, NULL,
+ CURPROC);
}
/*
@@ -1553,12 +1557,14 @@ pmap_growkernel(vm_offset_t addr)
newlev1 = pmap_phys_to_pte(pa)
| PG_V | PG_ASM | PG_KRE | PG_KWE;
+ lockmgr(&allproc_lock, LK_SHARED, NULL, CURPROC);
LIST_FOREACH(p, &allproc, p_list) {
if (p->p_vmspace) {
pmap = vmspace_pmap(p->p_vmspace);
*pmap_lev1pte(pmap, kernel_vm_end) = newlev1;
}
}
+ lockmgr(&allproc_lock, LK_RELEASE, NULL, CURPROC);
*pte = newlev1;
pmap_invalidate_all(kernel_pmap);
}
@@ -3057,6 +3063,7 @@ pmap_pid_dump(int pid)
struct proc *p;
int npte = 0;
int index;
+ lockmgr(&allproc_lock, LK_SHARED, NULL, CURPROC);
LIST_FOREACH(p, &allproc, p_list) {
if (p->p_pid != pid)
continue;
@@ -3079,6 +3086,7 @@ pmap_pid_dump(int pid)
index = 0;
printf("\n");
}
+ lockmgr(&allproc_lock, LK_RELEASE, NULL, CURPROC);
return npte;
}
pte = pmap_pte_quick( pmap, va);
@@ -3103,6 +3111,7 @@ pmap_pid_dump(int pid)
}
}
}
+ lockmgr(&allproc_lock, LK_RELEASE, NULL, CURPROC);
return npte;
}
#endif
OpenPOWER on IntegriCloud