summaryrefslogtreecommitdiff
path: root/sys/arch
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2003-03-13 22:09:21 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2003-03-13 22:09:21 +0000
commit0b558c1deaad0d73d956a56c2ead5efd29fe3e8a (patch)
treea7e1d925ad3f8694a7a2b9dc1a6dc5ca2996fbc8 /sys/arch
parentc98af7b72dd588fac037ff367379a4a335ae436d (diff)
Always protect pv_unlink4_4c() with splvm(). This suddenly makes sun4/4c
feel much much happier. ok deraadt@
Diffstat (limited to 'sys/arch')
-rw-r--r--sys/arch/sparc/sparc/pmap.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/sys/arch/sparc/sparc/pmap.c b/sys/arch/sparc/sparc/pmap.c
index d65bdc21ded..651f14eb555 100644
--- a/sys/arch/sparc/sparc/pmap.c
+++ b/sys/arch/sparc/sparc/pmap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pmap.c,v 1.132 2002/12/14 21:40:52 miod Exp $ */
+/* $OpenBSD: pmap.c,v 1.133 2003/03/13 22:09:20 miod Exp $ */
/* $NetBSD: pmap.c,v 1.118 1998/05/19 19:00:18 thorpej Exp $ */
/*
@@ -3724,6 +3724,7 @@ pmap_rmk4_4c(pm, va, endva, vr, vs)
int nleft, pmeg;
struct regmap *rp;
struct segmap *sp;
+ int s;
rp = &pm->pm_regmap[vr];
sp = &rp->rg_segmap[vs];
@@ -3772,7 +3773,9 @@ pmap_rmk4_4c(pm, va, endva, vr, vs)
pv = pvhead(tpte & PG_PFNUM);
if (pv) {
pv->pv_flags |= MR4_4C(tpte);
+ s = splvm();
pv_unlink4_4c(pv, pm, va);
+ splx(s);
}
}
nleft--;
@@ -3916,6 +3919,7 @@ pmap_rmu4_4c(pm, va, endva, vr, vs)
int nleft, pmeg;
struct regmap *rp;
struct segmap *sp;
+ int s;
rp = &pm->pm_regmap[vr];
if (rp->rg_nsegmap == 0)
@@ -3949,8 +3953,11 @@ pmap_rmu4_4c(pm, va, endva, vr, vs)
struct pvlist *pv;
pv = pvhead(tpte & PG_PFNUM);
- if (pv)
+ if (pv) {
+ s = splvm();
pv_unlink4_4c(pv, pm, va);
+ splx(s);
+ }
}
nleft--;
*pte = 0;
@@ -4011,7 +4018,9 @@ pmap_rmu4_4c(pm, va, endva, vr, vs)
pv = pvhead(tpte & PG_PFNUM);
if (pv) {
pv->pv_flags |= MR4_4C(tpte);
+ s = splvm();
pv_unlink4_4c(pv, pm, va);
+ splx(s);
}
}
nleft--;