|
|
1.1 root 1: /*
2: * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * The contents of this file constitute Original Code as defined in and
7: * are subject to the Apple Public Source License Version 1.1 (the
8: * "License"). You may not use this file except in compliance with the
9: * License. Please obtain a copy of the License at
10: * http://www.apple.com/publicsource and read it before using this file.
11: *
12: * This Original Code and all software distributed under the License are
13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17: * License for the specific language governing rights and limitations
18: * under the License.
19: *
20: * @APPLE_LICENSE_HEADER_END@
21: */
22: /*
23: * @OSF_COPYRIGHT@
24: *
25: */
26:
27: #ifndef _MK_SP_H_
28: #define _MK_SP_H_
29:
30: /*
31: * Include Files
32: */
33:
34: #include <kern/counters.h>
35:
36: /*
37: * Scheduling policy operation prototypes
38: */
39:
40: sf_return_t _mk_sp_init(
41: sf_object_t policy,
42: int policy_id,
43: int priority_mask_length,
44: sf_priority_mask *priority_mask);
45:
46: sf_return_t _mk_sp_enable_processor_set(
47: sf_object_t policy,
48: processor_set_t processor_set);
49:
50: sf_return_t _mk_sp_disable_processor_set(
51: sf_object_t policy,
52: processor_set_t processor_set);
53:
54: sf_return_t _mk_sp_enable_processor(
55: sf_object_t policy,
56: processor_t processor);
57:
58: sf_return_t _mk_sp_disable_processor(
59: sf_object_t policy,
60: processor_t processor);
61:
62: sf_return_t _mk_sp_thread_update_mpri(
63: sf_object_t policy,
64: sched_thread_t thread);
65:
66: sf_return_t _mk_sp_thread_unblock(
67: sf_object_t policy,
68: sched_thread_t thread);
69:
70: sf_return_t _mk_sp_thread_done(
71: sf_object_t policy,
72: sched_thread_t old_thread);
73:
74: sf_return_t _mk_sp_thread_begin(
75: sf_object_t policy,
76: sched_thread_t new_thread);
77:
78: sf_return_t _mk_sp_thread_dispatch(
79: sf_object_t policy,
80: sched_thread_t old_thread);
81:
82: sf_return_t _mk_sp_thread_attach(
83: sf_object_t policy,
84: sched_thread_t thread);
85:
86: sf_return_t _mk_sp_thread_detach(
87: sf_object_t policy,
88: sched_thread_t thread);
89:
90: sf_return_t _mk_sp_thread_processor(
91: sf_object_t policy,
92: sched_thread_t *thread,
93: processor_t processor);
94:
95: sf_return_t _mk_sp_thread_processor_set(
96: sf_object_t policy,
97: sched_thread_t thread,
98: processor_set_t processor_set);
99:
100: sf_return_t _mk_sp_thread_set(
101: sf_object_t policy,
102: sched_thread_t thread,
103: sp_attributes_t policy_attributes);
104:
105: sf_return_t _mk_sp_thread_get(
106: sf_object_t policy,
107: sched_thread_t thread,
108: sp_attributes_t policy_attributes,
109: sp_attributes_size_t size);
110:
111: int _mk_sp_db_print_sched_stats(
112: sf_object_t policy,
113: sched_thread_t thread);
114:
115: void _mk_sp_swtch_pri(
116: sf_object_t policy,
117: int pri);
118:
119: kern_return_t _mk_sp_thread_switch(
120: sf_object_t policy,
121: thread_act_t hint_act,
122: int option,
123: mach_msg_timeout_t option_time);
124:
125: kern_return_t _mk_sp_thread_depress_abort(
126: sf_object_t policy,
127: sched_thread_t thread);
128:
129: void _mk_sp_thread_depress_timeout(
130: sf_object_t policy,
131: thread_t thread);
132:
133: sf_return_t _mk_sp_task_attach(
134: sf_object_t policy,
135: task_t task);
136:
137: sf_return_t _mk_sp_task_detach(
138: sf_object_t policy,
139: task_t task);
140:
141: kern_return_t _mk_sp_task_policy(
142: sf_object_t policy,
143: task_t task,
144: policy_t policy_id,
145: policy_base_t base,
146: mach_msg_type_number_t count,
147: boolean_t set_limit,
148: boolean_t change,
149: policy_limit_t *limit_ptr,
150: int *lc_ptr);
151:
152: kern_return_t _mk_sp_task_set_policy(
153: sf_object_t policy,
154: task_t task,
155: processor_set_t pset,
156: policy_t policy_id,
157: policy_base_t base,
158: mach_msg_type_number_t base_count,
159: policy_limit_t limit,
160: mach_msg_type_number_t limit_count,
161: boolean_t change);
162:
163: kern_return_t _mk_sp_task_set_sched(
164: sf_object_t policy,
165: task_t task,
166: policy_t policy_id,
167: sched_attr_t sched_attr,
168: mach_msg_type_number_t sched_attrCnt,
169: boolean_t set_limit,
170: boolean_t change);
171:
172: kern_return_t _mk_sp_task_get_sched(
173: sf_object_t policy,
174: task_t task,
175: policy_t policy_id,
176: sched_attr_t sched_attr,
177: mach_msg_type_number_t sched_attrCnt,
178: mach_msg_type_number_t sched_attr_size);
179:
180: boolean_t _mk_sp_thread_runnable(
181: sf_object_t policy,
182: sched_thread_t thread);
183:
184: sf_return_t _mk_sp_alarm_expired(
185: sf_object_t policy,
186: long alarm_seqno,
187: kern_return_t result,
188: int alarm_type,
189: mach_timespec_t wakeup_time,
190: void *alarm_data);
191:
192: /*
193: * Type definitions
194: */
195: typedef int mk_sp_state_t;
196:
197: #define MK_SP_ATTACHED ( 0x0001 )
198: #define MK_SP_RUNNABLE ( 0x0002 )
199: #define MK_SP_BLOCKED ( 0x0004 )
200:
201: /*
202: * MK Scheduling Policy per-thread scheduling information
203: */
204:
205: typedef struct mk_sp_info {
206: mk_sp_state_t th_state; /* thread state */
207: int priority; /* thread's priority *//*** ???base?**/
208: int max_priority; /* maximum priority */
209: int sched_data; /* for use by policy */
210: int policy; /* scheduling policy */
211: int depress_priority; /* depressed from this priority */
212: unsigned int cpu_usage; /* exp. decaying cpu usage [%cpu] */
213: unsigned int sched_usage; /* load-weighted cpu usage [sched] */
214: unsigned int sched_stamp; /* last time priority was updated */
215: int unconsumed_quantum; /* leftover quantum (RR/FIFO) */
216: #ifdef MACH_ASSERT
217: /* counters tracking number of calls to policy routines */
218: unsigned int c_mk_sp_thread_attach;
219: unsigned int c_mk_sp_thread_detach;
220: unsigned int c_mk_sp_thread_begin;
221: unsigned int c_mk_sp_thread_done;
222: unsigned int c_mk_sp_thread_dispatch;
223: unsigned int c_mk_sp_thread_unblock;
224: unsigned int c_mk_sp_thread_set;
225: unsigned int c_mk_sp_thread_get;
226: unsigned int c_mk_sp_thread_runnable;
227: unsigned int c_mk_sp_alarm_expired;
228: #endif /* MACH_ASSERT */
229: } mk_sp_info_struct_t, *mk_sp_info_t;
230:
231: #define MK_SP_INFO_NULL ((mk_sp_info_t) NULL)
232:
233: /*
234: * Definitions of standard scheduling operations for this policy
235: */
236: extern sp_ops_t mk_sp_ops;
237:
238: extern mach_counter_t c_mk_sp_init,
239: c_mk_sp_enable_processor_set,
240: c_mk_sp_disable_processor_set,
241: c_mk_sp_enable_processor,
242: c_mk_sp_disable_processor,
243: c_mk_sp_thread_update_mpri,
244: c_mk_sp_thread_unblock,
245: c_mk_sp_thread_done,
246: c_mk_sp_thread_begin,
247: c_mk_sp_thread_dispatch,
248: c_mk_sp_thread_attach,
249: c_mk_sp_thread_detach,
250: c_mk_sp_thread_processor,
251: c_mk_sp_thread_processor_set,
252: c_mk_sp_thread_set,
253: c_mk_sp_thread_get,
254: c_mk_sp_db_print_sched_stats,
255: c_mk_sp_swtch_pri,
256: c_mk_sp_thread_switch,
257: c_mk_sp_thread_depress_abort,
258: c_mk_sp_thread_depress_timeout,
259: c_mk_sp_task_attach,
260: c_mk_sp_task_detach,
261: c_mk_sp_task_policy,
262: c_mk_sp_task_set_policy,
263: c_mk_sp_task_set_sched,
264: c_mk_sp_task_get_sched,
265: c_mk_sp_thread_runnable,
266: c_mk_sp_alarm_expired;
267:
268: #endif /* _MK_SP_H_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.