diff options
author | scottl <scottl@FreeBSD.org> | 2002-10-02 07:44:29 +0000 |
---|---|---|
committer | scottl <scottl@FreeBSD.org> | 2002-10-02 07:44:29 +0000 |
commit | 3a150bca9cc1b9ca767ca73d95fd54081237210b (patch) | |
tree | 0a9cc28f7570a42ae4e5df4cfc55dee42c36d9d8 /sys/kern/kern_proc.c | |
parent | 734ef490b8cfe3acc5f45425a63fac5e7c5173a3 (diff) | |
download | FreeBSD-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.c | 9 |
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. |