]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/sys/sched.h
Bump __FreeBSD_version to 700009 because:
[FreeBSD/FreeBSD.git] / sys / sys / sched.h
1 /*-
2  * Copyright (c) 2002, Jeffrey Roberson <jeff@freebsd.org>
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice unmodified, this list of conditions, and the following
10  *    disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  *
26  * $FreeBSD$
27  */
28
29 #ifndef _SYS_SCHED_H_
30 #define _SYS_SCHED_H_
31
32 /*
33  * General scheduling info.
34  *
35  * sched_load:
36  *      Total runnable non-ithread threads in the system.
37  *
38  * sched_runnable:
39  *      Runnable threads for this processor.
40  */
41 int     sched_load(void);
42 int     sched_rr_interval(void);
43 int     sched_runnable(void);
44
45 /* 
46  * Proc related scheduling hooks.
47  */
48 void    sched_exit(struct proc *p, struct thread *childtd);
49 void    sched_fork(struct thread *td, struct thread *childtd);
50
51 /*
52  * KSE Groups contain scheduling priority information.  They record the
53  * behavior of groups of KSEs and threads.
54  */
55 void    sched_class(struct ksegrp *kg, int class);
56 void    sched_exit_ksegrp(struct ksegrp *kg, struct thread *childtd);
57 void    sched_fork_ksegrp(struct thread *td, struct ksegrp *child);
58 void    sched_nice(struct proc *p, int nice);
59
60 /*
61  * Threads are switched in and out, block on resources, have temporary
62  * priorities inherited from their ksegs, and use up cpu time.
63  */
64 void    sched_exit_thread(struct thread *td, struct thread *child);
65 void    sched_fork_thread(struct thread *td, struct thread *child);
66 fixpt_t sched_pctcpu(struct thread *td);
67 void    sched_prio(struct thread *td, u_char prio);
68 void    sched_lend_prio(struct thread *td, u_char prio);
69 void    sched_sleep(struct thread *td);
70 void    sched_switch(struct thread *td, struct thread *newtd, int flags);
71 void    sched_unlend_prio(struct thread *td, u_char prio);
72 void    sched_userret(struct thread *td);
73 void    sched_wakeup(struct thread *td);
74
75 /*
76  * Threads are moved on and off of run queues
77  */
78 void    sched_add(struct thread *td, int flags);
79 void    sched_clock(struct thread *td);
80 void    sched_rem(struct thread *td);
81
82 /*
83  * Binding makes cpu affinity permanent while pinning is used to temporarily
84  * hold a thread on a particular CPU.
85  */
86 void    sched_bind(struct thread *td, int cpu);
87 static __inline void sched_pin(void);
88 void    sched_unbind(struct thread *td);
89 static __inline void sched_unpin(void);
90 int     sched_is_bound(struct thread *td);
91
92 /*
93  * These procedures tell the process data structure allocation code how
94  * many bytes to actually allocate.
95  */
96 int     sched_sizeof_ksegrp(void);
97 int     sched_sizeof_proc(void);
98 int     sched_sizeof_thread(void);
99
100 static __inline void
101 sched_pin(void)
102 {
103         curthread->td_pinned++;
104 }
105
106 static __inline void
107 sched_unpin(void)
108 {
109         curthread->td_pinned--;
110 }
111
112 /* temporarily here */
113 void schedinit(void);
114 void sched_init_concurrency(struct ksegrp *kg);
115 void sched_set_concurrency(struct ksegrp *kg, int cuncurrency);
116 void sched_schedinit(void);
117 void sched_newproc(struct proc *p, struct ksegrp *kg, struct thread *td);
118 void sched_thread_exit(struct thread *td);
119 void sched_newthread(struct thread *td);
120
121 #endif /* !_SYS_SCHED_H_ */