diff options
Diffstat (limited to 'sys/amd64')
-rw-r--r-- | sys/amd64/amd64/mp_machdep.c | 11 | ||||
-rw-r--r-- | sys/amd64/amd64/mptable.c | 11 | ||||
-rw-r--r-- | sys/amd64/include/mptable.h | 11 |
3 files changed, 27 insertions, 6 deletions
diff --git a/sys/amd64/amd64/mp_machdep.c b/sys/amd64/amd64/mp_machdep.c index 945a588..907a2e2 100644 --- a/sys/amd64/amd64/mp_machdep.c +++ b/sys/amd64/amd64/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/amd64/amd64/mptable.c b/sys/amd64/amd64/mptable.c index 945a588..907a2e2 100644 --- a/sys/amd64/amd64/mptable.c +++ b/sys/amd64/amd64/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/amd64/include/mptable.h b/sys/amd64/include/mptable.h index 945a588..907a2e2 100644 --- a/sys/amd64/include/mptable.h +++ b/sys/amd64/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; + } } } |