diff options
-rw-r--r-- | share/man/man9/spl.9 | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/share/man/man9/spl.9 b/share/man/man9/spl.9 new file mode 100644 index 00000000000..8e06a57eb87 --- /dev/null +++ b/share/man/man9/spl.9 @@ -0,0 +1,149 @@ +.\" $OpenBSD: spl.9,v 1.1 1997/05/29 15:20:49 kstailey 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. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by Michael Long. +.\" 4. 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 March 11, 1997 +.Dt SPL 9 +.Os OpenBSD +.Sh NAME +.Nm spl +.Nd modify system interrupt priority level +.Sh SYNOPSIS +.Fd #include <machine/intr.h> +.Ft int +.Fn splhigh void +.Ft int +.Fn splsched void +.Ft int +.Fn splserial void +.Ft int +.Fn splclock void +.Ft int +.Fn splstatclock void +.Ft int +.Fn splimp void +.Ft int +.Fn spltty void +.Ft int +.Fn splsoftserial void +.Ft int +.Fn splnet void +.Ft int +.Fn splbio void +.Ft int +.Fn splsoftnet void +.Ft int +.Fn splsoftclock void +.Ft int +.Fn spl0 void +.Ft void +.Fn splx "int s" +.Sh DESCRIPTION +These functions raise and lower the system priority level. +They are used by kernel code running at any given priority level to +block higher-priority interrupts, so that it can safely access +variables or data structures which are used by kernel code that runs +at a higher priority level. +.Pp +A +.Nm +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 splsoftserialXX +.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. Code +running at or above this level may not call +.Fn sleep , +.Fn tsleep , +or +.Fn wakeup , +nor may it post signals. +.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 splimp +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 splsoftserial +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. +.El +.Pp +Two macros lower the system priority level. They are: +.Bl -tag -width splsoftclockXX +.It Fn splsoftclock +unblocks all interrupts but the soft clock interrupt. +.It Fn spl0 +unblocks all interrupts. +.El +.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 +macros. |