summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authordavidxu <davidxu@FreeBSD.org>2005-04-23 05:06:44 +0000
committerdavidxu <davidxu@FreeBSD.org>2005-04-23 05:06:44 +0000
commit50a5bbcbfd500ca1552e14fdf176ae0dc473f9e3 (patch)
tree53e47fe165191bc0998b0bf79e2c05dc1244215c /sys
parent9f7f211673daf2ab848e3c17e035a0fd75560d1b (diff)
downloadFreeBSD-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')
-rw-r--r--sys/kern/kern_exit.c9
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();
OpenPOWER on IntegriCloud