diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2003-03-13 22:09:21 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2003-03-13 22:09:21 +0000 |
commit | 0b558c1deaad0d73d956a56c2ead5efd29fe3e8a (patch) | |
tree | a7e1d925ad3f8694a7a2b9dc1a6dc5ca2996fbc8 /sys/arch | |
parent | c98af7b72dd588fac037ff367379a4a335ae436d (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.c | 13 |
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--; |