diff options
author | 2003-03-13 22:09:20 +0000 | |
---|---|---|
committer | 2003-03-13 22:09:20 +0000 | |
commit | a8a5d07ee04ad0746fc7cd8b444c232c670ce387 (patch) | |
tree | e737818ad5caf1b7d0ababf7c537b8083dfa6b5d | |
parent | more strlcpy; ok beck, and others pointed out a glitch (diff) | |
download | wireguard-openbsd-a8a5d07ee04ad0746fc7cd8b444c232c670ce387.tar.xz wireguard-openbsd-a8a5d07ee04ad0746fc7cd8b444c232c670ce387.zip |
Always protect pv_unlink4_4c() with splvm(). This suddenly makes sun4/4c
feel much much happier.
ok deraadt@
-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--; |