FreeBSD kernel kern code
kern_thread.c File Reference
#include "opt_witness.h"
#include "opt_kdtrace.h"
#include "opt_hwpmc_hooks.h"
#include <sys/cdefs.h>
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/lock.h>
#include <sys/mutex.h>
#include <sys/proc.h>
#include <sys/rangelock.h>
#include <sys/resourcevar.h>
#include <sys/sdt.h>
#include <sys/smp.h>
#include <sys/sched.h>
#include <sys/sleepqueue.h>
#include <sys/selinfo.h>
#include <sys/turnstile.h>
#include <sys/ktr.h>
#include <sys/rwlock.h>
#include <sys/umtx.h>
#include <sys/cpuset.h>
#include <security/audit/audit.h>
#include <vm/vm.h>
#include <vm/vm_extern.h>
#include <vm/uma.h>
#include <sys/eventhandler.h>
Include dependency graph for kern_thread.c:

Go to the source code of this file.

Macros

#define TID_BUFFER_SIZE   1024
 
#define RUN_THRESH   16
 

Functions

 __FBSDID ("$BSDSUniX$")
 
 SDT_PROVIDER_DECLARE (proc)
 
 SDT_PROBE_DEFINE (proc,,, lwp__exit)
 
 TAILQ_HEAD (thread)
 
static void tid_free (lwpid_t tid)
 
static int thread_ctor (void *mem, int size, void *arg, int flags)
 
static void thread_dtor (void *mem, int size, void *arg)
 
static int thread_init (void *mem, int size, int flags)
 
static void thread_fini (void *mem, int size)
 
void proc_linkup0 (struct proc *p, struct thread *td)
 
void proc_linkup (struct proc *p, struct thread *td)
 
void threadinit (void)
 
void thread_zombie (struct thread *td)
 
void thread_stash (struct thread *td)
 
void thread_reap (void)
 
struct thread * thread_alloc (int pages)
 
int thread_alloc_stack (struct thread *td, int pages)
 
void thread_free (struct thread *td)
 
void thread_exit (void)
 
void thread_wait (struct proc *p)
 
void thread_link (struct thread *td, struct proc *p)
 
void thread_unthread (struct thread *td)
 
void thread_unlink (struct thread *td)
 
static int calc_remaining (struct proc *p, int mode)
 
int thread_single (int mode)
 
int thread_suspend_check (int return_instead)
 
void thread_suspend_switch (struct thread *td)
 
void thread_suspend_one (struct thread *td)
 
int thread_unsuspend_one (struct thread *td)
 
void thread_unsuspend (struct proc *p)
 
void thread_single_end (void)
 
struct thread * thread_find (struct proc *p, lwpid_t tid)
 
struct thread * tdfind (lwpid_t tid, pid_t pid)
 
void tidhash_add (struct thread *td)
 
void tidhash_remove (struct thread *td)
 

Variables

static uma_zone_t thread_zone
 

Macro Definition Documentation

#define RUN_THRESH   16

Referenced by tdfind().

#define TID_BUFFER_SIZE   1024

Referenced by tid_free().

Function Documentation

__FBSDID ( "$BSDSUniX$"  )
static int calc_remaining ( struct proc *  p,
int  mode 
)
static

Definition at line 585 of file kern_thread.c.

References panic().

Referenced by thread_single().

Here is the call graph for this function:

Here is the caller graph for this function:

void proc_linkup ( struct proc *  p,
struct thread *  td 
)

Definition at line 252 of file kern_thread.c.

References ksiginfo_alloc(), sigqueue_init(), and thread_link().

Referenced by fork1(), and proc_linkup0().

Here is the call graph for this function:

Here is the caller graph for this function:

void proc_linkup0 ( struct proc *  p,
struct thread *  td 
)

Definition at line 245 of file kern_thread.c.

References proc_linkup().

Here is the call graph for this function:

