summaryrefslogtreecommitdiffstats
path: root/sys/i386
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2001-01-18 08:19:25 +0000
committerjhb <jhb@FreeBSD.org>2001-01-18 08:19:25 +0000
commit2c69cab2ed2dd51c2d2b3305920318c3e09c4bcc (patch)
tree78070ea3ed98fed47f504233504870f2df167510 /sys/i386
parent7fd26bda78626003dde4dc9944d1715d23e22a31 (diff)
downloadFreeBSD-src-2c69cab2ed2dd51c2d2b3305920318c3e09c4bcc.zip
FreeBSD-src-2c69cab2ed2dd51c2d2b3305920318c3e09c4bcc.tar.gz
Protect p_stat and p_oncpu with sched_lock in forward_signal().
Diffstat (limited to 'sys/i386')
-rw-r--r--sys/i386/i386/mp_machdep.c11
-rw-r--r--sys/i386/i386/mptable.c11
-rw-r--r--sys/i386/include/mptable.h11
3 files changed, 27 insertions, 6 deletions
diff --git a/sys/i386/i386/mp_machdep.c b/sys/i386/i386/mp_machdep.c
index 945a588..907a2e2 100644
--- a/sys/i386/i386/mp_machdep.c
+++ b/sys/i386/i386/mp_machdep.c
@@ -2777,10 +2777,14 @@ forward_signal(struct proc *p)
return;
if (!forward_signal_enabled)
return;
+ mtx_enter(&sched_lock, MTX_SPIN);
while (1) {
- if (p->p_stat != SRUN)
+ if (p->p_stat != SRUN) {
+ mtx_exit(&sched_lock, MTX_SPIN);
return;
+ }
id = p->p_oncpu;
+ mtx_exit(&sched_lock, MTX_SPIN);
if (id == 0xff)
return;
map = (1<<id);
@@ -2798,8 +2802,11 @@ forward_signal(struct proc *p)
break;
}
}
- if (id == p->p_oncpu)
+ mtx_enter(&sched_lock, MTX_SPIN);
+ if (id == p->p_oncpu) {
+ mtx_exit(&sched_lock, MTX_SPIN);
return;
+ }
}
}
diff --git a/sys/i386/i386/mptable.c b/sys/i386/i386/mptable.c
index 945a588..907a2e2 100644
--- a/sys/i386/i386/mptable.c
+++ b/sys/i386/i386/mptable.c
@@ -2777,10 +2777,14 @@ forward_signal(struct proc *p)
return;
if (!forward_signal_enabled)
return;
+ mtx_enter(&sched_lock, MTX_SPIN);
while (1) {
- if (p->p_stat != SRUN)
+ if (p->p_stat != SRUN) {
+ mtx_exit(&sched_lock, MTX_SPIN);
return;
+ }
id = p->p_oncpu;
+ mtx_exit(&sched_lock, MTX_SPIN);
if (id == 0xff)
return;
map = (1<<id);
@@ -2798,8 +2802,11 @@ forward_signal(struct proc *p)
break;
}
}
- if (id == p->p_oncpu)
+ mtx_enter(&sched_lock, MTX_SPIN);
+ if (id == p->p_oncpu) {
+ mtx_exit(&sched_lock, MTX_SPIN);
return;
+ }
}
}
diff --git a/sys/i386/include/mptable.h b/sys/i386/include/mptable.h
index 945a588..907a2e2 100644
--- a/sys/i386/include/mptable.h
+++ b/sys/i386/include/mptable.h
@@ -2777,10 +2777,14 @@ forward_signal(struct proc *p)
return;
if (!forward_signal_enabled)
return;
+ mtx_enter(&sched_lock, MTX_SPIN);
while (1) {
- if (p->p_stat != SRUN)
+ if (p->p_stat != SRUN) {
+ mtx_exit(&sched_lock, MTX_SPIN);
return;
+ }
id = p->p_oncpu;
+ mtx_exit(&sched_lock, MTX_SPIN);
if (id == 0xff)
return;
map = (1<<id);
@@ -2798,8 +2802,11 @@ forward_signal(struct proc *p)
break;
}
}
- if (id == p->p_oncpu)
+ mtx_enter(&sched_lock, MTX_SPIN);
+ if (id == p->p_oncpu) {
+ mtx_exit(&sched_lock, MTX_SPIN);
return;
+ }
}
}
OpenPOWER on IntegriCloud