freebsd-nq/sys/kern
Jeff Roberson 7b20fb19fb Commit 1/14 of sched_lock decomposition.
- Move all scheduler locking into the schedulers utilizing a technique
   similar to solaris's container locking.
 - A per-process spinlock is now used to protect the queue of threads,
   thread count, suspension count, p_sflags, and other process
   related scheduling fields.
 - The new thread lock is actually a pointer to a spinlock for the
   container that the thread is currently owned by.  The container may
   be a turnstile, sleepqueue, or run queue.
 - thread_lock() is now used to protect access to thread related scheduling
   fields.  thread_unlock() unlocks the lock and thread_set_lock()
   implements the transition from one lock to another.
 - A new "blocked_lock" is used in cases where it is not safe to hold the
   actual thread's lock yet we must prevent access to the thread.
 - sched_throw() and sched_fork_exit() are introduced to allow the
   schedulers to fix-up locking at these points.
 - Add some minor infrastructure for optionally exporting scheduler
   statistics that were invaluable in solving performance problems with
   this patch.  Generally these statistics allow you to differentiate
   between different causes of context switches.

Tested by:      kris, current@
Tested on:      i386, amd64, ULE, 4BSD, libthr, libkse, PREEMPTION, etc.
Discussed with: kris, attilio, kmacy, jhb, julian, bde (small parts each)
2007-06-04 23:50:30 +00:00
..
bus_if.m o break newbus api: add a new argument of type driver_filter_t to 2007-02-23 12:19:07 +00:00
clock_if.m
cpufreq_if.m
device_if.m
genassym.sh
imgact_aout.c
imgact_elf32.c
imgact_elf64.c
imgact_elf.c Rework the support for ABIs to override resource limits (used by 32-bit 2007-05-14 22:40:04 +00:00
imgact_gzip.c
imgact_shell.c
inflate.c
init_main.c - Move rusage from being per-process in struct pstats to per-thread in 2007-06-01 01:12:45 +00:00
init_sysent.c This commits the remake in kern/ make sysent to get 2006-11-03 18:57:49 +00:00
kern_acct.c - Move rusage from being per-process in struct pstats to per-thread in 2007-06-01 01:12:45 +00:00
kern_alq.c Change the VOP_OPEN(), vn_open() vnode operation and d_fdopen() cdev operation 2007-06-01 14:33:11 +00:00
kern_clock.c - Move rusage from being per-process in struct pstats to per-thread in 2007-06-01 01:12:45 +00:00
kern_condvar.c Fix a potential LOR with sx_sleep() and cv_wait() with sx locks by 2007-05-08 21:49:59 +00:00
kern_conf.c Revert UF_OPENING workaround for CURRENT. 2007-05-31 11:51:53 +00:00
kern_context.c Further system call comment cleanup: 2007-03-05 13:10:58 +00:00
kern_cpu.c Add an interface for drivers to be notified of changes to CPU frequency. 2007-03-26 18:03:29 +00:00
kern_descrip.c Revert UF_OPENING workaround for CURRENT. 2007-05-31 11:51:53 +00:00
kern_environment.c Further system call comment cleanup: 2007-03-05 13:10:58 +00:00
kern_event.c In kern_kevent(), unconditionally fdrop() fp once fget() has succeeded, 2007-05-28 17:15:05 +00:00
kern_exec.c Revert UF_OPENING workaround for CURRENT. 2007-05-31 11:51:53 +00:00
kern_exit.c - Move rusage from being per-process in struct pstats to per-thread in 2007-06-01 01:12:45 +00:00
kern_fork.c - Move rusage from being per-process in struct pstats to per-thread in 2007-06-01 01:12:45 +00:00
kern_idle.c - Remove setrunqueue and replace it with direct calls to sched_add(). 2007-01-23 08:46:51 +00:00
kern_intr.c Rework the PCPU_* (MD) interface: 2007-06-04 21:38:48 +00:00
kern_jail.c Fix jails and jail-friendly file systems handling: 2007-04-13 23:54:22 +00:00
kern_kse.c Rename the 'mtx_object', 'rw_object', and 'sx_object' members of mutexes, 2007-03-21 21:20:51 +00:00
kern_kthread.c - Remove setrunqueue and replace it with direct calls to sched_add(). 2007-01-23 08:46:51 +00:00
kern_ktr.c
kern_ktrace.c Revert UF_OPENING workaround for CURRENT. 2007-05-31 11:51:53 +00:00
kern_linker.c Revert UF_OPENING workaround for CURRENT. 2007-05-31 11:51:53 +00:00
kern_lock.c Move lock_profile_object_{init,destroy}() into lock_{init,destroy}(). 2007-05-18 15:04:59 +00:00
kern_lockf.c
kern_malloc.c Revert VMCNT_* operations introduction. 2007-05-31 22:52:15 +00:00
kern_mbuf.c Despite several examples in the kernel, the third argument of 2007-06-04 18:25:08 +00:00
kern_mib.c Revert VMCNT_* operations introduction. 2007-05-31 22:52:15 +00:00
kern_module.c Remove 'MPSAFE' annotations from the comments above most system calls: all 2007-03-04 22:36:48 +00:00
kern_mtxpool.c Universally adopt most conventional spelling of acquire. 2007-05-27 20:50:23 +00:00
kern_mutex.c Move lock_profile_object_{init,destroy}() into lock_{init,destroy}(). 2007-05-18 15:04:59 +00:00
kern_ntptime.c Further system call comment cleanup: 2007-03-05 13:10:58 +00:00
kern_physio.c
kern_pmc.c
kern_poll.c Despite several examples in the kernel, the third argument of 2007-06-04 18:25:08 +00:00
kern_priv.c Add a new priv(9) kernel interface for checking the availability of 2006-11-06 13:37:19 +00:00
kern_proc.c - Move rusage from being per-process in struct pstats to per-thread in 2007-06-01 01:12:45 +00:00
kern_prot.c Further system call comment cleanup: 2007-03-05 13:10:58 +00:00
kern_resource.c - Move rusage from being per-process in struct pstats to per-thread in 2007-06-01 01:12:45 +00:00
kern_rwlock.c Move lock_profile_object_{init,destroy}() into lock_{init,destroy}(). 2007-05-18 15:04:59 +00:00
kern_sema.c
kern_shutdown.c Remove 'MPSAFE' annotations from the comments above most system calls: all 2007-03-04 22:36:48 +00:00
kern_sig.c - Move rusage from being per-process in struct pstats to per-thread in 2007-06-01 01:12:45 +00:00
kern_subr.c Removes useless (flags | ) KASSERT. The ^ one that actually 2007-01-16 11:40:55 +00:00
kern_switch.c Commit 1/14 of sched_lock decomposition. 2007-06-04 23:50:30 +00:00
kern_sx.c Add functions sx_xlock_sig() and sx_slock_sig(). 2007-05-31 09:14:48 +00:00
kern_synch.c Do proper "locking" for missing vmmeters part. 2007-06-04 21:45:18 +00:00
kern_syscalls.c
kern_sysctl.c Add a function for exporting 64 bit types. 2007-06-04 18:14:28 +00:00
kern_tc.c Despite several examples in the kernel, the third argument of 2007-06-04 18:25:08 +00:00
kern_thr.c - Remove setrunqueue and replace it with direct calls to sched_add(). 2007-01-23 08:46:51 +00:00
kern_thread.c Do proper "locking" for missing vmmeters part. 2007-06-04 21:45:18 +00:00
kern_time.c Remove MAC Framework access control check entry points made redundant with 2007-04-22 15:31:22 +00:00
kern_timeout.c Make the TCP timer callout obtain Giant if the network stack is marked 2007-05-11 20:52:47 +00:00
kern_umtx.c Further system call comment cleanup: 2007-03-05 13:10:58 +00:00
kern_uuid.c Correct typo. 2007-04-23 12:53:00 +00:00
kern_xxx.c Further system call comment cleanup: 2007-03-05 13:10:58 +00:00
ksched.c Threading cleanup.. part 2 of several. 2006-12-06 06:34:57 +00:00
link_elf_obj.c Revert UF_OPENING workaround for CURRENT. 2007-05-31 11:51:53 +00:00
link_elf.c Revert UF_OPENING workaround for CURRENT. 2007-05-31 11:51:53 +00:00
linker_if.m
Make.tags.inc Update entries for building tags. 2007-05-13 18:21:54 +00:00
Makefile
makesyscalls.sh Merge posix4/* into normal kernel hierarchy. 2006-11-11 16:26:58 +00:00
md4c.c
md5c.c
p1003_1b.c Further system call comment cleanup: 2007-03-05 13:10:58 +00:00
posix4_mib.c Fix mispatch of includes list; allows my kernel to build successfully. 2006-11-12 03:34:03 +00:00
sched_4bsd.c Commit 1/14 of sched_lock decomposition. 2007-06-04 23:50:30 +00:00
sched_core.c Commit 1/14 of sched_lock decomposition. 2007-06-04 23:50:30 +00:00
sched_ule.c Commit 1/14 of sched_lock decomposition. 2007-06-04 23:50:30 +00:00
serdev_if.m
subr_acl_posix1e.c Sweep kernel replacing suser(9) calls with priv(9) calls, assigning 2006-11-06 13:42:10 +00:00
subr_autoconf.c
subr_blist.c
subr_bus.c fix comment typo 2007-05-23 17:28:21 +00:00
subr_clist.c
subr_clock.c Use utc_offset() where applicable, and hide the internals of it 2006-10-02 18:23:37 +00:00
subr_devstat.c
subr_disk.c Add a new I/O request - BIO_FLUSH, which basically tells providers below to 2006-10-31 21:11:21 +00:00
subr_eventhandler.c
subr_fattime.c Better naming of fattime conversion functions, they do convert to timespec 2006-10-24 10:27:23 +00:00
subr_firmware.c Cleanup and document the implementation of firmware(9) based on 2007-02-15 17:21:31 +00:00
subr_hints.c
subr_kdb.c
subr_kobj.c
subr_lock.c Revert some debugging KTRs that were added during development. 2007-06-03 18:24:31 +00:00
subr_log.c
subr_mbpool.c Add parens around *free in *free++ in mbp_count() so that mbp_count() 2007-05-27 17:38:36 +00:00
subr_mchain.c
subr_module.c
subr_msgbuf.c
subr_param.c
subr_pcpu.c
subr_power.c
subr_prf.c Instead of doing comparisons using the pcpu area to see if 2007-03-08 06:44:34 +00:00
subr_prof.c - Move clock synchronization into a seperate clock lock so the global 2007-05-20 22:11:50 +00:00
subr_rman.c Complete removal of restriction about overlaps to rman_manage_region: 2007-04-28 07:37:49 +00:00
subr_rtc.c Use utc_offset() where applicable, and hide the internals of it 2006-10-02 18:23:37 +00:00
subr_sbuf.c
subr_scanf.c
subr_sleepqueue.c - Convert turnstiles and sleepqueus to use UMA. This provides a modest 2007-05-18 06:32:24 +00:00
subr_smp.c Instead of doing comparisons using the pcpu area to see if 2007-03-08 06:44:34 +00:00
subr_stack.c
subr_taskqueue.c - Remove setrunqueue and replace it with direct calls to sched_add(). 2007-01-23 08:46:51 +00:00
subr_trap.c Do proper "locking" for missing vmmeters part. 2007-06-04 21:45:18 +00:00
subr_turnstile.c - Convert turnstiles and sleepqueus to use UMA. This provides a modest 2007-05-18 06:32:24 +00:00
subr_unit.c
subr_witness.c Fix some problems introduced with the last descriptors tables locking 2007-05-29 18:55:41 +00:00
sys_generic.c Remove unneeded include files. 2007-05-01 06:35:54 +00:00
sys_pipe.c Remove amountpipes counter for pipes -- this replicates the function of 2007-05-27 17:33:10 +00:00
sys_process.c Remove 'MPSAFE' annotations from the comments above most system calls: all 2007-03-04 22:36:48 +00:00
sys_socket.c Move to ANSI C function headers. Re-wrap some comments. 2007-03-04 17:50:46 +00:00
syscalls.c This commits the remake in kern/ make sysent to get 2006-11-03 18:57:49 +00:00
syscalls.master Ok, here it is, we finally add SCTP to current. Note that this 2006-11-03 15:23:16 +00:00
systrace_args.c Ok, here it is, we finally add SCTP to current. Note that this 2006-11-03 15:23:16 +00:00
sysv_ipc.c Sync up PRIV_IPC_{ADMIN,READ,WRITE} priv checks in ipcperm() with 2007-02-20 00:06:59 +00:00
sysv_msg.c Further system call comment cleanup: 2007-03-05 13:10:58 +00:00
sysv_sem.c Avoid manipulating semu_list outside of the scope of SEMUNDO_LOCK(). This 2007-03-26 17:41:14 +00:00
sysv_shm.c Further system call comment cleanup: 2007-03-05 13:10:58 +00:00
tty_compat.c
tty_conf.c
tty_cons.c Revert UF_OPENING workaround for CURRENT. 2007-05-31 11:51:53 +00:00
tty_pts.c Canonicalize copyrights in some files I hold copyrights on: 2007-01-08 17:49:59 +00:00
tty_pty.c Sweep kernel replacing suser(9) calls with priv(9) calls, assigning 2006-11-06 13:42:10 +00:00
tty_subr.c
tty_tty.c Use ctty instead of just returning. ctty just has a simple open that 2006-09-27 16:41:15 +00:00
tty.c Back out rev. 1.266. The real cause for the recent panics has been fixed 2006-12-20 02:49:59 +00:00
uipc_accf.c
uipc_cow.c
uipc_debug.c sblock() implements a sleep lock by interlocking SB_WANT and SB_LOCK flags 2007-05-03 14:42:42 +00:00
uipc_domain.c Generally migrate to ANSI function headers, and remove 'register' use. 2007-05-16 20:41:08 +00:00
uipc_mbuf2.c Complete break-out of sys/sys/mac.h into sys/security/mac/mac_framework.h 2006-10-22 11:52:19 +00:00
uipc_mbuf.c Generally migrate to ANSI function headers, and remove 'register' use. 2007-05-16 20:41:08 +00:00
uipc_mqueue.c Remove duplicate includes. 2007-05-23 13:36:02 +00:00
uipc_sem.c Further system call comment cleanup: 2007-03-05 13:10:58 +00:00
uipc_sockbuf.c Now that sx(9) locks support an interruptible lock acquire primitive, 2007-05-31 11:51:22 +00:00
uipc_socket.c Despite several examples in the kernel, the third argument of 2007-06-04 18:25:08 +00:00
uipc_syscalls.c In kern_sendfile() adjust byte accounting of the file sending loop to 2007-05-19 20:50:59 +00:00
uipc_usrreq.c Add DDB "show unpcb" command, allowing DDB to print out many pertinent 2007-05-29 12:36:00 +00:00
vfs_acl.c Replay minor system call comment cleanup applied to kern_acl.c in a race 2007-03-05 13:26:07 +00:00
vfs_aio.c - Move rusage from being per-process in struct pstats to per-thread in 2007-06-01 01:12:45 +00:00
vfs_bio.c - Move rusage from being per-process in struct pstats to per-thread in 2007-06-01 01:12:45 +00:00
vfs_cache.c To avoid a deadlock when handling .. directory during a lookup, we unlock 2007-05-25 22:23:38 +00:00
vfs_cluster.c - Move rusage from being per-process in struct pstats to per-thread in 2007-06-01 01:12:45 +00:00
vfs_default.c Since renaming of vop_lock to _vop_lock, pre- and post-condition 2007-05-18 13:02:13 +00:00
vfs_export.c Move vnode-to-file-handle translation from vfs_vptofh to vop_vptofh method. 2007-02-15 22:08:35 +00:00
vfs_extattr.c Update comments to reflect changes in the extattrctl() code. 2006-12-23 00:30:03 +00:00
vfs_hash.c Make insmntque() externally visibile and allow it to fail (e.g. during 2007-03-13 01:50:27 +00:00
vfs_init.c Remove VFS_VPTOFH entirely. API is already broken and it is good time to 2007-02-16 17:32:41 +00:00
vfs_lookup.c Universally adopt most conventional spelling of acquire. 2007-05-27 20:50:23 +00:00
vfs_mount.c Allow the dounmount() to proceed even for doomed coveredvp. 2007-04-26 08:56:56 +00:00
vfs_subr.c Revert VMCNT_* operations introduction. 2007-05-31 22:52:15 +00:00
vfs_syscalls.c Revert UF_OPENING workaround for CURRENT. 2007-05-31 11:51:53 +00:00
vfs_vnops.c Revert UF_OPENING workaround for CURRENT. 2007-05-31 11:51:53 +00:00
vnode_if.src Revert UF_OPENING workaround for CURRENT. 2007-05-31 11:51:53 +00:00