SDT_PROBE_DEFINE ( proc  ,
lwp__exit   
)
SDT_PROVIDER_DECLARE ( proc  )
TAILQ_HEAD ( thread  )

Definition at line 74 of file kern_thread.c.

struct thread* tdfind ( lwpid_t  tid,
pid_t  pid 
)

Definition at line 1006 of file kern_thread.c.

References RUN_THRESH.

Referenced by cpuset_which(), get_cputime(), kern_ptrace(), sigev_findtd(), sys_rtprio_thread(), sys_thr_kill(), sys_thr_kill2(), sys_thr_set_name(), sys_thr_wake(), and umtxq_sleep_pi().

Here is the caller graph for this function:

struct thread* thread_alloc ( int  pages)

Definition at line 342 of file kern_thread.c.

References thread_reap(), and thread_zone.

Referenced by create_thread(), fork1(), and kthread_add().

Here is the call graph for this function:

Here is the caller graph for this function:

int thread_alloc_stack ( struct thread *  td,
int  pages 
)

Definition at line 359 of file kern_thread.c.

Referenced by fork1().

Here is the caller graph for this function:

static int thread_ctor ( void *  mem,
int  size,
void *  arg,
int  flags 
)
static

Definition at line 132 of file kern_thread.c.

References umtx_thread_alloc().

Referenced by init_dtrace(), proc0_init(), and threadinit().

Here is the call graph for this function:

Here is the caller graph for this function:

static void thread_dtor ( void *  mem,
int  size,
void *  arg 
)
static

Definition at line 161 of file kern_thread.c.

References panic(), and tid_free().

Referenced by init_dtrace(), and threadinit().

Here is the call graph for this function:

Here is the caller graph for this function:

void thread_exit ( void  )

Definition at line 397 of file kern_thread.c.

References cpu_ticks, Giant, panic(), rucollect(), ruxagg(), sched_exit_thread(), sched_throw(), thread_unlink(), thread_unsuspend_one(), ticks, umtx_thread_exit(), and witness_thread_exit().

Referenced by exit1(), kthread_exit(), sys_thr_exit(), and thread_suspend_check().

Here is the call graph for this function:

Here is the caller graph for this function:

struct thread* thread_find ( struct proc *  p,
lwpid_t  tid 
)

Definition at line 992 of file kern_thread.c.

static void thread_fini ( void *  mem,
int  size 
)
static

Definition at line 223 of file kern_thread.c.

References rlqentry_free(), seltdfini(), sleepq_free(), turnstile_free(), and umtx_thread_fini().

Referenced by threadinit().

Here is the call graph for this function:

Here is the caller graph for this function:

void thread_free ( struct thread *  td)

Definition at line 374 of file kern_thread.c.

References cpuset_rel(), and thread_zone.

Referenced by create_thread(), proc_fini(), and thread_reap().

Here is the call graph for this function:

Here is the caller graph for this function:

static int thread_init ( void *  mem,
int  size,
int  flags 
)
static

Definition at line 201 of file kern_thread.c.

References sleepq_alloc(), turnstile_alloc(), and umtx_thread_init().

Referenced by proc0_init(), and threadinit().

Here is the call graph for this function:

Here is the caller graph for this function:

void thread_link ( struct thread *  td,
struct proc *  p 
)

Definition at line 535 of file kern_thread.c.

References callout_init(), and sigqueue_init().

Referenced by create_thread(), kthread_add(), and proc_linkup().

Here is the call graph for this function:

Here is the caller graph for this function:

void thread_reap ( void  )

Definition at line 314 of file kern_thread.c.

References crfree(), and thread_free().

Referenced by thread_alloc(), and thread_wait().

Here is the call graph for this function:

Here is the caller graph for this function:

int thread_single ( int  mode)

Definition at line 616 of file kern_thread.c.

References calc_remaining(), Giant, sleepq_abort(), thread_suspend_switch(), thread_unsuspend_one(), and thread_unthread().

Referenced by exit1(), fork_norfproc(), kern_execve(), and sigexit().

