CPU_LWP_FORK(9)        NetBSD Kernel Developer's Manual        CPU_LWP_FORK(9)

     cpu_lwp_fork, child_return, lwp_trampoline -- finish a fork operation

     #include <sys/proc.h>

     cpu_lwp_fork(struct lwp *l1, struct lwp *l2, void *stack,
         size_t stacksize, void (*func)(void *), void *arg);

     child_return(void *arg);

     cpu_lwp_fork() is the machine-dependent portion of fork1() which finishes
     a fork operation, with child lwp l2 nearly set up.  It copies and updates
     the PCB and trap frame from the parent l1, making the child ready to run.

     cpu_lwp_fork() rigs the child's kernel stack so that it will start in
     lwp_trampoline().  lwp_trampoline() does not have a normal calling
     sequence and is entered by cpu_switchto().  If an alternate user-level
     stack is requested (with non-zero values in both the stack and stacksize
     arguments), the user stack pointer is set up accordingly.

     After being entered by cpu_switchto() and while running in user context
     (within the kernel) lwp_trampoline() will invoke the function func with
     the argument arg.  If a kernel thread is being created, the return path
     and argument are specified with func and arg.  If a user process is being
     created, fork1() will pass child_return() and l2 to cpu_lwp_fork() as
     func and arg respectively.  This causes the newly-created child process
     to go directly to user level with an apparent return value of 0 from
     fork(2), while the parent process returns normally.

     fork(2), cpu_switchto(9), fork1(9)

NetBSD 9.0                      April 26, 2018                      NetBSD 9.0

You can also request any man page by name and (optionally) by section:


Use the DEFAULT collection to view manual pages for third-party software.

©1994 Man-cgi 1.15, Panagiotis Christias
©1996-2019 Modified for NetBSD by Kimmo Suominen