diff options
author | davidxu <davidxu@FreeBSD.org> | 2005-04-23 05:06:44 +0000 |
---|---|---|
committer | davidxu <davidxu@FreeBSD.org> | 2005-04-23 05:06:44 +0000 |
commit | 50a5bbcbfd500ca1552e14fdf176ae0dc473f9e3 (patch) | |
tree | 53e47fe165191bc0998b0bf79e2c05dc1244215c /sys/kern/kern_exit.c | |
parent | 9f7f211673daf2ab848e3c17e035a0fd75560d1b (diff) | |
download | FreeBSD-src-50a5bbcbfd500ca1552e14fdf176ae0dc473f9e3.zip FreeBSD-src-50a5bbcbfd500ca1552e14fdf176ae0dc473f9e3.tar.gz |
Wake up swapper process if needed.
PR: kern/78474
Submitted by: Sam Lawrance <boris at brooknet dot com dot au>
Diffstat (limited to 'sys/kern/kern_exit.c')
-rw-r--r-- | sys/kern/kern_exit.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/sys/kern/kern_exit.c b/sys/kern/kern_exit.c index d7ff969..8fb5d49 100644 --- a/sys/kern/kern_exit.c +++ b/sys/kern/kern_exit.c @@ -503,6 +503,15 @@ retry: critical_enter(); mtx_unlock_spin(&sched_lock); wakeup(p->p_pptr); + /* + * XXX hack, swap in parent process, please see TDP_WAKEPROC0 + * code, because TDP_WAKEPROC0 is only useful if thread is + * leaving critical region, but here we never leave and + * thread_exit() will call cpu_throw(), TDP_WAKEPROC0 is never + * cleared. + */ + if (p->p_pptr->p_sflag & PS_SWAPINREQ) + wakeup(&proc0); PROC_UNLOCK(p->p_pptr); mtx_lock_spin(&sched_lock); critical_exit(); |