Source to bsd/kern/parallel.c
/*
* Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
* The contents of this file constitute Original Code as defined in and
* are subject to the Apple Public Source License Version 1.1 (the
* "License"). You may not use this file except in compliance with the
* License. Please obtain a copy of the License at
* http://www.apple.com/publicsource and read it before using this file.
*
* This Original Code and all software distributed under the License are
* distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
* License for the specific language governing rights and limitations
* under the License.
*
* @APPLE_LICENSE_HEADER_END@
*/
/*
* Mach Operating System
* Copyright (c) 1989 Carnegie-Mellon University
* Copyright (c) 1988 Carnegie-Mellon University
* Copyright (c) 1987 Carnegie-Mellon University
* All rights reserved. The CMU software License Agreement specifies
* the terms and conditions for use and redistribution.
*/
/*
* HISTORY
*
* Revision 1.1.1.1 1998/09/22 21:06:13 wsanchez
* Import of Mac OS X kernel (~semeria)
*
* Revision 1.1.1.1 1997/09/30 02:44:39 wsanchez
* Import of kernel from umeshv/kernel
*
* Revision 2.4 89/12/22 15:52:48 rpd
* MACH_HOST support: when releasing master, context switch away
* immediately if thread is not assigned to default processor set.
* [89/11/16 dlb]
*
* Revision 2.3 89/10/11 14:19:20 dlb
* Processor logic - explicitly record bound processor in thread
* instead of changing whichq pointer.
* [88/09/30 dlb]
*
* Revision 2.2 89/02/25 18:07:24 gm0w
* Changes for cleanup.
*
* 15-Oct-87 David Golub (dbg) at Carnegie-Mellon University
* Use thread_bind (inline version) to bind thread to master cpu
* while holding unix-lock.
*
* 9-Oct-87 Robert Baron (rvb) at Carnegie-Mellon University
* Define unix_reset for longjmp/setjmp reset.
*
* 25-Sep-87 Robert Baron (rvb) at Carnegie-Mellon University
* Clean out some debugging code.
*
* 21-Sep-87 Robert Baron (rvb) at Carnegie-Mellon University
* Created.
*
*/
#include <cpus.h>
#include <mach_host.h>
#if NCPUS > 1
#include <kern/processor.h>
#include <kern/thread.h>
#include <kern/sched_prim.h>
#include <kern/parallel.h>
void unix_master()
{
register thread_t t = current_thread();
if (! (++( t->unix_lock ))) {
/* thread_bind(t, master_processor); */
t->bound_processor = master_processor;
if (cpu_number() != master_cpu) {
t->interruptible = FALSE;
thread_block(0);
}
}
}
void unix_release()
{
register thread_t t = current_thread();
t->unix_lock--;
if (t->unix_lock < 0) {
/* thread_bind(t, PROCESSOR_NULL); */
t->bound_processor = PROCESSOR_NULL;
#if MACH_HOST
if (t->processor_set != &default_pset)
thread_block(0);
#endif MACH_HOST
}
}
void unix_reset()
{
register thread_t t = current_thread();
if (t->unix_lock != -1)
t->unix_lock = 0;
}
#endif NCPUS > 1