diff options
Diffstat (limited to 'sys/kern/kern_sched.c')
-rw-r--r-- | sys/kern/kern_sched.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/sys/kern/kern_sched.c b/sys/kern/kern_sched.c index 15d57cf037c..6066c6a92f4 100644 --- a/sys/kern/kern_sched.c +++ b/sys/kern/kern_sched.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_sched.c,v 1.14 2009/10/05 17:43:08 deraadt Exp $ */ +/* $OpenBSD: kern_sched.c,v 1.15 2009/11/25 11:01:14 kettenis Exp $ */ /* * Copyright (c) 2007, 2008 Artur Grabowski <art@openbsd.org> * @@ -146,6 +146,11 @@ sched_idle(void *v) splassert(IPL_NONE); + if (spc->spc_schedflags & SPCF_SHOULDHALT) { + spc->spc_schedflags |= SPCF_HALTED; + wakeup(spc); + } + cpuset_add(&sched_idle_cpus, ci); cpu_idle_enter(); while (spc->spc_whichqs == 0) @@ -246,6 +251,13 @@ sched_chooseproc(void) SCHED_ASSERT_LOCKED(); + if (spc->spc_schedflags & SPCF_SHOULDHALT) { + p = spc->spc_idleproc; + KASSERT(p); + p->p_stat = SRUN; + return (p); + } + again: if (spc->spc_whichqs) { queue = ffs(spc->spc_whichqs) - 1; |