sched.h revision 130551
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 130551 2004-06-16 00:26:31Z julian $ 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 proc *child); 49void sched_fork(struct proc *p, struct proc *child); 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 ksegrp *child); 57void sched_fork_ksegrp(struct ksegrp *kg, 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); 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); 77struct kse *sched_choose(void); /* XXX Should be thread * */ 78void sched_clock(struct thread *td); 79void sched_rem(struct thread *td); 80 81/* 82 * Binding makes cpu affinity permanent while pinning is used to temporarily 83 * hold a thread on a particular CPU. 84 */ 85void sched_bind(struct thread *td, int cpu); 86static __inline void sched_pin(void); 87void sched_unbind(struct thread *td); 88static __inline void sched_unpin(void); 89 90/* 91 * These interfaces will eventually be removed. 92 */ 93void sched_exit_kse(struct kse *ke, struct kse *child); 94void sched_fork_kse(struct kse *ke, struct kse *child); 95 96/* 97 * These procedures tell the process data structure allocation code how 98 * many bytes to actually allocate. 99 */ 100int sched_sizeof_kse(void); 101int sched_sizeof_ksegrp(void); 102int sched_sizeof_proc(void); 103int sched_sizeof_thread(void); 104 105extern struct ke_sched *kse0_sched; 106extern struct kg_sched *ksegrp0_sched; 107extern struct p_sched *proc0_sched; 108extern struct td_sched *thread0_sched; 109 110static __inline void 111sched_pin(void) 112{ 113 curthread->td_pinned++; 114} 115 116static __inline void 117sched_unpin(void) 118{ 119 curthread->td_pinned--; 120} 121 122#endif /* !_SYS_SCHED_H_ */ 123