diff options
| author | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-25 15:32:58 -0400 |
|---|---|---|
| committer | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-25 15:32:58 -0400 |
| commit | 5cb84ec742fd33f78c8022863fadaa8d0d93e176 (patch) | |
| tree | 1a81ca3665e6153923e40db7b0d988f8573ab59c /static/netbsd/man9/ipi.9 | |
| parent | a59214f344567c037d5776879bcfc5fcc1d4d5f6 (diff) | |
feat: Added NetBSD man pages
Diffstat (limited to 'static/netbsd/man9/ipi.9')
| -rw-r--r-- | static/netbsd/man9/ipi.9 | 217 |
1 files changed, 217 insertions, 0 deletions
diff --git a/static/netbsd/man9/ipi.9 b/static/netbsd/man9/ipi.9 new file mode 100644 index 00000000..9410db4a --- /dev/null +++ b/static/netbsd/man9/ipi.9 @@ -0,0 +1,217 @@ +.\" $NetBSD: ipi.9,v 1.6 2022/02/12 01:21:11 riastradh Exp $ +.\" +.\" Copyright (c) 2014, 2019 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 March 31, 2019 +.Dt IPI 9 +.Os +.Sh NAME +.Nm ipi +.Nd machine-independent interprocessor interrupts +.Sh SYNOPSIS +.In sys/ipi.h +.Vt typedef void (*ipi_func_t)(void *); +.\" ----- +.Ft u_int +.Fn ipi_register "ipi_func_t func" "void *arg" +.Ft void +.Fn ipi_unregister "u_int ipi_id" +.Ft void +.Fn ipi_trigger "u_int ipi_id" "struct cpu_info *ci" +.Ft void +.Fn ipi_trigger_multi "u_int ipi_id" "const kcpuset_t *target" +.Ft void +.Fn ipi_trigger_broadcast "u_int ipi_id" "bool skip_self" +.\" ----- +.Ft void +.Fn ipi_unicast "ipi_msg_t *msg" "struct cpu_info *ci" +.Ft void +.Fn ipi_multicast "ipi_msg_t *msg" "const kcpuset_t *target" +.Ft void +.Fn ipi_broadcast "ipi_msg_t *msg" "bool skip_self" +.Ft void +.Fn ipi_wait "ipi_msg_t *msg" +.\" ----- +.Sh DESCRIPTION +The machine-independent +.Nm +interface provides capability to send inter-processor interrupts (IPIs) +amongst CPUs. +The interface has two mechanisms: asynchronous IPI to invoke functions +with a constant argument and synchronous IPIs with the cross-call support. +.Pp +Other synchronization interfaces are built using the MI IPI interface. +For a general purpose inter-processor cross-calls or remote +interrupts, use the +.Xr xcall 9 +or +.Xr softint 9 +interfaces. +.Pp +The primary use cases of the MI IPIs include the following: +.Bl -hyphen -compact +.It +provide a facility for the +.Xr softint 9 +subsystem to schedule software interrupts on remote CPUs +.It +provide a facility for the +.Xr xcall 9 +subsystem +.It +abstract IPI handling and facilitate machine-dependent code +.El +.\" ----- +.Ss Asynchronous IPI interface +This interface allows dynamic registration of IPI handlers with a constant +argument and asynchronous triggering of interrupts. +.Bl -tag -width compact +.It Fn ipi_register "func" "arg" +Register an IPI handler +.Fa func +with an arbitrary argument +.Fa arg . +Returns a non-zero IPI identifier on success and zero on failure. +.It Fn ipi_unregister "ipi_id" +Unregister the IPI handler identified by the +.Fa ipi_id . +.It Fn ipi_trigger "ipi_id" "ci" +Trigger an IPI identified by +.Fa ipi_id +on a remote CPU specified by +.Fa ci . +This function must be called with kernel preemption disabled and +the target CPU must be remote. +.It Fn ipi_trigger_multi "ipi_id" "target" +Trigger an IPI identified by +.Fa ipi_id +on all of the CPUs in the set specified by +.Fa target . +This function must be called with kernel preemption disabled. +The sending CPU may be included in the CPU set; when this is the case, +the IPI on the sending CPU is processes synchronously. +.It Fn ipi_trigger_broadcast "ipi_id" "skip_self" +Trigger an IPI identified by +.Fa ipi_id +on all of the attached CPUs. +This function must be called with kernel preemption disabled. +Optionally, the sending CPU may be skipped by passing +.Dv true +for +.Fa skip_self . +.El +.\" ----- +.Ss Synchronous IPI interface +This interface provides capability to perform cross-calls, i.e. invoke +an arbitrary function on a remote CPU. +The invocations are performed synchronously and the caller must wait +for completion. +The cross-call is described by an IPI "message". +The caller has to fill in an +.Vt ipi_msg_t +structure which has the following public members: +.Bd -literal + ipi_func_t func; + void arg; +.Ed +.Pp +The +.Ar func +member specifies a function to invoke and +.Ar arg +is the argument to be passed to the function. +.Bl -tag -width compact +.It Fn ipi_unicast "msg" "ci" +Send an IPI to a remote CPU specified by +.Fa ci . +.It Fn ipi_multicast "msg" "target" +Send IPIs to a CPU set specified by +.Fa target . +.It Fn ipi_broadcast "msg" "skip_self" +Send IPIs to all CPUs. +Optionally, the sending CPU may be skipped by passing +.Dv true +for +.Fa skip_self . +.It Fn ipi_wait "msg" +Wait until all IPIs complete. +.El +.Pp +All described functions, except +.Fn ipi_wait , +must be called with the kernel preemption disabled. +All synchronous IPI invocations must be completed (wait for them with the +.Fn ipi_wait +function) before the IPI message structure can be destroyed or new +cross-call requests can be performed. +.\" ----- +.Sh MEMORY ORDER +All memory operations that happen before triggering an IPI, via +.Fn ipi_trigger , +.Fn ipi_trigger_multi , +.Fn ipi_trigger_broadcast , +.Fn ipi_unicast , +.Fn ipi_multicast , +or +.Fn ipi_broadcast , +also happen before any memory operations in the IPI handler function on +the remote CPU. +.Pp +For synchronous IPIs, all memory operations that happen before the IPI +handler function has returned on the remote CPU also happen before +.Fn ipi_wait +returns on the waiting CPU. +.\" ----- +.Sh NOTES +Functions being called must be lightweight. +They run at +.Dv IPL_HIGH +and should generally not use any other synchronization interfaces +such as +.Xr mutex 9 . +If spin-locks are used, they must be used carefully and have no contention. +.\" ----- +.Sh CODE REFERENCES +The +.Nm +interface is implemented within the file +.Pa sys/kern/subr_ipi.c . +.\" ----- +.Sh SEE ALSO +.Xr kcpuset 9 , +.Xr kpreempt 9 , +.Xr softint 9 , +.Xr spl 9 , +.Xr xcall 9 +.Sh HISTORY +The +.Nm +interface first appeared in +.Nx 7.0 . +.Sh AUTHORS +.An Mindaugas Rasiukevicius Aq Mt rmind@NetBSD.org |
