diff options
author | jb <jb@FreeBSD.org> | 2006-10-26 21:42:22 +0000 |
---|---|---|
committer | jb <jb@FreeBSD.org> | 2006-10-26 21:42:22 +0000 |
commit | f82c7997354f95e680341bb8e10136ded5fd15eb (patch) | |
tree | 2136d90e7e60f4ef25fe147499787d0e6a155b82 /sys/kern/kern_fork.c | |
parent | b3e38fbc69f126c6cc49a0a6e45096d6c01b7c43 (diff) | |
download | FreeBSD-src-f82c7997354f95e680341bb8e10136ded5fd15eb.zip FreeBSD-src-f82c7997354f95e680341bb8e10136ded5fd15eb.tar.gz |
Make KSE a kernel option, turned on by default in all GENERIC
kernel configs except sun4v (which doesn't process signals properly
with KSE).
Reviewed by: davidxu@
Diffstat (limited to 'sys/kern/kern_fork.c')
-rw-r--r-- | sys/kern/kern_fork.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c index 2695252..e92720b 100644 --- a/sys/kern/kern_fork.c +++ b/sys/kern/kern_fork.c @@ -204,7 +204,9 @@ fork1(td, flags, pages, procp) struct filedesc *fd; struct filedesc_to_leader *fdtol; struct thread *td2; +#ifdef KSE struct ksegrp *kg2; +#endif struct sigacts *newsigacts; int error; @@ -471,7 +473,9 @@ again: * then copy the section that is copied directly from the parent. */ td2 = FIRST_THREAD_IN_PROC(p2); +#ifdef KSE kg2 = FIRST_KSEGRP_IN_PROC(p2); +#endif /* Allocate and switch to an alternate kstack if specified. */ if (pages != 0) @@ -484,15 +488,19 @@ again: __rangeof(struct proc, p_startzero, p_endzero)); bzero(&td2->td_startzero, __rangeof(struct thread, td_startzero, td_endzero)); +#ifdef KSE bzero(&kg2->kg_startzero, __rangeof(struct ksegrp, kg_startzero, kg_endzero)); +#endif bcopy(&p1->p_startcopy, &p2->p_startcopy, __rangeof(struct proc, p_startcopy, p_endcopy)); bcopy(&td->td_startcopy, &td2->td_startcopy, __rangeof(struct thread, td_startcopy, td_endcopy)); +#ifdef KSE bcopy(&td->td_ksegrp->kg_startcopy, &kg2->kg_startcopy, __rangeof(struct ksegrp, kg_startcopy, kg_endcopy)); +#endif td2->td_sigstk = td->td_sigstk; td2->td_sigmask = td->td_sigmask; @@ -514,7 +522,11 @@ again: mtx_unlock_spin(&sched_lock); p2->p_ucred = crhold(td->td_ucred); +#ifdef KSE td2->td_ucred = crhold(p2->p_ucred); /* XXXKSE */ +#else + td2->td_ucred = crhold(p2->p_ucred); +#endif #ifdef AUDIT audit_proc_fork(p1, p2); #endif |