summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_proc.c
diff options
context:
space:
mode:
authorscottl <scottl@FreeBSD.org>2002-10-02 07:44:29 +0000
committerscottl <scottl@FreeBSD.org>2002-10-02 07:44:29 +0000
commit3a150bca9cc1b9ca767ca73d95fd54081237210b (patch)
tree0a9cc28f7570a42ae4e5df4cfc55dee42c36d9d8 /sys/kern/kern_proc.c
parent734ef490b8cfe3acc5f45425a63fac5e7c5173a3 (diff)
downloadFreeBSD-src-3a150bca9cc1b9ca767ca73d95fd54081237210b.zip
FreeBSD-src-3a150bca9cc1b9ca767ca73d95fd54081237210b.tar.gz
Some kernel threads try to do significant work, and the default KSTACK_PAGES
doesn't give them enough stack to do much before blowing away the pcb. This adds MI and MD code to allow the allocation of an alternate kstack who's size can be speficied when calling kthread_create. Passing the value 0 prevents the alternate kstack from being created. Note that the ia64 MD code is missing for now, and PowerPC was only partially written due to the pmap.c being incomplete there. Though this patch does not modify anything to make use of the alternate kstack, acpi and usb are good candidates. Reviewed by: jake, peter, jhb
Diffstat (limited to 'sys/kern/kern_proc.c')
-rw-r--r--sys/kern/kern_proc.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c
index 633c66e..9f20562 100644
--- a/sys/kern/kern_proc.c
+++ b/sys/kern/kern_proc.c
@@ -164,6 +164,15 @@ proc_dtor(void *mem, int size, void *arg)
KASSERT((kg != NULL), ("proc_dtor: bad kg pointer"));
ke = FIRST_KSE_IN_KSEGRP(kg);
KASSERT((ke != NULL), ("proc_dtor: bad ke pointer"));
+
+ /* Dispose of an alternate kstack, if it exists.
+ * XXX What if there are more than one thread in the proc?
+ * The first thread in the proc is special and not
+ * freed, so you gotta do this here.
+ */
+ if (((p->p_flag & P_KTHREAD) != 0) && (td->td_altkstack != 0))
+ pmap_dispose_altkstack(td);
+
/*
* We want to make sure we know the initial linkages.
* so for now tear them down and remake them.
OpenPOWER on IntegriCloud