summaryrefslogtreecommitdiff
path: root/sys/kern/kern_fork.c
diff options
context:
space:
mode:
authorScott Long <scottl@FreeBSD.org>2002-10-02 07:44:29 +0000
committerScott Long <scottl@FreeBSD.org>2002-10-02 07:44:29 +0000
commit316ec49abd15743784b47592c00d6297dabce21b (patch)
tree0a9cc28f7570a42ae4e5df4cfc55dee42c36d9d8 /sys/kern/kern_fork.c
parenta70e34ac714c1609edfcc248799d078d66ee5f79 (diff)
Notes
Diffstat (limited to 'sys/kern/kern_fork.c')
-rw-r--r--sys/kern/kern_fork.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c
index da7ca7dad1a8..9fbf60217457 100644
--- a/sys/kern/kern_fork.c
+++ b/sys/kern/kern_fork.c
@@ -118,7 +118,7 @@ fork(td, uap)
struct proc *p2;
mtx_lock(&Giant);
- error = fork1(td, RFFDG | RFPROC, &p2);
+ error = fork1(td, RFFDG | RFPROC, 0, &p2);
if (error == 0) {
td->td_retval[0] = p2->p_pid;
td->td_retval[1] = 0;
@@ -140,7 +140,7 @@ vfork(td, uap)
struct proc *p2;
mtx_lock(&Giant);
- error = fork1(td, RFFDG | RFPROC | RFPPWAIT | RFMEM, &p2);
+ error = fork1(td, RFFDG | RFPROC | RFPPWAIT | RFMEM, 0, &p2);
if (error == 0) {
td->td_retval[0] = p2->p_pid;
td->td_retval[1] = 0;
@@ -164,7 +164,7 @@ rfork(td, uap)
if ((uap->flags & RFKERNELONLY) != 0)
return (EINVAL);
mtx_lock(&Giant);
- error = fork1(td, uap->flags, &p2);
+ error = fork1(td, uap->flags, 0, &p2);
if (error == 0) {
td->td_retval[0] = p2 ? p2->p_pid : 0;
td->td_retval[1] = 0;
@@ -215,9 +215,10 @@ SYSCTL_PROC(_kern, OID_AUTO, randompid, CTLTYPE_INT|CTLFLAG_RW,
0, 0, sysctl_kern_randompid, "I", "Random PID modulus");
int
-fork1(td, flags, procp)
+fork1(td, flags, pages, procp)
struct thread *td; /* parent proc */
int flags;
+ int pages;
struct proc **procp; /* child proc */
{
struct proc *p2, *pptr;
@@ -471,6 +472,10 @@ again:
kg2 = FIRST_KSEGRP_IN_PROC(p2);
ke2 = FIRST_KSE_IN_KSEGRP(kg2);
+ /* Allocate and switch to an alternate kstack if specified */
+ if (pages != 0)
+ pmap_new_altkstack(td2, pages);
+
#define RANGEOF(type, start, end) (offsetof(type, end) - offsetof(type, start))
bzero(&p2->p_startzero,