The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


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

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

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: sched.h,v 1.65 2008/10/07 09:48:27 rmind Exp $ */
    2 
    3 /*-
    4  * Copyright (c) 1999, 2000, 2001, 2002, 2007, 2008 The NetBSD Foundation, Inc.
    5  * All rights reserved.
    6  *
    7  * This code is derived from software contributed to The NetBSD Foundation
    8  * by Ross Harvey, Jason R. Thorpe, Nathan J. Williams, Andrew Doran and
    9  * Daniel Sieger.
   10  *
   11  * Redistribution and use in source and binary forms, with or without
   12  * modification, are permitted provided that the following conditions
   13  * are met:
   14  * 1. Redistributions of source code must retain the above copyright
   15  *    notice, this list of conditions and the following disclaimer.
   16  * 2. Redistributions in binary form must reproduce the above copyright
   17  *    notice, this list of conditions and the following disclaimer in the
   18  *    documentation and/or other materials provided with the distribution.
   19  *
   20  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
   21  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   22  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   23  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
   24  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   25  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   26  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   27  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   28  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   29  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   30  * POSSIBILITY OF SUCH DAMAGE.
   31  */
   32 
   33 /*-
   34  * Copyright (c) 1982, 1986, 1991, 1993
   35  *      The Regents of the University of California.  All rights reserved.
   36  * (c) UNIX System Laboratories, Inc.
   37  * All or some portions of this file are derived from material licensed
   38  * to the University of California by American Telephone and Telegraph
   39  * Co. or Unix System Laboratories, Inc. and are reproduced herein with
   40  * the permission of UNIX System Laboratories, Inc.
   41  *
   42  * Redistribution and use in source and binary forms, with or without
   43  * modification, are permitted provided that the following conditions
   44  * are met:
   45  * 1. Redistributions of source code must retain the above copyright
   46  *    notice, this list of conditions and the following disclaimer.
   47  * 2. Redistributions in binary form must reproduce the above copyright
   48  *    notice, this list of conditions and the following disclaimer in the
   49  *    documentation and/or other materials provided with the distribution.
   50  * 3. Neither the name of the University nor the names of its contributors
   51  *    may be used to endorse or promote products derived from this software
   52  *    without specific prior written permission.
   53  *
   54  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   55  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   56  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   57  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   58  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   59  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   60  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   61  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   62  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   63  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   64  * SUCH DAMAGE.
   65  *
   66  *      @(#)kern_clock.c        8.5 (Berkeley) 1/21/94
   67  */
   68 
   69 #ifndef _SYS_SCHED_H_
   70 #define _SYS_SCHED_H_
   71 
   72 #include <sys/featuretest.h>
   73 #include <sys/types.h>
   74 
   75 #if defined(_KERNEL_OPT)
   76 #include "opt_multiprocessor.h"
   77 #include "opt_lockdebug.h"
   78 #endif
   79 
   80 struct sched_param {
   81         int     sched_priority;
   82 };
   83 
   84 /*
   85  * Scheduling policies required by IEEE Std 1003.1-2001
   86  */
   87 #define SCHED_NONE      -1
   88 #define SCHED_OTHER     0
   89 #define SCHED_FIFO      1
   90 #define SCHED_RR        2
   91 
   92 #if defined(_NETBSD_SOURCE)
   93 __BEGIN_DECLS
   94 
   95 /*
   96  * Interface of CPU-sets.
   97  */
   98 typedef struct _cpuset cpuset_t;
   99 typedef struct _kcpuset kcpuset_t;      /* XXX: lwp.h included from userland */
  100 
  101 #ifdef _KERNEL
  102 
  103 kcpuset_t *kcpuset_create(void);
  104 void    kcpuset_destroy(kcpuset_t *);
  105 void    kcpuset_copy(kcpuset_t *, const kcpuset_t *);
  106 void    kcpuset_use(kcpuset_t *);
  107 void    kcpuset_unuse(kcpuset_t *, kcpuset_t **);
  108 int     kcpuset_copyin(const cpuset_t *, kcpuset_t *, size_t);
  109 int     kcpuset_copyout(const kcpuset_t *, cpuset_t *, size_t);
  110 void    kcpuset_zero(kcpuset_t *);
  111 int     kcpuset_isset(cpuid_t, const kcpuset_t *);
  112 
  113 #else
  114 
  115 #define cpuset_create()         _cpuset_create()
  116 #define cpuset_destroy(c)       _cpuset_destroy(c)
  117 #define cpuset_size(c)          _cpuset_size(c)
  118 #define cpuset_zero(c)          _cpuset_zero(c)
  119 #define cpuset_isset(i, c)      _cpuset_isset(i, c)
  120 #define cpuset_set(i, c)        _cpuset_set(i, c)
  121 #define cpuset_clr(i, c)        _cpuset_clr(i, c)
  122 
  123 cpuset_t *_cpuset_create(void);
  124 void    _cpuset_destroy(cpuset_t *);
  125 void    _cpuset_zero(cpuset_t *);
  126 int     _cpuset_set(cpuid_t, cpuset_t *);
  127 int     _cpuset_clr(cpuid_t, cpuset_t *);
  128 int     _cpuset_isset(cpuid_t, const cpuset_t *);
  129 size_t  _cpuset_size(const cpuset_t *);
  130 
  131 #endif
  132 
  133 /*
  134  * Internal affinity and scheduling calls.
  135  */
  136 int     _sched_getaffinity(pid_t, lwpid_t, size_t, cpuset_t *);
  137 int     _sched_setaffinity(pid_t, lwpid_t, size_t, const cpuset_t *);
  138 int     _sched_getparam(pid_t, lwpid_t, int *, struct sched_param *);
  139 int     _sched_setparam(pid_t, lwpid_t, int, const struct sched_param *);
  140 __END_DECLS
  141 
  142 /*
  143  * CPU states.
  144  * XXX Not really scheduler state, but no other good place to put
  145  * it right now, and it really is per-CPU.
  146  */
  147 #define CP_USER         0
  148 #define CP_NICE         1
  149 #define CP_SYS          2
  150 #define CP_INTR         3
  151 #define CP_IDLE         4
  152 #define CPUSTATES       5
  153 
  154 #if defined(_KERNEL)
  155 
  156 #include <sys/mutex.h>
  157 #include <sys/time.h>
  158 
  159 /*
  160  * Per-CPU scheduler state.  Field markings and the corresponding locks: 
  161  *
  162  * s:   splsched, may only be safely accessed by the CPU itself
  163  * m:   spc_mutex
  164  * (:   unlocked, stable
  165  * c:   cpu_lock
  166  */
  167 struct schedstate_percpu {
  168         /* First set of data is likely to be accessed by other CPUs. */
  169         kmutex_t        *spc_mutex;     /* (: lock on below, runnable LWPs */
  170         kmutex_t        *spc_lwplock;   /* (: general purpose lock for LWPs */
  171         struct lwp      *spc_migrating; /* (: migrating LWP */
  172         pri_t           spc_curpriority;/* m: usrpri of curlwp */
  173         pri_t           spc_maxpriority;/* m: highest priority queued */
  174         psetid_t        spc_psid;       /* c: processor-set ID */
  175         time_t          spc_lastmod;    /* c: time of last cpu state change */
  176 
  177         /* For the most part, this set of data is CPU-private. */
  178         void            *spc_sched_info;/* (: scheduler-specific structure */
  179         volatile int    spc_flags;      /* s: flags; see below */
  180         u_int           spc_schedticks; /* s: ticks for schedclock() */
  181         uint64_t        spc_cp_time[CPUSTATES];/* s: CPU state statistics */
  182         int             spc_ticks;      /* s: ticks until sched_tick() */
  183         int             spc_pscnt;      /* s: prof/stat counter */
  184         int             spc_psdiv;      /* s: prof/stat divisor */
  185 };
  186 
  187 /* spc_flags */
  188 #define SPCF_SEENRR             0x0001  /* process has seen roundrobin() */
  189 #define SPCF_SHOULDYIELD        0x0002  /* process should yield the CPU */
  190 #define SPCF_OFFLINE            0x0004  /* CPU marked offline */
  191 #define SPCF_RUNNING            0x0008  /* CPU is running */
  192 
  193 #define SPCF_SWITCHCLEAR        (SPCF_SEENRR|SPCF_SHOULDYIELD)
  194 
  195 #endif /* defined(_KERNEL) */
  196 
  197 /*
  198  * Flags passed to the Linux-compatible __clone(2) system call.
  199  */
  200 #define CLONE_CSIGNAL           0x000000ff      /* signal to be sent at exit */
  201 #define CLONE_VM                0x00000100      /* share address space */
  202 #define CLONE_FS                0x00000200      /* share "file system" info */
  203 #define CLONE_FILES             0x00000400      /* share file descriptors */
  204 #define CLONE_SIGHAND           0x00000800      /* share signal actions */
  205 #define CLONE_PID               0x00001000      /* share process ID */
  206 #define CLONE_PTRACE            0x00002000      /* ptrace(2) continues on
  207                                                    child */
  208 #define CLONE_VFORK             0x00004000      /* parent blocks until child
  209                                                    exits */
  210 
  211 #endif /* _NETBSD_SOURCE */
  212 
  213 #ifdef _KERNEL
  214 
  215 extern int schedhz;                     /* ideally: 16 */
  216 
  217 struct proc;
  218 struct cpu_info;
  219 
  220 /*
  221  * Common Scheduler Interface.
  222  */
  223 
  224 /* Scheduler initialization */
  225 void            runq_init(void);
  226 void            sched_init(void);
  227 void            sched_rqinit(void);
  228 void            sched_cpuattach(struct cpu_info *);
  229 
  230 /* Time-driven events */
  231 void            sched_tick(struct cpu_info *);
  232 void            schedclock(struct lwp *);
  233 void            sched_schedclock(struct lwp *);
  234 void            sched_pstats(void *);
  235 void            sched_lwp_stats(struct lwp *);
  236 void            sched_pstats_hook(struct lwp *, int);
  237 
  238 /* Runqueue-related functions */
  239 bool            sched_curcpu_runnable_p(void);
  240 void            sched_dequeue(struct lwp *);
  241 void            sched_enqueue(struct lwp *, bool);
  242 struct lwp *    sched_nextlwp(void);
  243 void            sched_oncpu(struct lwp *);
  244 void            sched_newts(struct lwp *);
  245 
  246 /* Priority adjustment */
  247 void            sched_nice(struct proc *, int);
  248 
  249 /* Handlers of fork and exit */
  250 void            sched_proc_fork(struct proc *, struct proc *);
  251 void            sched_proc_exit(struct proc *, struct proc *);
  252 void            sched_lwp_fork(struct lwp *, struct lwp *);
  253 void            sched_lwp_collect(struct lwp *);
  254 
  255 void            sched_slept(struct lwp *);
  256 void            sched_wakeup(struct lwp *);
  257 
  258 void            setrunnable(struct lwp *);
  259 void            sched_setrunnable(struct lwp *);
  260 
  261 struct cpu_info *sched_takecpu(struct lwp *);
  262 void            sched_print_runqueue(void (*pr)(const char *, ...));
  263 
  264 /* Dispatching */
  265 bool            kpreempt(uintptr_t);
  266 void            preempt(void);
  267 int             mi_switch(struct lwp *);
  268 void            updatertime(lwp_t *, const struct bintime *);
  269 void            sched_idle(void);
  270 
  271 int             do_sched_setparam(pid_t, lwpid_t, int, const struct sched_param *);
  272 int             do_sched_getparam(pid_t, lwpid_t, int *, struct sched_param *);
  273 
  274 #endif  /* _KERNEL */
  275 #endif  /* _SYS_SCHED_H_ */

Cache object: 4e49516ceb4f239bb23df759de1543c4


[ 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.