summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormiod <miod@openbsd.org>2003-03-13 22:09:20 +0000
committermiod <miod@openbsd.org>2003-03-13 22:09:20 +0000
commita8a5d07ee04ad0746fc7cd8b444c232c670ce387 (patch)
treee737818ad5caf1b7d0ababf7c537b8083dfa6b5d
parentmore strlcpy; ok beck, and others pointed out a glitch (diff)
downloadwireguard-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.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--;