freebsd-dev/sys/alpha/osf1
Bosko Milekic 9ed346bab0 Change and clean the mutex lock interface.
mtx_enter(lock, type) becomes:

mtx_lock(lock) for sleep locks (MTX_DEF-initialized locks)
mtx_lock_spin(lock) for spin locks (MTX_SPIN-initialized)

similarily, for releasing a lock, we now have:

mtx_unlock(lock) for MTX_DEF and mtx_unlock_spin(lock) for MTX_SPIN.
We change the caller interface for the two different types of locks
because the semantics are entirely different for each case, and this
makes it explicitly clear and, at the same time, it rids us of the
extra `type' argument.

The enter->lock and exit->unlock change has been made with the idea
that we're "locking data" and not "entering locked code" in mind.

Further, remove all additional "flags" previously passed to the
lock acquire/release routines with the exception of two:

MTX_QUIET and MTX_NOSWITCH

The functionality of these flags is preserved and they can be passed
to the lock/unlock routines by calling the corresponding wrappers:

mtx_{lock, unlock}_flags(lock, flag(s)) and
mtx_{lock, unlock}_spin_flags(lock, flag(s)) for MTX_DEF and MTX_SPIN
locks, respectively.

Re-inline some lock acq/rel code; in the sleep lock case, we only
inline the _obtain_lock()s in order to ensure that the inlined code
fits into a cache line. In the spin lock case, we inline recursion and
actually only perform a function call if we need to spin. This change
has been made with the idea that we generally tend to avoid spin locks
and that also the spin locks that we do have and are heavily used
(i.e. sched_lock) do recurse, and therefore in an effort to reduce
function call overhead for some architectures (such as alpha), we
inline recursion for this case.

Create a new malloc type for the witness code and retire from using
the M_DEV type. The new type is called M_WITNESS and is only declared
if WITNESS is enabled.

Begin cleaning up some machdep/mutex.h code - specifically updated the
"optimized" inlined code in alpha/mutex.h and wrote MTX_LOCK_SPIN
and MTX_UNLOCK_SPIN asm macros for the i386/mutex.h as we presently
need those.

Finally, caught up to the interface changes in all sys code.

Contributors: jake, jhb, jasone (in no particular order)
2001-02-09 06:11:45 +00:00
..
exec_ecoff.h
imgact_osf1.c exec_osf1_imgact() should return -1 for non OSF1/ECOFF binaries, it should 2000-12-02 04:15:17 +00:00
Makefile
osf1_ioctl.c Use queue macros. 2001-01-24 10:26:51 +00:00
osf1_misc.c Change and clean the mutex lock interface. 2001-02-09 06:11:45 +00:00
osf1_mount.c
osf1_proto.h
osf1_signal.c Proc locking. 2001-01-24 10:27:11 +00:00
osf1_signal.h
osf1_syscall.h
osf1_sysent.c
osf1_sysvec.c The osfulator needs sysvipc to work. Thanks to DES's commit to 2001-01-26 17:12:30 +00:00
osf1_util.h
osf1.h
README.mach-traps
syscalls.conf
syscalls.master

$NetBSD: README.mach-traps,v 1.2 1999/03/23 09:19:25 itohy Exp $
$FreeBSD$

Some Alpha AXP OSF/1 binaries directly use the facilities provided by
the Mach kernel that is the basis for OSF/1.  These include (but are
surely not limited to) 'dd', 'ps', and 'w'.

Invariably, the symptom that these binaries display is that they crash
with an "unimplemented system call" trap (SIGSYS signal) for a syscall
that has a negative number.  In general, binaries that use the Mach
syscalls appear to invoke task_self() as their first syscall.

The name, number, and number of arguments for each Mach syscall is
given below; this information was gleaned by looking through the OSF/1
libmach.a's object files with dbx, then double-checked against the
contents of OSF/1's <mach/syscall_sw.h>.

These calls would be very difficult to implement properly in the
OSF/1 emulation code; by its very nature, NetBSD is not Mach, and we
don't and can't provide the underlying facilities that it does.

-- cgd

trap name			number	nargs	notes
---- ----			------	-----	-----
task_self			-10	0
thread_reply			-11	0
task_notify			-12	0
thread_self			-13	0
msg_send_old			-14	3
msg_receive_old			-15	3
msg_rpc_old			-16	5
msg_send_trap			-20	4
msg_receive_trap		-21	5
msg_rpc_trap			-22	6
lw_wire				-30	3
lw_unwire			-31	1
nxm_task_init			-33	2
nxm_sched_thread		-34	1
nxm_idle			-35	1
nxm_wakeup_idle			-36	1
nxm_set_pthid			-37	2
nxm_thread_kill			-38	2
nxm_thread_block		-39	1
nxm_thread_wakeup		-40	1
inode_swap_preference		-40	3	old call?
init_process			-41	0
map_fd				-43	5
nxm_resched			-44	2
htg_unix_syscall		-52	3
host_self			-55	1
host_priv_self			-56	1
swtch_pri			-59	1
swtch				-60	0
thread_switch			-61	3
semop_fast			-62	4
mach_sctimes_0			-70	0	only if MACH_SCTIMES defined
mach_sctimes_1			-71	1	only if MACH_SCTIMES defined
mach_sctimes_2			-72	2	only if MACH_SCTIMES defined
mach_sctimes_3			-73	3	only if MACH_SCTIMES defined
mach_sctimes_4			-74	4	only if MACH_SCTIMES defined
mach_sctimes_5			-75	5	only if MACH_SCTIMES defined
mach_sctimes_6			-76	6	only if MACH_SCTIMES defined
mach_sctimes_7			-77	0	only if MACH_SCTIMES defined
mach_sctimes_8			-78	6	only if MACH_SCTIMES defined
mach_sctimes_9			-79	1	only if MACH_SCTIMES defined
mach_sctimes_10			-80	2	only if MACH_SCTIMES defined
mach_sctimes_11			-81	2	only if MACH_SCTIMES defined
mach_sctimes_port_alloc_dealloc	-82	1	only if MACH_SCTIMES defined