Manual Page Result
0
Command: lwp_trampoline | Section: 9 | Source: NetBSD | File: lwp_trampoline.9
CPU_LWP_FORK(9) FreeBSD Kernel Developer's Manual CPU_LWP_FORK(9)
NAME
cpu_lwp_fork, child_return, lwp_trampoline - finish a fork operation
SYNOPSIS
#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);
DESCRIPTION
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.
SEE ALSO
fork(2), cpu_switchto(9), fork1(9)
FreeBSD 14.1-RELEASE-p8 April 26, 2018 FreeBSD 14.1-RELEASE-p8