Here is the call graph for this function:

Here is the caller graph for this function:

void thread_single_end ( void  )

Definition at line 958 of file kern_thread.c.

References thread_unsuspend_one().

Referenced by fork_norfproc(), and kern_execve().

Here is the call graph for this function:

Here is the caller graph for this function:

void thread_stash ( struct thread *  td)

Definition at line 304 of file kern_thread.c.

References thread_zombie().

Referenced by fork_exit(), and mi_switch().

Here is the call graph for this function:

Here is the caller graph for this function:

int thread_suspend_check ( int  return_instead)

Definition at line 767 of file kern_thread.c.

References Giant, mi_switch(), tdsigcleanup(), thread_exit(), thread_stopped(), thread_suspend_one(), thread_unsuspend_one(), and tidhash_remove().

Referenced by ast(), exit1(), kern_sigsuspend(), and sleepq_catch_signals().

Here is the call graph for this function:

Here is the caller graph for this function:

void thread_suspend_one ( struct thread *  td)

Definition at line 893 of file kern_thread.c.

References sched_sleep().

Referenced by sig_suspend_threads(), and thread_suspend_check().

Here is the call graph for this function:

Here is the caller graph for this function:

void thread_suspend_switch ( struct thread *  td)

Definition at line 864 of file kern_thread.c.

References mi_switch(), sched_sleep(), and thread_stopped().

Referenced by issignal(), ptracestop(), and thread_single().

Here is the call graph for this function:

Here is the caller graph for this function:

void thread_unlink ( struct thread *  td)

Definition at line 573 of file kern_thread.c.

Referenced by thread_exit().

Here is the caller graph for this function:

void thread_unsuspend ( struct proc *  p)

Definition at line 923 of file kern_thread.c.

References thread_unsuspend_one().

Referenced by kern_ptrace(), and tdsendsignal().

Here is the call graph for this function:

Here is the caller graph for this function:

int thread_unsuspend_one ( struct thread *  td)

Definition at line 907 of file kern_thread.c.

References setrunnable().

Referenced by thread_exit(), thread_single(), thread_single_end(), thread_suspend_check(), and thread_unsuspend().

Here is the call graph for this function:

Here is the caller graph for this function:

void thread_unthread ( struct thread *  td)

Definition at line 560 of file kern_thread.c.

Referenced by thread_single().

Here is the caller graph for this function:

void thread_wait ( struct proc *  p)

Definition at line 508 of file kern_thread.c.

References cpuset_rel(), crfree(), Giant, sched_relinquish(), and thread_reap().

Referenced by proc_reap().

Here is the call graph for this function:

Here is the caller graph for this function:

void thread_zombie ( struct thread *  td)

Definition at line 293 of file kern_thread.c.

Referenced by thread_stash().

Here is the caller graph for this function:

void threadinit ( void  )

Definition at line 270 of file kern_thread.c.

References hashinit(), maxproc, mtx_init(), new_unrhdr(), sched_sizeof_thread(), thread_ctor(), thread_dtor(), thread_fini(), thread_init(), and thread_zone.

Referenced by proc0_init().

Here is the call graph for this function:

Here is the caller graph for this function:

static void tid_free ( lwpid_t  tid)
static

Definition at line 112 of file kern_thread.c.

References free_unr(), and TID_BUFFER_SIZE.

Referenced by thread_dtor().

Here is the call graph for this function:

Here is the caller graph for this function:

void tidhash_add ( struct thread *  td)

Definition at line 1043 of file kern_thread.c.

Referenced by create_thread(), do_fork(), and kthread_add().

Here is the caller graph for this function:

void tidhash_remove ( struct thread *  td)

Definition at line 1051 of file kern_thread.c.

Referenced by exit1(), and thread_suspend_check().

Here is the caller graph for this function:

Variable Documentation

uma_zone_t thread_zone
static

Definition at line 72 of file kern_thread.c.

Referenced by thread_alloc(), thread_free(), and threadinit().