2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
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.
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
20 * @APPLE_LICENSE_HEADER_END@
23 * @OSF_FREE_COPYRIGHT@
28 * Revision 1.1.1.1 1998/09/22 21:05:32 wsanchez
29 * Import of Mac OS X kernel (~semeria)
31 * Revision 1.1.1.1 1998/03/07 02:25:57 wsanchez
32 * Import of OSF Mach kernel (~mburg)
34 * Revision 1.1.7.4 1995/01/18 18:35:03 ezf
35 * updated Utah CR notice
36 * [1995/01/18 18:30:36 ezf]
38 * Revision 1.1.7.3 1995/01/10 05:15:24 devrcs
39 * mk6 CR801 - merge up from nmk18b4 to nmk18b7
40 * * Rev 1.1.8.2 1994/11/08 15:33:03 watkins
41 * Add declaration for thread_pool_put_act.
42 * [1994/12/09 21:10:56 dwm]
44 * Revision 1.1.7.1 1994/09/23 02:31:15 ezf
45 * change marker to not FREE
46 * [1994/09/22 21:38:04 ezf]
48 * Revision 1.1.2.9 1994/06/09 14:14:07 dswartz
50 * [1994/06/09 14:08:37 dswartz]
52 * Revision 1.1.2.8 1994/06/01 19:30:14 bolinger
53 * mk6 CR125: Update to reflect changes in access to thread_pool
55 * [1994/06/01 19:18:25 bolinger]
57 * Revision 1.1.2.7 1994/03/17 22:38:37 dwm
58 * The infamous name change: thread_activation + thread_shuttle = thread.
59 * [1994/03/17 21:28:18 dwm]
61 * Revision 1.1.2.6 1994/02/09 00:42:42 dwm
62 * Put a variety of debugging code under MACH_ASSERT,
63 * to enhance PROD performance a bit.
64 * [1994/02/09 00:35:13 dwm]
66 * Revision 1.1.2.5 1994/01/21 23:45:08 dwm
67 * Thread_pools now embedded directly in port/pset,
68 * delete refcount, modify protos.
69 * [1994/01/21 23:43:13 dwm]
71 * Revision 1.1.2.4 1994/01/17 19:09:32 dwm
72 * Fix ref/dealloc macros, missing semicolon.
73 * [1994/01/17 19:09:16 dwm]
75 * Revision 1.1.2.3 1994/01/17 18:08:57 dwm
76 * Add finer grained act tracing.
77 * [1994/01/17 16:06:54 dwm]
79 * Revision 1.1.2.2 1994/01/14 18:42:05 bolinger
80 * Update to reflect thread_pool_block() -> thread_pool_get_act() name
82 * [1994/01/14 18:18:40 bolinger]
84 * Revision 1.1.2.1 1994/01/12 17:53:21 dwm
85 * Coloc: initial restructuring to follow Utah model.
86 * [1994/01/12 17:15:24 dwm]
91 * Copyright (c) 1993 The University of Utah and
92 * the Computer Systems Laboratory (CSL). All rights reserved.
94 * Permission to use, copy, modify and distribute this software and its
95 * documentation is hereby granted, provided that both the copyright
96 * notice and this permission notice appear in all copies of the
97 * software, derivative works or modified versions, and any portions
98 * thereof, and that both notices appear in supporting documentation.
100 * THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS
101 * IS" CONDITION. THE UNIVERSITY OF UTAH AND CSL DISCLAIM ANY LIABILITY OF
102 * ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
104 * CSL requests users of this software to return to csl-dist@cs.utah.edu any
105 * improvements that they make and grant CSL redistribution rights.
107 * Author: Bryan Ford, University of Utah CSL
109 * File: thread_pool.h
111 * Defines the thread_pool: a pool of available activations.
115 #ifndef _KERN_THREAD_POOL_H_
116 #define _KERN_THREAD_POOL_H_
118 #include <mach/kern_return.h>
119 #include <kern/lock.h>
120 #include <mach_assert.h>
122 typedef struct thread_pool
{
124 /* List of available activations, all active but not in use. */
125 struct thread_activation
*thr_acts
;
127 /* true if somebody is waiting for an activation from this pool */
130 } thread_pool
, *thread_pool_t
;
131 #define THREAD_POOL_NULL ((thread_pool_t)0)
133 /* Exported to kern/startup.c only */
134 kern_return_t
thread_pool_init(thread_pool_t new_thread_pool
);
136 /* Get an activation from a thread_pool, blocking if need be */
137 extern struct thread_activation
*thread_pool_get_act( ipc_port_t
);
138 extern void thread_pool_put_act( thread_act_t
);
140 /* Wake up a waiter upon return to thread_pool */
141 extern void thread_pool_wakeup( thread_pool_t
);
145 * Debugging support - "watchacts", a patchable selective trigger
147 extern unsigned int watchacts
; /* debug printf trigger */
148 #define WA_SCHED 0x001 /* kern/sched_prim.c */
149 #define WA_THR 0x002 /* kern/thread.c */
150 #define WA_ACT_LNK 0x004 /* kern/thread_act.c act mgmt */
151 #define WA_ACT_HDLR 0x008 /* kern/thread_act.c act hldrs */
152 #define WA_TASK 0x010 /* kern/task.c */
153 #define WA_BOOT 0x020 /* bootstrap,startup.c */
154 #define WA_PCB 0x040 /* machine/pcb.c */
155 #define WA_PORT 0x080 /* ports + port sets */
156 #define WA_EXIT 0x100 /* exit path */
157 #define WA_SWITCH 0x200 /* context switch (!!) */
158 #define WA_STATE 0x400 /* get/set state (!!) */
160 #endif /* MACH_ASSERT */
162 #endif /* _KERN_THREAD_POOL_H_ */