[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/sys/proc.h

Version: -  FREEBSD  -  FREEBSD10  -  FREEBSD9  -  FREEBSD92  -  FREEBSD91  -  FREEBSD90  -  FREEBSD8  -  FREEBSD82  -  FREEBSD81  -  FREEBSD80  -  FREEBSD7  -  FREEBSD74  -  FREEBSD73  -  FREEBSD72  -  FREEBSD71  -  FREEBSD70  -  FREEBSD6  -  FREEBSD64  -  FREEBSD63  -  FREEBSD62  -  FREEBSD61  -  FREEBSD60  -  FREEBSD5  -  FREEBSD55  -  FREEBSD54  -  FREEBSD53  -  FREEBSD52  -  FREEBSD51  -  FREEBSD50  -  FREEBSD4  -  FREEBSD3  -  FREEBSD22  -  cheribsd  -  linux-2.6  -  linux-2.4.22  -  MK83  -  MK84  -  PLAN9  -  DFBSD  -  NETBSD  -  NETBSD5  -  NETBSD4  -  NETBSD3  -  NETBSD20  -  OPENBSD  -  xnu-517  -  xnu-792  -  xnu-792.6.70  -  xnu-1228  -  xnu-1456.1.26  -  xnu-1699.24.8  -  xnu-2050.18.24  -  OPENSOLARIS  -  minix-3-1-1  -  FREEBSD-LIBC  -  FREEBSD8-LIBC  -  FREEBSD7-LIBC  -  FREEBSD6-LIBC  -  GLIBC27 
SearchContext: -  none  -  3  -  10 

    1 /*      $OpenBSD: proc.h,v 1.110 2008/11/07 02:22:33 deraadt Exp $      */
    2 /*      $NetBSD: proc.h,v 1.44 1996/04/22 01:23:21 christos Exp $       */
    3 
    4 /*-
    5  * Copyright (c) 1986, 1989, 1991, 1993
    6  *      The Regents of the University of California.  All rights reserved.
    7  * (c) UNIX System Laboratories, Inc.
    8  * All or some portions of this file are derived from material licensed
    9  * to the University of California by American Telephone and Telegraph
   10  * Co. or Unix System Laboratories, Inc. and are reproduced herein with
   11  * the permission of UNIX System Laboratories, Inc.
   12  *
   13  * Redistribution and use in source and binary forms, with or without
   14  * modification, are permitted provided that the following conditions
   15  * are met:
   16  * 1. Redistributions of source code must retain the above copyright
   17  *    notice, this list of conditions and the following disclaimer.
   18  * 2. Redistributions in binary form must reproduce the above copyright
   19  *    notice, this list of conditions and the following disclaimer in the
   20  *    documentation and/or other materials provided with the distribution.
   21  * 3. Neither the name of the University nor the names of its contributors
   22  *    may be used to endorse or promote products derived from this software
   23  *    without specific prior written permission.
   24  *
   25  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   26  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   27  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   28  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   29  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   30  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   31  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   32  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   33  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   34  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   35  * SUCH DAMAGE.
   36  *
   37  *      @(#)proc.h      8.8 (Berkeley) 1/21/94
   38  */
   39 
   40 #ifndef _SYS_PROC_H_
   41 #define _SYS_PROC_H_
   42 
   43 #include <machine/proc.h>               /* Machine-dependent proc substruct. */
   44 #include <sys/selinfo.h>                        /* For struct selinfo. */
   45 #include <sys/queue.h>
   46 #include <sys/timeout.h>                /* For struct timeout. */
   47 #include <sys/event.h>                  /* For struct klist */
   48 #include <sys/mutex.h>                  /* For struct mutex */
   49 #include <machine/atomic.h>
   50 
   51 #define curproc curcpu()->ci_curproc
   52 #ifdef _KERNEL
   53 #define __need_process
   54 #endif
   55 
   56 /*
   57  * One structure allocated per session.
   58  */
   59 struct  session {
   60         int     s_count;                /* Ref cnt; pgrps in session. */
   61         struct  proc *s_leader;         /* Session leader. */
   62         struct  vnode *s_ttyvp;         /* Vnode of controlling terminal. */
   63         struct  tty *s_ttyp;            /* Controlling terminal. */
   64         char    s_login[MAXLOGNAME];    /* Setlogin() name. */
   65 };
   66 
   67 /*
   68  * One structure allocated per process group.
   69  */
   70 struct  pgrp {
   71         LIST_ENTRY(pgrp) pg_hash;       /* Hash chain. */
   72         LIST_HEAD(, proc) pg_members;   /* Pointer to pgrp members. */
   73         struct  session *pg_session;    /* Pointer to session. */
   74         pid_t   pg_id;                  /* Pgrp id. */
   75         int     pg_jobc;        /* # procs qualifying pgrp for job control */
   76 };
   77 
   78 /*
   79  * One structure allocated per emulation.
   80  */
   81 struct exec_package;
   82 struct ps_strings;
   83 struct uvm_object;
   84 union sigval;
   85 
   86 struct  emul {
   87         char    e_name[8];              /* Symbolic name */
   88         int     *e_errno;               /* Errno array */
   89                                         /* Signal sending function */
   90         void    (*e_sendsig)(sig_t, int, int, u_long, int, union sigval);
   91         int     e_nosys;                /* Offset of the nosys() syscall */
   92         int     e_nsysent;              /* Number of system call entries */
   93         struct sysent *e_sysent;        /* System call array */
   94         char    **e_syscallnames;       /* System call name array */
   95         int     e_arglen;               /* Extra argument size in words */
   96                                         /* Copy arguments on the stack */
   97         void    *(*e_copyargs)(struct exec_package *, struct ps_strings *,
   98                                     void *, void *);
   99                                         /* Set registers before execution */
  100         void    (*e_setregs)(struct proc *, struct exec_package *,
  101                                   u_long, register_t *);
  102         int     (*e_fixup)(struct proc *, struct exec_package *);
  103         char    *e_sigcode;             /* Start of sigcode */
  104         char    *e_esigcode;            /* End of sigcode */
  105         int     e_flags;                /* Flags, see below */
  106         struct uvm_object *e_sigobject; /* shared sigcode object */
  107                                         /* Per-process hooks */
  108         void    (*e_proc_exec)(struct proc *, struct exec_package *);
  109         void    (*e_proc_fork)(struct proc *p, struct proc *parent);
  110         void    (*e_proc_exit)(struct proc *);
  111 };
  112 /* Flags for e_flags */
  113 #define EMUL_ENABLED    0x0001          /* Allow exec to continue */
  114 #define EMUL_NATIVE     0x0002          /* Always enabled */
  115 
  116 extern struct emul *emulsw[];           /* All emuls in system */
  117 extern int nemuls;                      /* Number of emuls */
  118 
  119 /*
  120  * Description of a process.
  121  *
  122  * These structures contain the information needed to manage a thread of
  123  * control, known in UN*X as a process; it has references to substructures
  124  * containing descriptions of things that the process uses, but may share
  125  * with related processes.
  126  *
  127  * struct process is the higher level process containing information
  128  * shared by all threads in a process, while struct proc contains the
  129  * run-time information needed by threads.
  130  */
  131 #ifdef __need_process
  132 struct process {
  133         /*
  134          * ps_mainproc is the main thread in the process.
  135          * Ultimately, we shouldn't need that, threads should be able to exit
  136          * at will. Unfortunately until the pid is moved into struct process
  137          * we'll have to remember the main threads and abuse its pid as the
  138          * the pid of the process. This is gross, but considering the horrible
  139          * pid semantics we have right now, it's unavoidable.
  140          */
  141         struct proc *ps_mainproc;
  142         struct  pcred *ps_cred;         /* Process owner's identity. */
  143         struct  plimit *ps_limit;       /* Process limits. */
  144 
  145         TAILQ_HEAD(,proc) ps_threads;   /* Threads in this process. */
  146         int     ps_refcnt;              /* Number of references. */
  147 };
  148 #else
  149 struct process;
  150 #endif
  151 
  152 struct proc {
  153         TAILQ_ENTRY(proc) p_runq;
  154         LIST_ENTRY(proc) p_list;        /* List of all processes. */
  155 
  156         struct  process *p_p;           /* The process of this thread. */
  157         TAILQ_ENTRY(proc) p_thr_link;/* Threads in a process linkage. */
  158 
  159         /* substructures: */
  160         struct  filedesc *p_fd;         /* Ptr to open files structure. */
  161         struct  pstats *p_stats;        /* Accounting/statistics */
  162         struct  vmspace *p_vmspace;     /* Address space. */
  163         struct  sigacts *p_sigacts;     /* Signal actions, state */
  164 #define p_cred          p_p->ps_cred
  165 #define p_ucred         p_cred->pc_ucred
  166 #define p_rlimit        p_p->ps_limit->pl_rlimit
  167 
  168         int     p_exitsig;              /* Signal to send to parent on exit. */
  169         int     p_flag;                 /* P_* flags. */
  170         u_char  p_os;                   /* OS tag */
  171         char    p_stat;                 /* S* process status. */
  172         char    p_pad1[1];
  173         u_char  p_descfd;               /* if not 255, fdesc permits this fd */
  174 
  175         pid_t   p_pid;                  /* Process identifier. */
  176         LIST_ENTRY(proc) p_hash;        /* Hash chain. */
  177         LIST_ENTRY(proc) p_pglist;      /* List of processes in pgrp. */
  178         struct  proc *p_pptr;           /* Pointer to parent process. */
  179         LIST_ENTRY(proc) p_sibling;     /* List of sibling processes. */
  180         LIST_HEAD(, proc) p_children;   /* Pointer to list of children. */
  181 
  182 /* The following fields are all zeroed upon creation in fork. */
  183 #define p_startzero     p_oppid
  184 
  185         pid_t   p_oppid;         /* Save parent pid during ptrace. XXX */
  186         int     p_dupfd;         /* Sideways return value from filedescopen. XXX */
  187 
  188         long    p_thrslpid;     /* for thrsleep syscall */
  189         int     p_sigwait;      /* signal handled by sigwait() */
  190 
  191 
  192         /* scheduling */
  193         u_int   p_estcpu;        /* Time averaged value of p_cpticks. */
  194         int     p_cpticks;       /* Ticks of cpu time. */
  195         fixpt_t p_pctcpu;        /* %cpu for this process during p_swtime */
  196         void    *p_wchan;        /* Sleep address. */
  197         struct  timeout p_sleep_to;/* timeout for tsleep() */
  198         const char *p_wmesg;     /* Reason for sleep. */
  199         u_int   p_swtime;        /* Time swapped in or out. */
  200         u_int   p_slptime;       /* Time since last blocked. */
  201         struct  cpu_info * __volatile p_cpu; /* CPU we're running on. */
  202 
  203         struct  itimerval p_realtimer;  /* Alarm timer. */
  204         struct  timeout p_realit_to;    /* Alarm timeout. */
  205         struct  timeval p_rtime;        /* Real time. */
  206         u_quad_t p_uticks;              /* Statclock hits in user mode. */
  207         u_quad_t p_sticks;              /* Statclock hits in system mode. */
  208         u_quad_t p_iticks;              /* Statclock hits processing intr. */
  209 
  210         int     p_traceflag;            /* Kernel trace points. */
  211         struct  vnode *p_tracep;        /* Trace to vnode. */
  212 
  213         void    *p_systrace;            /* Back pointer to systrace */
  214 
  215         int     p_ptmask;               /* Ptrace event mask */
  216         struct  ptrace_state *p_ptstat; /* Ptrace state */
  217 
  218         int     p_siglist;              /* Signals arrived but not delivered. */
  219 
  220         struct  vnode *p_textvp;        /* Vnode of executable. */
  221 
  222         struct  emul *p_emul;           /* Emulation information */
  223         void    *p_emuldata;            /* Per-process emulation data, or */
  224                                         /* NULL. Malloc type M_EMULDATA */
  225         struct  klist p_klist;          /* knotes attached to this process */
  226                                         /* pad to 256, avoid shifting eproc. */
  227 
  228         sigset_t p_sigdivert;           /* Signals to be diverted to thread. */
  229 
  230 /* End area that is zeroed on creation. */
  231 #define p_endzero       p_startcopy
  232 
  233 /* The following fields are all copied upon creation in fork. */
  234 #define p_startcopy     p_sigmask
  235 
  236         sigset_t p_sigmask;     /* Current signal mask. */
  237         sigset_t p_sigignore;   /* Signals being ignored. */
  238         sigset_t p_sigcatch;    /* Signals being caught by user. */
  239 
  240         u_char  p_priority;     /* Process priority. */
  241         u_char  p_usrpri;       /* User-priority based on p_cpu and p_nice. */
  242         char    p_nice;         /* Process "nice" value. */
  243         char    p_comm[MAXCOMLEN+1];
  244 
  245         struct  pgrp *p_pgrp;   /* Pointer to process group. */
  246         vaddr_t p_sigcode;      /* user pointer to the signal code. */
  247 
  248 /* End area that is copied on creation. */
  249 #define p_endcopy       p_addr
  250 
  251         struct  user *p_addr;   /* Kernel virtual addr of u-area */
  252         struct  mdproc p_md;    /* Any machine-dependent fields. */
  253 
  254         u_short p_xstat;        /* Exit status for wait; also stop signal. */
  255         u_short p_acflag;       /* Accounting flags. */
  256         struct  rusage *p_ru;   /* Exit information. XXX */
  257 };
  258 
  259 #define p_session       p_pgrp->pg_session
  260 #define p_pgid          p_pgrp->pg_id
  261 
  262 /* Status values. */
  263 #define SIDL    1               /* Process being created by fork. */
  264 #define SRUN    2               /* Currently runnable. */
  265 #define SSLEEP  3               /* Sleeping on an address. */
  266 #define SSTOP   4               /* Process debugging or suspension. */
  267 #define SZOMB   5               /* Awaiting collection by parent. */
  268 #define SDEAD   6               /* Process is almost a zombie. */
  269 #define SONPROC 7               /* Process is currently on a CPU. */
  270 
  271 #define P_ZOMBIE(p)     ((p)->p_stat == SZOMB || (p)->p_stat == SDEAD)
  272 
  273 /* These flags are kept in p_flag. */
  274 #define P_CONTROLT      0x000002        /* Has a controlling terminal. */
  275 #define P_INMEM         0x000004        /* Loaded into memory. UNUSED */
  276 #define P_NOCLDSTOP     0x000008        /* No SIGCHLD when children stop. */
  277 #define P_PPWAIT        0x000010        /* Parent waits for child exec/exit. */
  278 #define P_PROFIL        0x000020        /* Has started profiling. */
  279 #define P_SELECT        0x000040        /* Selecting; wakeup/waiting danger. */
  280 #define P_SINTR         0x000080        /* Sleep is interruptible. */
  281 #define P_SUGID         0x000100        /* Had set id privs since last exec. */
  282 #define P_SYSTEM        0x000200        /* No sigs, stats or swapping. */
  283 #define P_TIMEOUT       0x000400        /* Timing out during sleep. */
  284 #define P_TRACED        0x000800        /* Debugged process being traced. */
  285 #define P_WAITED        0x001000        /* Debugging proc has waited for child. */
  286 /* XXX - Should be merged with INEXEC */
  287 #define P_WEXIT         0x002000        /* Working on exiting. */
  288 #define P_EXEC          0x004000        /* Process called exec. */
  289 
  290 /* Should be moved to machine-dependent areas. */
  291 #define P_OWEUPC        0x008000        /* Owe proc an addupc() at next ast. */
  292 
  293 /* XXX Not sure what to do with these, yet. */
  294 #define P_SSTEP         0x020000        /* proc needs single-step fixup ??? */
  295 #define P_SUGIDEXEC     0x040000        /* last execve() was set[ug]id */
  296 
  297 #define P_NOCLDWAIT     0x080000        /* Let pid 1 wait for my children */
  298 #define P_NOZOMBIE      0x100000        /* Pid 1 waits for me instead of dad */
  299 #define P_INEXEC        0x200000        /* Process is doing an exec right now */
  300 #define P_SYSTRACE      0x400000        /* Process system call tracing active*/
  301 #define P_CONTINUED     0x800000        /* Proc has continued from a stopped state. */
  302 #define P_BIGLOCK       0x2000000       /* Process needs kernel "big lock" to run */
  303 #define P_THREAD        0x4000000       /* Only a thread, not a real process */
  304 #define P_IGNEXITRV     0x8000000       /* For thread kills */
  305 #define P_SOFTDEP       0x10000000      /* Stuck processing softdep worklist */
  306 #define P_STOPPED       0x20000000      /* Just stopped. */
  307 
  308 #define P_BITS \
  309     ("\2\01ADVLOCK\02CTTY\04NOCLDSTOP\05PPWAIT\06PROFIL\07SELECT" \
  310      "\010SINTR\011SUGID\012SYSTEM\013TIMEOUT\014TRACED\015WAITED\016WEXIT" \
  311      "\017EXEC\020PWEUPC\022SSTEP\023SUGIDEXEC\024NOCLDWAIT" \
  312      "\025NOZOMBIE\026INEXEC\027SYSTRACE\030CONTINUED\032BIGLOCK" \
  313      "\033THREAD\034IGNEXITRV\035SOFTDEP\036STOPPED")
  314 
  315 /* Macro to compute the exit signal to be delivered. */
  316 #define P_EXITSIG(p) \
  317     (((p)->p_flag & P_TRACED) ? SIGCHLD : (p)->p_exitsig)
  318 
  319 /*
  320  * MOVE TO ucred.h?
  321  *
  322  * Shareable process credentials (always resident).  This includes a reference
  323  * to the current user credentials as well as real and saved ids that may be
  324  * used to change ids.
  325  */
  326 struct  pcred {
  327         struct  ucred *pc_ucred;        /* Current credentials. */
  328         uid_t   p_ruid;                 /* Real user id. */
  329         uid_t   p_svuid;                /* Saved effective user id. */
  330         gid_t   p_rgid;                 /* Real group id. */
  331         gid_t   p_svgid;                /* Saved effective group id. */
  332         int     p_refcnt;               /* Number of references. */
  333 };
  334 
  335 #ifdef _KERNEL
  336 
  337 struct uidinfo {
  338         LIST_ENTRY(uidinfo) ui_hash;
  339         uid_t   ui_uid;
  340         long    ui_proccnt;     /* proc structs */
  341         long    ui_lockcnt;     /* lockf structs */
  342 };
  343 
  344 struct uidinfo *uid_find(uid_t);
  345 
  346 /*
  347  * We use process IDs <= PID_MAX; PID_MAX + 1 must also fit in a pid_t,
  348  * as it is used to represent "no process group".
  349  * We set PID_MAX to (SHRT_MAX - 1) so we don't break sys/compat.
  350  */
  351 #define PID_MAX         32766
  352 #define NO_PID          (PID_MAX+1)
  353 
  354 #define SESS_LEADER(p)  ((p)->p_session->s_leader == (p))
  355 #define SESSHOLD(s)     ((s)->s_count++)
  356 #define SESSRELE(s) do {                                                \
  357         if (--(s)->s_count == 0)                                        \
  358                 pool_put(&session_pool, (s));                           \
  359 } while (/* CONSTCOND */ 0)
  360 
  361 /*
  362  * Flags to fork1().
  363  */
  364 #define FORK_FORK       0x00000001
  365 #define FORK_VFORK      0x00000002
  366 #define FORK_RFORK      0x00000004
  367 #define FORK_PPWAIT     0x00000008
  368 #define FORK_SHAREFILES 0x00000010
  369 #define FORK_CLEANFILES 0x00000020
  370 #define FORK_NOZOMBIE   0x00000040
  371 #define FORK_SHAREVM    0x00000080
  372 #define FORK_SIGHAND    0x00000200
  373 #define FORK_PTRACE     0x00000400
  374 #define FORK_THREAD     0x00000800
  375 
  376 #define EXIT_NORMAL     0x00000001
  377 #define EXIT_THREAD     0x00000002
  378 
  379 #define PIDHASH(pid)    (&pidhashtbl[(pid) & pidhash])
  380 extern LIST_HEAD(pidhashhead, proc) *pidhashtbl;
  381 extern u_long pidhash;
  382 
  383 #define PGRPHASH(pgid)  (&pgrphashtbl[(pgid) & pgrphash])
  384 extern LIST_HEAD(pgrphashhead, pgrp) *pgrphashtbl;
  385 extern u_long pgrphash;
  386 
  387 extern struct proc proc0;               /* Process slot for swapper. */
  388 extern int nprocs, maxproc;             /* Current and max number of procs. */
  389 extern int randompid;                   /* fork() should create random pid's */
  390 
  391 LIST_HEAD(proclist, proc);
  392 extern struct proclist allproc;         /* List of all processes. */
  393 extern struct proclist zombproc;        /* List of zombie processes. */
  394 
  395 extern struct proc *initproc;           /* Process slots for init, pager. */
  396 extern struct proc *syncerproc;         /* filesystem syncer daemon */
  397 
  398 extern struct pool process_pool;        /* memory pool for processes */
  399 extern struct pool proc_pool;           /* memory pool for procs */
  400 extern struct pool rusage_pool;         /* memory pool for zombies */
  401 extern struct pool ucred_pool;          /* memory pool for ucreds */
  402 extern struct pool session_pool;        /* memory pool for sessions */
  403 extern struct pool pgrp_pool;           /* memory pool for pgrps */
  404 extern struct pool pcred_pool;          /* memory pool for pcreds */
  405 
  406 struct simplelock;
  407 
  408 struct proc *pfind(pid_t);      /* Find process by id. */
  409 struct pgrp *pgfind(pid_t);     /* Find process group by id. */
  410 void    proc_printit(struct proc *p, const char *modif,
  411     int (*pr)(const char *, ...));
  412 
  413 int     chgproccnt(uid_t uid, int diff);
  414 int     enterpgrp(struct proc *p, pid_t pgid, struct pgrp *newpgrp,
  415             struct session *newsess);
  416 void    fixjobc(struct proc *p, struct pgrp *pgrp, int entering);
  417 int     inferior(struct proc *p);
  418 int     leavepgrp(struct proc *p);
  419 void    yield(void);
  420 void    preempt(struct proc *);
  421 void    pgdelete(struct pgrp *pgrp);
  422 void    procinit(void);
  423 void    resetpriority(struct proc *);
  424 void    setrunnable(struct proc *);
  425 void    unsleep(struct proc *);
  426 void    wakeup_n(void *chan, int);
  427 void    wakeup(void *chan);
  428 #define wakeup_one(c) wakeup_n((c), 1)
  429 void    reaper(void);
  430 void    exit1(struct proc *, int, int);
  431 void    exit2(struct proc *);
  432 void    cpu_exit(struct proc *);
  433 int     fork1(struct proc *, int, int, void *, size_t, void (*)(void *),
  434             void *, register_t *, struct proc **);
  435 int     groupmember(gid_t, struct ucred *);
  436 #if !defined(cpu_wait)
  437 void    cpu_wait(struct proc *);
  438 #endif
  439 
  440 void    child_return(void *);
  441 
  442 int     proc_cansugid(struct proc *);
  443 void    proc_zap(struct proc *);
  444 
  445 struct sleep_state {
  446         int sls_s;
  447         int sls_catch;
  448         int sls_do_sleep;
  449         int sls_sig;
  450 };
  451 
  452 void    sleep_setup(struct sleep_state *, void *, int, const char *);
  453 void    sleep_setup_timeout(struct sleep_state *, int);
  454 void    sleep_setup_signal(struct sleep_state *, int);
  455 void    sleep_finish(struct sleep_state *, int);
  456 int     sleep_finish_timeout(struct sleep_state *);
  457 int     sleep_finish_signal(struct sleep_state *);
  458 void    sleep_queue_init(void);
  459 
  460 int     tsleep(void *, int, const char *, int);
  461 int     msleep(void *, struct mutex *, int,  const char*, int);
  462 
  463 #if defined(MULTIPROCESSOR)
  464 void    proc_trampoline_mp(void);       /* XXX */
  465 #endif
  466 
  467 int proc_isunder(struct proc *, struct proc *);
  468 
  469 #endif  /* _KERNEL */
  470 #endif  /* !_SYS_PROC_H_ */
  471 

Cache object: a888c5e470995b67cd97904f6d7c3f6f


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.