|
|
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: * Mach Operating System
24: * Copyright (c) 1989 Carnegie-Mellon University
25: * Copyright (c) 1988 Carnegie-Mellon University
26: * Copyright (c) 1987 Carnegie-Mellon University
27: * All rights reserved. The CMU software License Agreement specifies
28: * the terms and conditions for use and redistribution.
29: */
30: /*
31: * HISTORY
32: *
33: * Revision 1.1.1.1 1998/09/22 21:06:13 wsanchez
34: * Import of Mac OS X kernel (~semeria)
35: *
36: * Revision 1.1.1.1 1997/09/30 02:44:39 wsanchez
37: * Import of kernel from umeshv/kernel
38: *
39: * Revision 2.4 89/12/22 15:52:48 rpd
40: * MACH_HOST support: when releasing master, context switch away
41: * immediately if thread is not assigned to default processor set.
42: * [89/11/16 dlb]
43: *
44: * Revision 2.3 89/10/11 14:19:20 dlb
45: * Processor logic - explicitly record bound processor in thread
46: * instead of changing whichq pointer.
47: * [88/09/30 dlb]
48: *
49: * Revision 2.2 89/02/25 18:07:24 gm0w
50: * Changes for cleanup.
51: *
52: * 15-Oct-87 David Golub (dbg) at Carnegie-Mellon University
53: * Use thread_bind (inline version) to bind thread to master cpu
54: * while holding unix-lock.
55: *
56: * 9-Oct-87 Robert Baron (rvb) at Carnegie-Mellon University
57: * Define unix_reset for longjmp/setjmp reset.
58: *
59: * 25-Sep-87 Robert Baron (rvb) at Carnegie-Mellon University
60: * Clean out some debugging code.
61: *
62: * 21-Sep-87 Robert Baron (rvb) at Carnegie-Mellon University
63: * Created.
64: *
65: */
66:
67:
68: #include <cpus.h>
69: #include <mach_host.h>
70:
71: #if NCPUS > 1
72:
73: #include <kern/processor.h>
74: #include <kern/thread.h>
75: #include <kern/sched_prim.h>
76: #include <kern/parallel.h>
77:
78: void unix_master()
79: {
80: register thread_t t = current_thread();
81:
82: if (! (++( t->unix_lock ))) {
83:
84: /* thread_bind(t, master_processor); */
85: t->bound_processor = master_processor;
86:
87: if (cpu_number() != master_cpu) {
88: t->interruptible = FALSE;
89: thread_block(0);
90: }
91: }
92: }
93:
94: void unix_release()
95: {
96: register thread_t t = current_thread();
97:
98: t->unix_lock--;
99: if (t->unix_lock < 0) {
100: /* thread_bind(t, PROCESSOR_NULL); */
101: t->bound_processor = PROCESSOR_NULL;
102: #if MACH_HOST
103: if (t->processor_set != &default_pset)
104: thread_block(0);
105: #endif MACH_HOST
106: }
107: }
108:
109: void unix_reset()
110: {
111: register thread_t t = current_thread();
112:
113: if (t->unix_lock != -1)
114: t->unix_lock = 0;
115: }
116:
117: #endif NCPUS > 1
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.