summaryrefslogtreecommitdiff
path: root/static/openbsd/man9/spl.9
diff options
context:
space:
mode:
Diffstat (limited to 'static/openbsd/man9/spl.9')
-rw-r--r--static/openbsd/man9/spl.9253
1 files changed, 253 insertions, 0 deletions
diff --git a/static/openbsd/man9/spl.9 b/static/openbsd/man9/spl.9
new file mode 100644
index 00000000..effcfb92
--- /dev/null
+++ b/static/openbsd/man9/spl.9
@@ -0,0 +1,253 @@
+.\" $OpenBSD: spl.9,v 1.26 2016/08/16 23:49:35 dlg Exp $
+.\" $NetBSD: spl.9,v 1.1 1997/03/11 06:15:05 mikel Exp $
+.\"
+.\" Copyright (c) 1997 Michael Long.
+.\" Copyright (c) 1997 Jonathan Stone.
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" 3. The name of the author may not be used to endorse or promote products
+.\" derived from this software without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+.\"
+.Dd $Mdocdate: August 16 2016 $
+.Dt SPLX 9
+.Os
+.Sh NAME
+.Nm splraise ,
+.Nm splhigh ,
+.Nm splserial ,
+.Nm splsched ,
+.Nm splclock ,
+.Nm splstatclock ,
+.Nm splvm ,
+.Nm spltty ,
+.Nm splsofttty ,
+.Nm splnet ,
+.Nm splbio ,
+.Nm splsoftnet ,
+.Nm splsoftclock ,
+.Nm spllowersoftclock ,
+.Nm spl0 ,
+.Nm splx ,
+.Nm splassert
+.Nd modify system interrupt priority level
+.Sh SYNOPSIS
+.In machine/intr.h
+.Ft int
+.Fn splraise "int ipl"
+.Ft int
+.Fn splhigh void
+.Ft int
+.Fn splserial void
+.Ft int
+.Fn splsched void
+.Ft int
+.Fn splclock void
+.Ft int
+.Fn splstatclock void
+.Ft int
+.Fn splvm void
+.Ft int
+.Fn spltty void
+.Ft int
+.Fn splsofttty void
+.Ft int
+.Fn splnet void
+.Ft int
+.Fn splbio void
+.Ft int
+.Fn splsoftnet void
+.Ft int
+.Fn splsoftclock void
+.Ft int
+.Fn spllowersoftclock void
+.Ft int
+.Fn spl0 void
+.Ft void
+.Fn splx "int s"
+.Ft void
+.Fn splassert "int s"
+.Sh DESCRIPTION
+These functions raise and lower the system priority level.
+They are used by kernel code to block interrupts with priority less
+than or equal to the named level (i.e.,
+.Fn spltty
+blocks interrupts of priority less than or equal to
+.Dv IPL_TTY ) .
+The code may then safely access variables and data structures which
+are used by kernel code that runs at an equal or lower priority level.
+.Pp
+An
+.Nm spl
+function exists for each distinct priority level which can exist in
+the system.
+These macros and the corresponding priority levels are
+used for various defined purposes, and may be divided into two main
+types: hard and soft.
+Hard interrupts are generated by hardware
+devices, while soft interrupts are generated by callouts and called
+from the kernel's periodic timer interrupt service routine.
+.Pp
+In order of highest to lowest priority, the priority-raising macros
+are:
+.Bl -tag -width splsoftclockXX
+.It Fn splhigh
+blocks all hard and soft interrupts.
+It is used for code that cannot
+tolerate any interrupts, like hardware context switching code and the
+.Xr ddb 4
+in-kernel debugger.
+.It Fn splserial
+blocks hard interrupts from serial interfaces.
+Code running at this level may not access the tty subsystem.
+.It Fn splsched
+blocks interrupts that may access scheduler data structures.
+Specifically the clock interrupt that invokes the
+.Fn schedclock
+function needs to be blocked.
+On some systems this is a separate clock;
+on others it is the same as the statistics clock and, on these,
+.Fn splsched
+must block everything that
+.Fn splstatclock
+does.
+Code running at or above this level may not call
+.Xr tsleep 9
+or
+.Xr wakeup 9 ,
+nor may it post signals.
+Note that "running" means invoked by an interrupt handler that
+operates at this level or higher.
+Kernel code that operates in the context of a process and has called
+.Fn splhigh
+for blocking purposes can use
+.Xr tsleep 9
+or
+.Xr wakeup 9 .
+.It Fn splclock
+blocks the hardware clock interrupt.
+It is used by
+.Fn hardclock
+to update kernel and process times, and must be used by any other code
+that accesses time-related data.
+.It Fn splstatclock
+blocks the hardware statistics clock interrupt.
+It is used by
+.Fn statclock
+to update kernel profiling and other statistics, and must be used by
+any code that accesses that data.
+This level is identical to
+.Fn splclock
+if there is no separate statistics clock.
+.It Fn splvm
+blocks hard interrupts from all devices that are allowed to use the
+kernel
+.Xr malloc 9 .
+That includes all disk, network, and tty device interrupts.
+.It Fn spltty
+blocks hard interrupts from TTY devices.
+.It Fn splsofttty
+blocks soft interrupts generated by serial devices.
+.It Fn splnet
+blocks hard interrupts from network interfaces.
+.It Fn splbio
+blocks hard interrupts from disks and other mass-storage devices.
+.It Fn splsoftnet
+blocks soft network interrupts.
+.It Fn splsoftclock
+blocks soft clock interrupts.
+.El
+.Pp
+Two macros lower the system priority level.
+They are:
+.Bl -tag -width spllowersoftclockXX
+.It Fn spllowersoftclock
+unblocks all interrupts but the soft clock interrupt.
+.It Fn spl0
+unblocks all interrupts.
+.El
+.Pp
+The
+.Fn splraise
+macro blocks interrupts at the interrupt priority level specified by
+.Fa ipl .
+.Pp
+The
+.Fn splx
+macro restores the system priority level to the one encoded in
+.Fa s ,
+which must be a value previously returned by one of the other
+.Nm spl
+macros.
+.Pp
+The
+.Fn splassert
+function checks that the system is running at a certain priority level.
+The argument
+.Fa s
+should be one of these constants:
+.Pp
+.Bl -tag -width IPL_SOFTCLOCKXX -compact -offset indent
+.It Dv IPL_STATCLOCK
+.It Dv IPL_SCHED
+.It Dv IPL_CLOCK
+.It Dv IPL_VM
+.It Dv IPL_BIO
+.It Dv IPL_TTY
+.It Dv IPL_NET
+.It Dv IPL_SOFTNET
+.It Dv IPL_SOFTCLOCK
+.It Dv IPL_NONE
+.El
+.Pp
+The
+.Fn splassert
+function is optional and is not necessarily implemented on
+all architectures nor enabled in all kernel configurations.
+It checks the current system priority level to see if it's
+at least at the level specified in the argument
+.Fa s .
+If possible, it also checks if it hasn't been called from an
+interrupt handler with a level higher than the one requested, which
+must be an error (if some code is protected from
+.Dv IPL_SOFTNET
+interrupts, but accessed from an
+.Dv IPL_NET
+interrupt, it must be a design error in the code).
+.Pp
+The behavior of the
+.Fn splassert
+function is controlled by the kern.splassert
+.Xr sysctl 8 .
+Valid values for it are:
+.Pp
+.Bl -tag -width 1nr -compact -offset indent
+.It 0
+disable error checking
+.It 1
+print a message if an error is detected
+.It 2
+print a message and a stack trace if possible
+.It 3
+like 2 but also drop into the kernel debugger
+.El
+.Pp
+Any other value causes a system panic on errors.