diff options
Diffstat (limited to 'static/netbsd/man9/pcu.9')
| -rw-r--r-- | static/netbsd/man9/pcu.9 | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/static/netbsd/man9/pcu.9 b/static/netbsd/man9/pcu.9 new file mode 100644 index 00000000..746fdcb1 --- /dev/null +++ b/static/netbsd/man9/pcu.9 @@ -0,0 +1,130 @@ +.\" $NetBSD: pcu.9,v 1.12 2017/03/17 10:09:24 wiz Exp $ +.\" +.\" Copyright (c) 2012-2014 The NetBSD Foundation, Inc. +.\" All rights reserved. +.\" +.\" This code is derived from software contributed to The NetBSD Foundation +.\" by Mindaugas Rasiukevicius. +.\" +.\" 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 May 16, 2017 +.Dt PCU 9 +.Os +.Sh NAME +.Nm pcu +.Nd per-CPU unit (PCU) +.Sh SYNOPSIS +.In sys/pcu.h +.Ft void +.Fn pcu_load "const pcu_ops_t *pcu" +.Ft void +.Fn pcu_save "const pcu_ops_t *pcu" "lwp_t *l" +.Ft void +.Fn pcu_save_all "lwp_t *l" +.Ft void +.Fn pcu_discard "const pcu_ops_t *pcu" "lwp_t *l" "bool valid" +.Ft void +.Fn pcu_discard_all "lwp_t *l" +.Ft bool +.Fn pcu_valid_p "const pcu_ops_t *pcu" +.\" ----- +.Sh DESCRIPTION +Per CPU Unit (PCU) is an interface to manage synchronization of any +per-CPU context (unit) tied to an LWP context. +Typical use of PCU is for "lazy-switch" synchronization of the FPU state. +Each PCU has its operations defined by a +.Vt pcu_ops_t +structure. +Members of +.Vt pcu_ops_t +are +.Bd -literal + u_int pcu_id; + void (*pcu_state_save)(lwp_t *l); + void (*pcu_state_load)(lwp_t *l, u_int flags); + void (*pcu_state_release)(lwp_t *l); +.Ed +.Pp +.Bl -tag +.It Fn pcu_state_save +Indicate to MD code that the PCU state on the current CPU should be +saved into the given LWP's MD storage. +.It Fn pcu_state_load +Load PCU state from the given LWP's MD storage to the current CPU. +The +.Ar flags +argument is a combination of one or more of the following: +.Bl -tag -width PCU_VALIDXXX +.It Dv PCU_VALID +Indicate that the PCU state is considered valid and need not be initialized. +This is the case if the PCU state was already used (and thus loaded) by the LWP +and has not been discarded since. +.It Dv PCU_REENABLE +Indicate that a fault reoccurred while the PCU state is loaded, +therefore PCU should be re-enabled. +This happens if LWP is context switched to another CPU and then switched +back to the original CPU while the state on that CPU has not been changed +by other LWPs. +It may also happen due to instruction "bouncing" on some architectures. +.El +.It Fn pcu_state_release +Indicate to MD code that the PCU ownership by the LWP was released, +therefore the next use of PCU on the LWP shall be detected and +.Fn pcu_load +be called to reacquire the ownership. +For example, this would normally be the changing of a bit for a CPU to +trap on the execution of one of the PCU's instructions. +.El +.\" ----- +.Sh FUNCTIONS +.Bl -tag -width pcu_save_allXXX +.It Fn pcu_load +Load or initialize the PCU state of the current LWP on the current CPU. +.It Fn pcu_save +Save the specified PCU state to the given LWP. +.It Fn pcu_discard +Discard the specified PCU state of the current LWP. +The PCU state will be considered invalid, +unless the "valid" parameter is set to true. +.It Fn pcu_valid_p +Return true if PCU state is considered valid. +Generally, it always becomes "valid" when +.Fn pcu_load +is called by the LWP. +Otherwise, return false. +.It Fn pcu_discard_all +Discard all PCU states of the given LWP; generally used by exec and exit. +.It Fn pcu_save_all +Save all PCU states of the given LWP; generally used during new LWP +creation so that the PCU state of the parent could be copied. +.El +.\" ----- +.Sh CODE REFERENCES +.Nm +is implemented within the file +.Pa sys/kern/subr_pcu.c . +.Sh HISTORY +PCU first appeared in +.Nx 6.0 . +.Sh AUTHORS +.An Mindaugas Rasiukevicius Aq Mt rmind@NetBSD.org |
