sched.h revision 135076
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: head/sys/sys/sched.h 135076 2004-09-11 10:07:22Z scottl $ 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 */ 41int sched_load(void); 42int sched_rr_interval(void); 43int sched_runnable(void); 44 45/* 46 * Proc related scheduling hooks. 47 */ 48void sched_exit(struct proc *p, struct thread *childtd); 49void 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 */ 55void sched_class(struct ksegrp *kg, int class); 56void sched_exit_ksegrp(struct ksegrp *kg, struct thread *childtd); 57void sched_fork_ksegrp(struct thread *td, struct ksegrp *child); 58void 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 */ 64void sched_exit_thread(struct thread *td, struct thread *child); 65void sched_fork_thread(struct thread *td, struct thread *child); 66fixpt_t sched_pctcpu(struct thread *td); 67void sched_prio(struct thread *td, u_char prio); 68void sched_sleep(struct thread *td); 69void sched_switch(struct thread *td, struct thread *newtd, int flags); 70void sched_userret(struct thread *td); 71void sched_wakeup(struct thread *td); 72 73/* 74 * Threads are moved on and off of run queues 75 */ 76void sched_add(struct thread *td, int flags); 77void sched_clock(struct thread *td); 78void sched_rem(struct thread *td); 79 80/* 81 * Binding makes cpu affinity permanent while pinning is used to temporarily 82 * hold a thread on a particular CPU. 83 */ 84void sched_bind(struct thread *td, int cpu); 85static __inline void sched_pin(void); 86void sched_unbind(struct thread *td); 87static __inline void sched_unpin(void); 88 89 90/* 91 * These procedures tell the process data structure allocation code how 92 * many bytes to actually allocate. 93 */ 94int sched_sizeof_ksegrp(void); 95int sched_sizeof_proc(void); 96int sched_sizeof_thread(void); 97 98static __inline void 99sched_pin(void) 100{ 101 curthread->td_pinned++; 102} 103 104static __inline void 105sched_unpin(void) 106{ 107 curthread->td_pinned--; 108} 109 110/* temporarily here */ 111void schedinit(void); 112void sched_destroyproc(struct proc *p); 113void sched_init_concurrency(struct ksegrp *kg); 114void sched_set_concurrency(struct ksegrp *kg, int cuncurrency); 115void sched_schedinit(void); 116void sched_newproc(struct proc *p, struct ksegrp *kg, struct thread *td); 117void sched_thread_exit(struct thread *td); 118void sched_newthread(struct thread *td); 119#endif /* !_SYS_SCHED_H_ */ 120