man.bsd.lv manual page server

Manual Page Search Parameters

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

cpu_lwp_fork, child_return, lwp_trampolinefinish a fork operation

#include <sys/proc.h>

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

void
child_return(void *arg);

() is the machine-dependent portion of () 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.

() rigs the child's kernel stack so that it will start in (). 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 () and while running in user context (within the kernel) () 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 () 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)

April 26, 2018 NetBSD-9.2