sched.h revision 159630
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 159630 2006-06-15 06:37:39Z davidxu $ 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_lend_prio(struct thread *td, u_char prio); 69void sched_sleep(struct thread *td); 70void sched_switch(struct thread *td, struct thread *newtd, int flags); 71void sched_unlend_prio(struct thread *td, u_char prio); 72void sched_userret(struct thread *td); 73void sched_wakeup(struct thread *td); 74 75/* 76 * Threads are moved on and off of run queues 77 */ 78void sched_add(struct thread *td, int flags); 79void sched_clock(struct thread *td); 80void sched_rem(struct thread *td); 81void sched_tick(void); 82void sched_relinquish(struct thread *td); 83 84/* 85 * Binding makes cpu affinity permanent while pinning is used to temporarily 86 * hold a thread on a particular CPU. 87 */ 88void sched_bind(struct thread *td, int cpu); 89static __inline void sched_pin(void); 90void sched_unbind(struct thread *td); 91static __inline void sched_unpin(void); 92int sched_is_bound(struct thread *td); 93 94/* 95 * These procedures tell the process data structure allocation code how 96 * many bytes to actually allocate. 97 */ 98int sched_sizeof_ksegrp(void); 99int sched_sizeof_proc(void); 100int sched_sizeof_thread(void); 101 102static __inline void 103sched_pin(void) 104{ 105 curthread->td_pinned++; 106} 107 108static __inline void 109sched_unpin(void) 110{ 111 curthread->td_pinned--; 112} 113 114/* temporarily here */ 115void schedinit(void); 116void sched_init_concurrency(struct ksegrp *kg); 117void sched_set_concurrency(struct ksegrp *kg, int cuncurrency); 118void sched_schedinit(void); 119void sched_newproc(struct proc *p, struct ksegrp *kg, struct thread *td); 120void sched_thread_exit(struct thread *td); 121void sched_newthread(struct thread *td); 122 123#endif /* !_SYS_SCHED_H_ */ 124