freebsd-skq/sys/kern
Robert Watson 41a17fe326 Clean up locking for the MAC Framework:
(1) Accept that we're now going to use mutexes, so don't attempt
    to avoid treating them as mutexes.  This cleans up locking
    accessor function names some.

(2) Rename variables to _mtx, _cv, _count, simplifying the naming.

(3) Add a new form of the _busy() primitive that conditionally
    makes the list busy: if there are entries on the list, bump
    the busy count.  If there are no entries, don't bump the busy
    count.  Return a boolean indicating whether or not the busy
    count was bumped.

(4) Break mac_policy_list into two lists: one with the same name
    holding dynamic policies, and a new list, mac_static_policy_list,
    which holds policies loaded before mac_late and without the
    unload flag set.  The static list may be accessed without
    holding the busy count, since it can't change at run-time.

(5) In general, prefer making the list busy conditionally, meaning
    we pay only one mutex lock per entry point if all modules are
    on the static list, rather than two (since we don't have to
    lower the busy count when we're done with the framework).  For
    systems running just Biba or MLS, this will halve the mutex
    accesses in the network stack, and may offer a substantial
    performance benefits.

(6) Lay the groundwork for a dynamic-free kernel option which
    eliminates all locking associated with dynamically loaded or
    unloaded policies, for pre-configured systems requiring
    maximum performance but less run-time flexibility.

These changes have been running for a few weeks on MAC development
branch systems.

Approved by:	re (jhb)
Obtained from:	TrustedBSD Project
Sponsored by:	DARPA, Network Associates Laboratories
2003-05-07 17:49:24 +00:00
..
bus_if.m Give print_child a default method. 2003-03-25 04:32:52 +00:00
clock_if.m Add a generic implementation of inittodr() and resettodr(), as well as 2002-04-04 23:39:10 +00:00
device_if.m
genassym.sh
imgact_aout.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
imgact_elf32.c Improve the way that an elf image activator for an alternate word size is 2003-01-04 22:07:48 +00:00
imgact_elf64.c Improve the way that an elf image activator for an alternate word size is 2003-01-04 22:07:48 +00:00
imgact_elf.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
imgact_gzip.c Correct typos, mostly s/ a / an / where appropriate. Some whitespace cleanup, 2003-01-01 18:49:04 +00:00
imgact_shell.c Correct typos, mostly s/ a / an / where appropriate. Some whitespace cleanup, 2003-01-01 18:49:04 +00:00
inflate.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
init_main.c Instead of recording the Unix time in a process when it starts, record the 2003-05-01 16:59:23 +00:00
init_sysent.c Regen. 2003-04-09 02:57:29 +00:00
kern_acct.c Instead of recording the Unix time in a process when it starts, record the 2003-05-01 16:59:23 +00:00
kern_acl.c Bow to the whining masses and change a union back into void *. Retain 2003-01-13 00:33:17 +00:00
kern_alq.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
kern_clock.c Deprecate machine/limits.h in favor of new sys/limits.h. 2003-04-29 13:36:06 +00:00
kern_condvar.c Test the P_WEXIT flag while already hold the proc lock instead of right 2003-04-17 22:21:05 +00:00
kern_conf.c Since dynamic allocation of device major numbers so far have not 2003-04-13 15:27:49 +00:00
kern_context.c Add an argument to get_mcontext() which specified whether the 2003-04-25 01:50:30 +00:00
kern_descrip.c Fix some easy, global, lint warnings. In most cases, this means 2003-04-30 12:57:40 +00:00
kern_environment.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
kern_event.c Fix race between a process registering a NOTE_EXIT EVFILT_PROC event and 2003-04-12 01:57:04 +00:00
kern_exec.c - Borrow the KSE single threading code for exec and exit. We use the check 2003-04-01 01:26:20 +00:00
kern_exit.c Initialize and destroy the struct proc mutex in the proc zone's init and 2003-05-01 21:16:38 +00:00
kern_fork.c Initialize and destroy the struct proc mutex in the proc zone's init and 2003-05-01 21:16:38 +00:00
kern_idle.c Move the flag that indicates an idle thread from the KSE to the thread. 2003-05-02 00:33:12 +00:00
kern_intr.c Move the flag that indicates an idle thread from the KSE to the thread. 2003-05-02 00:33:12 +00:00
kern_jail.c style(9) 2003-04-28 18:32:19 +00:00
kern_kse.c Fix compiling problem, p_tracee is in my local repository for 2003-05-01 12:16:06 +00:00
kern_kthread.c Instead of recording the Unix time in a process when it starts, record the 2003-05-01 16:59:23 +00:00
kern_ktr.c Move the flag that indicates an idle thread from the KSE to the thread. 2003-05-02 00:33:12 +00:00
kern_ktrace.c - Push down Giant around vnode operations in ktrace(). 2003-04-25 19:59:35 +00:00
kern_linker.c FreeBSD 5.0 has stopped shipping /modules 2.5 years ago. Catch 2003-03-03 22:53:35 +00:00
kern_lock.c Use the KTR_LOCK mask for logging events via KTR in lockmgr() rather 2003-03-11 20:00:37 +00:00
kern_lockf.c Deprecate machine/limits.h in favor of new sys/limits.h. 2003-04-29 13:36:06 +00:00
kern_mac.c Clean up locking for the MAC Framework: 2003-05-07 17:49:24 +00:00
kern_malloc.c Add two KASSERTS which trigger if free(9) would drag the "memuse" statistic 2003-05-05 08:32:53 +00:00
kern_mib.c Fix some easy, global, lint warnings. In most cases, this means 2003-04-30 12:57:40 +00:00
kern_module.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
kern_mtxpool.c Change callers of mtx_init() to pass in an appropriate lock type name. In 2002-04-04 21:03:38 +00:00
kern_mutex.c Use TD_IS_RUNNING() instead of thread_running() in the adaptive mutex 2003-04-17 22:28:58 +00:00
kern_ntptime.c Explicitly have the timecounter init happen after the cpu_initclocks is 2003-01-06 01:01:08 +00:00
kern_physio.c Don't reinitialize fields that are already initialized by getpbuf(). 2003-04-05 23:02:58 +00:00
kern_poll.c Update netisr handling; Each SWI now registers its queue, and all queue 2003-03-04 23:19:55 +00:00
kern_proc.c Initialize and destroy the struct proc mutex in the proc zone's init and 2003-05-01 21:16:38 +00:00
kern_prot.c Remove Giant from the setuid(), seteuid(), setgid(), setegid(), 2003-05-01 21:21:42 +00:00
kern_resource.c Remove Giant from [gs]etpriority(). 2003-04-23 18:48:55 +00:00
kern_sema.c Change callers of mtx_init() to pass in an appropriate lock type name. In 2002-04-04 21:03:38 +00:00
kern_shutdown.c Lock the sched_lock while setting TDF_INPANIC. 2003-04-17 22:29:23 +00:00
kern_sig.c Mostly sort the includes. 2003-05-05 21:26:25 +00:00
kern_subr.c Tweak the clearing of TDF_DEADLKTREAT so that we only bother grabbing the 2003-05-05 21:27:29 +00:00
kern_switch.c Commit a partial lazy thread switch mechanism for i386. it isn't as lazy 2003-04-02 23:53:30 +00:00
kern_sx.c Set the lock type equal to the lock name for now as all of the current 2002-04-04 20:49:35 +00:00
kern_synch.c Remove TD_ON_RUNQ() from a check to make sure Giant is not held when 2003-05-05 21:12:36 +00:00
kern_syscalls.c
kern_sysctl.c Use a shorter and less redundant name for the sysctl tree lock. 2003-03-11 20:01:51 +00:00
kern_tc.c Including <sys/stdint.h> is (almost?) universally only to be able to use 2003-03-18 08:45:25 +00:00
kern_thr.c AMD64 uses the new-style cpu_switch()/cpu_throw() calling conventions. 2003-04-30 21:45:03 +00:00
kern_thread.c Fix compiling problem, p_tracee is in my local repository for 2003-05-01 12:16:06 +00:00
kern_time.c o fix ppsratecheck to interpret a maxpps of zero as "ignore everything" 2003-02-26 17:16:38 +00:00
kern_timeout.c Under DIAGNOSTIC, only report expensive timeouts if they are more expensive 2003-02-01 10:06:40 +00:00
kern_umtx.c - Make casuptr return the old value of the location we're trying to update, 2003-04-02 08:02:27 +00:00
kern_uuid.c SMP locking for ifnet list. 2002-12-22 05:35:03 +00:00
kern_xxx.c more caddr_t removal. 2002-06-29 02:00:02 +00:00
ksched.c Move a bunch of flags from the KSE to the thread. 2003-02-17 09:55:10 +00:00
link_elf_obj.c Search for "elf32 kernel" (and elf64) and "elf32 module" (and elf64) 2003-04-06 05:20:00 +00:00
link_elf.c Search for "elf32 kernel" (and elf64) and "elf32 module" (and elf64) 2003-04-06 05:20:00 +00:00
linker_if.m
Make.tags.inc Finish driving a stake through the heart of netns and the associated 2003-03-05 19:24:24 +00:00
Makefile Finish driving a stake through the heart of netns and the associated 2003-03-05 19:24:24 +00:00
makesyscalls.sh - Include umtx.h in files generated by makesyscalls.sh 2003-04-01 01:12:24 +00:00
md4c.c
md5c.c Use le32dec() instead of le32toh() because we are not guaranteed to have 2003-05-05 07:22:35 +00:00
p1003_1b.c Use copyout to access user memory. 2003-01-07 20:10:04 +00:00
posix4_mib.c Rework the sysconf(3) interaction with aio: 2002-11-17 04:15:34 +00:00
sched_4bsd.c Fix some easy, global, lint warnings. In most cases, this means 2003-04-30 12:57:40 +00:00
sched_ule.c Fix typo in last commit 2003-05-02 06:18:55 +00:00
subr_acl_posix1e.c Bow to the whining masses and change a union back into void *. Retain 2003-01-13 00:33:17 +00:00
subr_autoconf.c
subr_blist.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
subr_bus.c Fix some easy, global, lint warnings. In most cases, this means 2003-04-30 12:57:40 +00:00
subr_clist.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
subr_clock.c Split the global timezone structure into two integer fields to 2003-02-03 19:49:35 +00:00
subr_devstat.c Unbreak vinum, iostat and systat on sparc64 by changing the devstat 2003-04-17 15:06:28 +00:00
subr_disk.c Don't include <sys/disklabel.h> 2003-04-16 20:57:35 +00:00
subr_eventhandler.c Rework the eventhandler locking for hopefully the last time. The scheme 2003-03-11 20:17:00 +00:00
subr_hints.c Cosmetic tweaks. Try and keep the style more consistent, catch some stray 2002-05-01 02:51:50 +00:00
subr_kobj.c Convert hit and miss counters to unsigned values. Surely negative values 2002-06-10 22:40:26 +00:00
subr_log.c Gigacommit to improve device-driver source compatibility between 2003-03-03 12:15:54 +00:00
subr_mbuf.c Add the M_FREELIST flag, which is used to detect whenever a 2003-05-02 03:43:40 +00:00
subr_mchain.c The "m = m->m_next" that was removed in the revision 1.12 was necessary 2003-02-19 10:12:42 +00:00
subr_module.c
subr_param.c Change hw.physmem and hw.usermem to unsigned long like they used to be 2002-08-30 04:04:37 +00:00
subr_pcpu.c
subr_power.c Use ISO 9X variadic macro format; arguments are not optional, just 2002-07-15 17:17:56 +00:00
subr_prf.c Don't assume that p_session hasn't changed out from under us after unlocking 2003-04-17 22:30:43 +00:00
subr_prof.c remove old and inaccurate XXX comment. 2003-05-02 01:02:20 +00:00
subr_rman.c Implement rman_get_device 2003-02-12 07:00:59 +00:00
subr_rtc.c Split the global timezone structure into two integer fields to 2003-02-03 19:49:35 +00:00
subr_sbuf.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
subr_scanf.c Deprecate machine/limits.h in favor of new sys/limits.h. 2003-04-29 13:36:06 +00:00
subr_smp.c Move the _oncpu entry from the KSE to the thread. 2003-04-10 17:35:44 +00:00
subr_taskqueue.c Introduce a new taskqueue that runs completely free of Giant, and in 2003-02-26 03:15:42 +00:00
subr_trap.c The signotify() sanity check in userret() doesn't need Giant anymore. 2003-04-23 18:51:55 +00:00
subr_turnstile.c Use TD_IS_RUNNING() instead of thread_running() in the adaptive mutex 2003-04-17 22:28:58 +00:00
subr_witness.c Move the _oncpu entry from the KSE to the thread. 2003-04-10 17:35:44 +00:00
subr_xxx.c - Add vm_paddr_t, a physical address type. This is required for systems 2003-03-25 00:07:06 +00:00
sys_generic.c Deprecate machine/limits.h in favor of new sys/limits.h. 2003-04-29 13:36:06 +00:00
sys_pipe.c Need to hold the same SMP lock for (knote) list traversal as for 2003-04-02 15:24:50 +00:00
sys_process.c Push down Giant around calls to proc_rwmem() in kern_ptrace. kern_ptrace() 2003-04-25 20:02:16 +00:00
sys_socket.c Remove duplicate includes. 2003-02-20 03:26:11 +00:00
syscalls.c Regen. 2003-04-09 02:57:29 +00:00
syscalls.master o In struct prison, add an allprison linked list of prisons (protected 2003-04-09 02:55:18 +00:00
sysv_ipc.c It is possible for an active aio to prevent shared memory from being 2003-01-13 23:04:32 +00:00
sysv_msg.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
sysv_sem.c Replace the at_fork, at_exec, and at_exit functions with the slightly more 2003-03-24 21:15:35 +00:00
sysv_shm.c Change the semantics of sysv shm emulation to take a additional 2003-05-05 09:22:58 +00:00
tty_compat.c
tty_conf.c
tty_cons.c Don't call make_dev() before we are ready for it. 2003-03-09 20:42:49 +00:00
tty_pty.c - Move p->p_sigmask to td->td_sigmask. Signal masks will be per thread with 2003-03-31 22:49:17 +00:00
tty_subr.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
tty_tty.c Gigacommit to improve device-driver source compatibility between 2003-03-03 12:15:54 +00:00
tty.c - Use a local struct proc variable to improve readability. 2003-04-17 22:36:40 +00:00
uipc_accf.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
uipc_cow.c The data in an sf_buf should not be modified by the mbuf system. Mark 2003-04-11 07:02:36 +00:00
uipc_domain.c Fix a spelling error. 2003-03-07 22:47:32 +00:00
uipc_jumbo.c Lock the jumbo_vm_object when performing vm_page_alloc(). 2003-04-19 19:13:25 +00:00
uipc_mbuf2.c Move MAC label storage for mbufs into m_tags from the m_pkthdr structure, 2003-04-14 20:39:06 +00:00
uipc_mbuf.c Add another MBUF_STRESS_TEST feature, m_defragrandomfailures. 2003-04-15 02:14:43 +00:00
uipc_proto.c
uipc_sem.c Replace the at_fork, at_exec, and at_exit functions with the slightly more 2003-03-24 21:15:35 +00:00
uipc_sockbuf.c Fix some easy, global, lint warnings. In most cases, this means 2003-04-30 12:57:40 +00:00
uipc_socket2.c Fix some easy, global, lint warnings. In most cases, this means 2003-04-30 12:57:40 +00:00
uipc_socket.c Deprecate machine/limits.h in favor of new sys/limits.h. 2003-04-29 13:36:06 +00:00
uipc_syscalls.c Split sendit into two parts. The first part, still called sendit, that 2003-05-05 20:33:38 +00:00
uipc_usrreq.c s/discriptors/descriptors/ 2003-03-23 19:41:34 +00:00
vfs_acl.c Bow to the whining masses and change a union back into void *. Retain 2003-01-13 00:33:17 +00:00
vfs_aio.c Deprecate machine/limits.h in favor of new sys/limits.h. 2003-04-29 13:36:06 +00:00
vfs_bio.c Finish the vm_object locking for this file, including holding the vm_object 2003-04-28 05:40:45 +00:00
vfs_cache.c Backout the getcwd changes, a more comprehensive effort will be needed. 2003-03-20 10:40:45 +00:00
vfs_cluster.c - Lock the vm_object when performing vm_object_pip_add(). 2003-04-20 07:29:50 +00:00
vfs_default.c Lock the vm_object when performing vm_pager_deallocate(). 2003-05-06 02:45:28 +00:00
vfs_export.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
vfs_extattr.c Deprecate machine/limits.h in favor of new sys/limits.h. 2003-04-29 13:36:06 +00:00
vfs_init.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
vfs_lookup.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
vfs_mount.c Free mount credentials (mnt_cred) when freeing the mount struct 2003-04-24 08:16:06 +00:00
vfs_subr.c - Revert kern/vfs_subr.c revision 1.444. The vm_object's size isn't 2003-05-03 08:09:24 +00:00
vfs_syscalls.c Deprecate machine/limits.h in favor of new sys/limits.h. 2003-04-29 13:36:06 +00:00
vfs_vnops.c Deprecate machine/limits.h in favor of new sys/limits.h. 2003-04-29 13:36:06 +00:00
vnode_if.src Temporarily introduce a new VOP_SPECSTRATEGY operation while I try 2003-01-04 22:10:36 +00:00