freebsd-skq/sys/sys
jeff 77ea5a24c7 Adaptive spinning in write path with readers and writer starvation avoidance.
- Move recursion checking into rwlock inlines to free a bit for use with
   adaptive spinners.
 - Clear the RW_LOCK_WRITE_SPINNERS flag whenever the lock state changes
   causing write spinners to restart their loop.
 - Write spinners are limited by a count while readers hold the lock as
   there is no way to know for certain whether readers are running still.
 - In the read path block if there are write waiters or spinners to avoid
   starving writers.  Use a new per-thread count, td_rw_rlocks, to skip
   starvation avoidance if it might cause a deadlock.
 - Remove or change invalid assertions in turnstiles.

Reviewed by:    attilio (developed parts of the patch as well)
Sponsored by:   Nokia
2008-02-06 01:02:13 +00:00
..
_bus_dma.h Break out typedefs from bus_dma.h to _bus_dma.h so that we can get the 2006-09-03 00:26:17 +00:00
_iovec.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
_lock.h - Re-implement lock profiling in such a way that it no longer breaks 2007-12-15 23:13:31 +00:00
_mutex.h Rename the 'mtx_object', 'rw_object', and 'sx_object' members of mutexes, 2007-03-21 21:20:51 +00:00
_null.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
_pthreadtypes.h According to: 2005-05-31 15:18:17 +00:00
_rmlock.h Initial checkin for rmlock (read mostly lock) a multi reader single writer 2007-11-08 14:47:55 +00:00
_rwlock.h Introduce a new rwlocks initialization function: rw_init_flags. 2007-06-26 21:31:56 +00:00
_semaphore.h Const-qualify ksem_timedwait's parameter abstime as it's only passed in. 2005-10-18 11:46:24 +00:00
_sigset.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
_sx.h Optimize sx locks to use simple atomic operations for the common cases of 2007-03-31 23:23:42 +00:00
_task.h o eliminate modification of task structures after their run to avoid 2005-04-24 16:52:45 +00:00
_timespec.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
_timeval.h Remove various bits of conditional Alpha code and fixup a few comments. 2006-05-12 05:04:46 +00:00
_types.h Let kernel POSIX timer code and mqueue code to use integer as a resource 2006-03-01 06:29:34 +00:00
aac_ioctl.h
acct.h Increase precision of time values in the process accounting 2007-05-22 06:51:38 +00:00
acl.h Minor white space tweaks in comments. 2007-03-16 13:39:04 +00:00
agpio.h
aio.h Add aio_fsync() prototype. 2006-03-23 08:47:28 +00:00
alq.h Modify the alq(9) alq_open() API to accept a file creation mode, rather 2005-04-16 12:12:27 +00:00
apm.h Add a partition type for ZFS. 2007-10-21 17:29:06 +00:00
assym.h
ata.h Add the magic word 0 value for CFA compliant devices. 2007-12-16 21:18:13 +00:00
bio.h Add a new I/O request - BIO_FLUSH, which basically tells providers below to 2006-10-31 21:11:21 +00:00
bitstring.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
blist.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
buf.h Cleanup lockmgr interface and exported KPI: 2008-01-24 12:34:30 +00:00
bufobj.h Cylinder group bitmaps and blocks containing inode for a snapshot 2007-01-23 10:01:19 +00:00
bus_dma.h Break out typedefs from bus_dma.h to _bus_dma.h so that we can get the 2006-09-03 00:26:17 +00:00
bus.h Add devctl_process_running() so that power management system driver 2008-01-27 16:06:37 +00:00
callout.h Add the function callout_init_rw() to callout facility in order to use 2007-11-20 00:37:45 +00:00
cdefs.h Eliminate compilation warnings due to the use of non-static inlines 2007-12-09 21:00:36 +00:00
cdio.h Boot away another stackgap (one of the lest ones in linuxlator/i386) by 2005-01-30 08:12:37 +00:00
cdrio.h
chio.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
clist.h
clock.h Better naming of fattime conversion functions, they do convert to timespec 2006-10-24 10:27:23 +00:00
condvar.h Rename the cv_*wait*() functions to _cv_*wait*() and change their second 2007-03-21 22:22:13 +00:00
conf.h Add a wrapper function that bound checks writes to the dump device. 2008-01-28 19:04:07 +00:00
cons.h Add a cnputs() function to write a string to the console with 2006-11-01 04:54:51 +00:00
consio.h Fix our ioctl(2) implementation when the argument is "int". New 2006-09-27 19:57:02 +00:00
copyright.h Update to 2008. 2007-12-26 16:45:35 +00:00
cpu.h Add an interface for drivers to be notified of changes to CPU frequency. 2007-03-26 18:03:29 +00:00
ctype.h
dataacq.h
device_port.h Remove code for pre-4.0 versions of FreeBSD. It is there in prior 2005-01-19 01:31:33 +00:00
devicestat.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
digiio.h Fix our ioctl(2) implementation when the argument is "int". New 2006-09-27 19:57:02 +00:00
dir.h netchild's mega-patch to isolate compiler dependencies into a central 2005-03-02 21:33:29 +00:00
dirent.h o Re-word a comment. 2006-08-16 09:34:56 +00:00
disk.h Implement three new ioctls that can be used with GEOM provider: 2007-05-05 17:02:19 +00:00
disklabel.h Add a file system type for ZFS (FS_ZFS). 2007-12-08 06:47:48 +00:00
diskmbr.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
diskpc98.h Change DOSPTYP_386BSD to 0xc494. 2005-05-08 11:30:26 +00:00
dkstat.h
domain.h Move definition of UNIX domain socket protosw and domain entries from 2006-08-07 12:02:43 +00:00
dvdio.h
elf32.h Convert types 'Elf{32,64}_Nhdr' into aliases of the generic 'Elf_Note' 2006-10-17 05:43:30 +00:00
elf64.h Convert types 'Elf{32,64}_Nhdr' into aliases of the generic 'Elf_Note' 2006-10-17 05:43:30 +00:00
elf_common.h Add extra visibility definitions. 2007-12-02 00:05:18 +00:00
elf_generic.h Implement ELF symbol versioning using GNU semantics. This code aims 2005-12-18 19:43:33 +00:00
elf.h Remove _SOLARIS_C_SOURCE compatibility definitions. Unfortunately the 2007-11-28 21:54:46 +00:00
endian.h
errno.h Add some missing errnos from POSIX. Nothing in FreeBSD generates 2005-04-02 12:33:28 +00:00
eui64.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
event.h When asked to use kqueue, AIO stores its internal state in the 2008-01-24 17:10:19 +00:00
eventhandler.h - Adds event handlers for process_ctor,process_dtor, process_init, 2007-11-15 14:20:07 +00:00
eventvar.h
exec.h Make ps_nargvstr and ps_nenvstr unsigned. This fixes an input 2005-03-23 08:27:59 +00:00
extattr.h Revert/re-make previous commit in a manner that maintains hyphenation of 2007-03-16 19:18:49 +00:00
fbio.h Grab FBTYPE_NOTSUN3 and use it for FBTYPE_PCIMISC. The value matches 2005-05-21 20:40:51 +00:00
fcntl.h Add a new file descriptor type for IPC shared memory objects and use it to 2008-01-08 21:58:16 +00:00
fdcio.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
file.h Add a new file descriptor type for IPC shared memory objects and use it to 2008-01-08 21:58:16 +00:00
filedesc.h Revert UF_OPENING workaround for CURRENT. 2007-05-31 11:51:53 +00:00
filio.h Implement SEEK_DATA and SEEK_HOLE extensions to lseek(2) as found in 2007-04-05 21:10:53 +00:00
firmware.h Cleanup and document the implementation of firmware(9) based on 2007-02-15 17:21:31 +00:00
fnv_hash.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
gmon.h Move the PC_TO_I() and KCOUNT() macros so they aren't GUPROF specific 2006-03-29 18:17:03 +00:00
gpt.h First cut at support for booting a GPT labeled disk via the BIOS bootstrap 2007-10-24 21:33:00 +00:00
hash.h Fix a compiler warning so hash.h can be included in the kernel. This changes 2007-04-09 22:55:14 +00:00
iconv.h Fix panic when loading libiconv.ko on sparc64. 2005-09-05 17:03:40 +00:00
imgact_aout.h Capitalize at the start of sentence. 2005-05-08 02:20:10 +00:00
imgact_elf.h Remove kern.elf32.can_exec_dyn sysctl. Instead extend Brandinfo structure 2005-12-26 21:23:57 +00:00
imgact.h - Change process_exec function handlers prototype to include struct 2006-08-15 12:10:57 +00:00
inflate.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
interrupt.h Bring in the reminaing bits to make interrupt filtering work: 2007-05-06 17:02:50 +00:00
ioccom.h Fix our ioctl(2) implementation when the argument is "int". New 2006-09-27 19:57:02 +00:00
ioctl_compat.h Increase the verbosity of the warning given when this file is used as 2007-04-27 11:19:05 +00:00
ioctl.h Move the old BSD4.3 tty compatibility from (!BURN_BRIDGES && COMPAT_43) 2006-01-10 09:19:10 +00:00
ipc.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
ipmi.h Update the ipmi(4) driver: 2006-09-22 22:11:29 +00:00
jail.h Implement functionality I called 'jail services'. 2007-04-05 23:19:13 +00:00
joystick.h Comment typo. 2005-01-07 19:31:43 +00:00
kbio.h Fix our ioctl(2) implementation when the argument is "int". New 2006-09-27 19:57:02 +00:00
kdb.h Add a new 'why' argument to kdb_enter(), and a set of constants to use 2007-12-25 17:52:02 +00:00
kenv.h
kernel.h Add a new kernel startup event for DDB services, which will include DDB 2007-12-25 18:36:43 +00:00
kerneldump.h Define a new kernel dump "architecture", TEXTDUMPMAGIC, which is used 2007-12-26 10:57:35 +00:00
kobj.h Fix typo in a comment: DEFINE_CLASSx => DEFINE_CLASS_x. 2006-08-24 21:09:39 +00:00
kse.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
ksem.h Introduce MAC Framework and MAC Policy entry points to label and control 2005-05-04 10:39:15 +00:00
kthread.h kthread_exit needs no stinkin argument. 2007-10-26 17:03:22 +00:00
ktr.h Axe KTR_ALQ_MASK now that KTR_WITNESS is off unless you hack an #ifdef 2006-01-25 14:57:23 +00:00
ktrace.h Fix typo in comment. 2005-12-26 22:09:09 +00:00
libkern.h strchr() and strrchr() are already present in the kernel, but with less 2007-04-10 21:42:12 +00:00
limits.h Define MQ_PRIO_MAX, it seems it is the only place 2005-12-02 07:45:28 +00:00
linedisc.h
link_aout.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
link_elf.h Add dl_iterate_phdr function prototype and corresponding dl_phdr_info 2007-04-03 18:33:41 +00:00
linker_set.h netchild's mega-patch to isolate compiler dependencies into a central 2005-03-02 21:33:29 +00:00
linker.h The kernel linker includes a number of utility functions to look up symbol 2007-12-01 19:24:28 +00:00
lock_profile.h Fix tinderbox on sun4v 2007-12-16 06:07:34 +00:00
lock.h Expand lock class with the "virtual" function lc_assert which will offer 2007-11-18 14:43:53 +00:00
lockf.h Correct typo in comment 2007-05-17 16:03:14 +00:00
lockmgr.h Add WITNESS support to lockmgr locking primitive. 2008-02-06 00:37:14 +00:00
mac.h Update comments in mac.h. 2007-02-06 16:24:57 +00:00
malloc.h Eliminate a stale comment concerning contigmalloc(9). 2007-11-10 19:11:51 +00:00
mbpool.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
mbuf.h Give MEXTADD() another argument to make both void pointers to the 2008-02-01 19:36:27 +00:00
mchain.h Remove macros 2005-09-19 08:07:18 +00:00
md4.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
md5.h Add definitions for MD5_BLOCK_LENGTH, MD5_DIGEST_LENGTH and 2006-03-15 19:47:12 +00:00
mdioctl.h Rename GEOM class kernel module g_md.ko to geom_md.ko for consistency 2005-11-11 11:31:23 +00:00
memrange.h
mman.h Add a new file descriptor type for IPC shared memory objects and use it to 2008-01-08 21:58:16 +00:00
module.h Add a new module_file() function that returns the linker_file_t associated 2006-04-17 19:44:44 +00:00
mount.h When restoring the mount after umount failed, the MNTK_UNMOUNT flag 2007-09-12 16:31:32 +00:00
mouse.h Spell "Kensington Thinking Mouse" correctly. 2006-12-18 18:48:28 +00:00
mqueue.h Last step to make mq_notify conform to POSIX standard, If the process 2005-11-30 05:12:03 +00:00
msg.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
msgbuf.h up the default msgbuf limit to 64k.. a verbose boot on i386 on modern 2006-09-03 00:33:19 +00:00
mtio.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
mutex.h Unify assertion flags for all the main primitives using the LA_* underlying 2007-11-19 23:36:47 +00:00
namei.h Add AUDITVNODE[12] flags to namei(), which cause namei() to audit path 2006-02-05 15:42:01 +00:00
nlist_aout.h
param.h Bump __FreeBSD_version in order to reflect introduction of LK_NODUP and 2008-02-06 00:42:26 +00:00
pciio.h Add ABI backwards compatibility to the FreeBSD 4/5/6 versions of 2007-10-24 20:51:44 +00:00
pcpu.h Add comment to pc_cp_time. 2007-12-14 22:20:10 +00:00
pioctl.h Fix our ioctl(2) implementation when the argument is "int". New 2006-09-27 19:57:02 +00:00
pipe.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
pmc.h Increment major version to mark the ABI change between RELENG_7 and -HEAD. 2008-01-14 06:33:41 +00:00
pmckern.h Kernel and hwpmc(4) support for callchain capture. 2007-12-07 08:20:17 +00:00
pmclog.h Kernel and hwpmc(4) support for callchain capture. 2007-12-07 08:20:17 +00:00
poll.h
posix4.h Update #includes list. 2006-11-11 16:19:12 +00:00
power.h
priority.h Replace (name) with Henric Vestergaard Draboel since it was clear that 2007-01-08 21:21:45 +00:00
priv.h Replace the last susers calls in netinet6/ with privilege checks. 2008-01-24 08:25:59 +00:00
proc.h Adaptive spinning in write path with readers and writer starvation avoidance. 2008-02-06 01:02:13 +00:00
procfs.h
protosw.h soreceive_generic(), and sopoll_generic(). Add new functions sosend(), 2006-07-24 15:20:08 +00:00
ptio.h
ptrace.h Add members pl_sigmask and pl_siglist into ptrace_lwpinfo to get lwp's 2006-02-06 09:41:56 +00:00
queue.h Remove the non-standard and undocumented STAILQ_REMOVE_HEAD_UNTIL() 2006-10-24 11:19:21 +00:00
random.h Add a note ahea of the esource enum that if new entropy source 2004-10-12 14:55:59 +00:00
reboot.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
refcount.h Add a simple reference count API that is simply a thin wrapper API around 2005-09-27 18:01:33 +00:00
regression.h
resource.h Move the shared cp_time array (counts %sys, %user, %idle etc) to the 2007-11-29 06:34:30 +00:00
resourcevar.h rufetch and calcru sometimes should be called atomically together. 2007-06-09 21:48:44 +00:00
rman.h Add a convenience function rman_init_from_resource for initializing 2006-06-12 04:06:21 +00:00
rmlock.h Add rm_wowned(9) function to test whether the current thread owns an 2007-11-10 15:06:30 +00:00
rtprio.h Replace (name) with Henric Vestergaard Draboel since it was clear that 2007-01-08 21:21:45 +00:00
runq.h - Change types for necent runq additions to u_char rather than int. 2007-02-08 01:52:25 +00:00
rwlock.h Adaptive spinning in write path with readers and writer starvation avoidance. 2008-02-06 01:02:13 +00:00
sbuf.h
sched.h - Garbage collect unused concurrency functions. 2007-06-12 19:49:39 +00:00
select.h Fix FD_ISSET() on LP64 platforms. The FD_ISSET() function/macro is 2006-01-06 22:12:46 +00:00
selinfo.h Refactor select to reduce contention and hide internal implementation 2007-12-16 06:21:20 +00:00
sem.h Remove extra forward declare of 'struct sem'. 2006-11-07 18:56:48 +00:00
sema.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
semaphore.h
serial.h o Don't make the SER_INT_* defines visible to userland. They 2006-03-30 17:24:42 +00:00
sf_buf.h Introduce two new options, "CPU private" and "no wait", to sf_buf_alloc(). 2004-11-08 00:43:46 +00:00
shm.h Change the data type of the upper shared memory limits from a signed 2005-08-06 07:20:18 +00:00
sigio.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
signal.h Correct the visibility macro surrounding SIGSYS. 2008-01-19 21:41:31 +00:00
signalvar.h Fix for the panic("vm_thread_new: kstack allocation failed") and 2007-11-05 11:36:16 +00:00
sleepqueue.h Optimize sx locks to use simple atomic operations for the common cases of 2007-03-31 23:23:42 +00:00
smp.h Initial checkin for rmlock (read mostly lock) a multi reader single writer 2007-11-08 14:47:55 +00:00
snoop.h Slightly change the API for the SNPSTTY ioctl so that the userland now 2005-09-18 19:23:35 +00:00
socket.h Give sendfile(2) a SF_SYNC flag which makes it wait until all mbufs 2008-02-03 15:54:41 +00:00
socketvar.h Further clean up sorflush: 2008-02-04 12:25:13 +00:00
sockio.h Revise network interface cloning to take an optional opaque 2006-07-09 06:04:01 +00:00
soundcard.h MFP4 (109713): 2006-11-26 11:55:48 +00:00
stack.h Break out stack(9) from ddb(4): 2007-12-02 20:40:35 +00:00
stat.h Remove _SOLARIS_C_SOURCE compatibility definitions. Unfortunately the 2007-11-28 21:54:46 +00:00
statvfs.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
stddef.h
stdint.h
sun_disklabel.h Support VTOC volume names. This can be useful to distinguish multiple 2005-03-30 09:33:10 +00:00
sx.h - Re-implement lock profiling in such a way that it no longer breaks 2007-12-15 23:13:31 +00:00
syscall.h Regenerate. 2008-01-20 23:44:24 +00:00
syscall.mk Regenerate. 2008-01-20 23:44:24 +00:00
syscallsubr.h Make ftruncate a 'struct file' operation rather than a vnode operation. 2008-01-07 20:05:19 +00:00
sysctl.h Add very basic support for the kernel to export a list of features. Each 2007-12-31 21:12:05 +00:00
sysent.h Fix a couple of issues with the stack limit for 32-bit processes on 64-bit 2007-07-12 18:01:31 +00:00
syslimits.h Use the same ARG_MAX for arm than for the other platforms. I don't see any 2007-05-29 15:14:46 +00:00
syslog.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
sysproto.h Regenerate. 2008-01-20 23:44:24 +00:00
systm.h Refactor select to reduce contention and hide internal implementation 2007-12-16 06:21:20 +00:00
taskqueue.h Add the following to the taskqueue api: 2006-01-14 01:55:24 +00:00
termios.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
thr.h Add thr_kill2 syscall which sends a signal to a thread in another process. 2007-08-16 05:26:42 +00:00
tiio.h
time.h Add POSIX clock id CLOCK_THREAD_CPUTIME_ID, this can be used to measure 2008-01-18 07:04:42 +00:00
timeb.h
timepps.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
timers.h s/timer_t/int/g 2006-03-01 06:48:31 +00:00
times.h
timespec.h Implement POSIX timers. Current only CLOCK_REALTIME and CLOCK_MONOTONIC 2005-10-23 04:22:56 +00:00
timetc.h
timex.h /* -> /*- for license, minor formatting changes 2005-01-07 02:29:27 +00:00
tree.h Implement RB_PREV() AND RB_FOREACH_REVERSE(). 2007-12-28 07:03:26 +00:00
tty.h - Don't depend on header pollution to declare struct thread. 2007-12-16 06:12:53 +00:00
ttychars.h Move the old BSD4.3 tty compatibility from (!BURN_BRIDGES && COMPAT_43) 2006-01-10 09:19:10 +00:00
ttycom.h Fix our ioctl(2) implementation when the argument is "int". New 2006-09-27 19:57:02 +00:00
ttydefaults.h Restore TTYDEF_LFLAG to set echo bits. 2004-11-03 19:16:55 +00:00
ttydev.h Move the old BSD4.3 tty compatibility from (!BURN_BRIDGES && COMPAT_43) 2006-01-10 09:19:10 +00:00
turnstile.h Commit 3/14 of sched_lock decomposition. 2007-06-04 23:51:44 +00:00
types.h Remove _SOLARIS_C_SOURCE compatibility definitions. Unfortunately the 2007-11-28 21:54:46 +00:00
ucontext.h Remove various bits of conditional Alpha code and fixup a few comments. 2006-05-12 05:04:46 +00:00
ucred.h Add padding for anticipated functionality 2007-12-07 01:46:13 +00:00
uio.h Document struct uio.h entries. 2006-11-29 19:08:45 +00:00
umtx.h Add function UMTX_OP_WAIT_UINT, the function causes thread to wait for 2007-11-21 04:21:02 +00:00
un.h Implement unix(4) socket options LOCAL_CREDS and LOCAL_CONNWAIT. 2005-04-13 00:01:46 +00:00
unistd.h Hide SEEK_DATA and SEEK_HOLE under __BSD_VISIBLE. 2007-04-07 18:31:40 +00:00
unpcb.h Remove explicit locking of struct file. 2007-12-30 01:42:15 +00:00
user.h Export a type for POSIX SHM file descriptors via kern.proc.filedesc as 2008-01-20 19:55:52 +00:00
utsname.h
uuid.h Add parse_uuid() that creates a binary representation of an UUID from 2005-10-07 13:37:10 +00:00
vmmeter.h Change the management of cached pages (PQ_CACHE) in two fundamental 2007-09-25 06:25:06 +00:00
vnode.h VOP_LOCK1() (and so VOP_LOCK()) and VOP_UNLOCK() are only used in 2008-01-13 14:44:15 +00:00
wait.h Since union wait was removed in revision 1.17 (3 years, 5 months ago), 2005-11-10 05:00:20 +00:00
watchdog.h Align the interfaces for the various watchdogs and make the interface 2006-12-15 21:44:49 +00:00