diff options
Diffstat (limited to 'static/netbsd/man9/mi_switch.9')
| -rw-r--r-- | static/netbsd/man9/mi_switch.9 | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/static/netbsd/man9/mi_switch.9 b/static/netbsd/man9/mi_switch.9 new file mode 100644 index 00000000..b7b38723 --- /dev/null +++ b/static/netbsd/man9/mi_switch.9 @@ -0,0 +1,113 @@ +.\" $NetBSD: mi_switch.9,v 1.4 2017/07/03 21:28:48 wiz Exp $ +.\" +.\" Copyright (c) 1996, 2002 The NetBSD Foundation, Inc. +.\" All rights reserved. +.\" +.\" This code is derived from software contributed to The NetBSD Foundation +.\" by Paul Kranenburg. +.\" +.\" 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. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +.\" ``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 FOUNDATION OR CONTRIBUTORS +.\" 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 July 21, 2007 +.Dt MI_SWITCH 9 +.Os +.Sh NAME +.Nm mi_switch +.Nd machine independent context switch prelude +.Sh SYNOPSIS +.Ft int +.Fn mi_switch "struct lwp *l" +.Sh DESCRIPTION +The +.Fn mi_switch +function implements the machine-independent prelude to an LWP context +switch. +It is called from only a few distinguished places in the kernel +code as a result of the principle of non-preemptable kernel mode +execution. +The three major uses of +.Fn mi_switch +can be enumerated as follows: +.Bl -enum -offset indent +.It +From within +.Xr cv_wait 9 +and associated methods +when the current LWP voluntarily relinquishes the CPU to wait for +some resource to become available. +.It +From within +.Xr preempt 9 +when the current LWP voluntarily relinquishes the CPU or when the +kernel prepares a return to user-mode execution. +.It +In the signal handling code +if a signal is delivered that causes an LWP to stop +.Pq see Xr issignal 9 . +.El +.Pp +.Fn mi_switch +records the amount of time the current LWP has been running in the +LWP structure and checks this value against the CPU time limits +allocated to the LWP +.Pq see Xr getrlimit 2 . +Exceeding the soft limit results in a +.Dv SIGXCPU +signal to be posted to the LWP, while exceeding the hard limit will +cause a +.Dv SIGKILL . +.Pp +Unless +.Fa l->l_switchto +is not +.Dv NULL , +.Fn mi_switch +will call +.Fn sched_nextlwp +to select a new LWP from the scheduler's runqueue structures. +If no runnable LWP is found, the idle LWP is used. +If the new LWP is not equal to the current one, +.Fn mi_switch +will hand over control to the machine-dependent function +.Xr cpu_switchto 9 +to switch to the new LWP. +.Pp +.Fn mi_switch +has to be called with the LWP lock held +(through calling +.Fn lwp_lock +first) and at the +.Xr splsched 9 +interrupt protection level. +It returns with the LWP lock released. +.Sh RETURN VALUES +.Fn mi_switch +returns 1 if a context switch was performed to a +different LWP, 0 otherwise. +.Sh SEE ALSO +.Xr condvar 9 , +.Xr cpu_switchto 9 , +.Xr csf 9 , +.Xr pmap 9 , +.Xr ras 9 , +.Xr sched_4bsd 9 , +.Xr splsched 9 |
