Module Name: src
Committed By: rmind
Date: Sat Jan 23 00:03:38 UTC 2010
Modified Files:
src/distrib/sets/lists/comp: mi
src/share/man/man9: Makefile
Added Files:
src/share/man/man9: xcall.9
Removed Files:
src/share/man/man9: xc.9
Log Message:
Rename xc(9) to xcall(9). OK dyo...@.
To generate a diff of this commit:
cvs rdiff -u -r1.1369 -r1.1370 src/distrib/sets/lists/comp/mi
cvs rdiff -u -r1.307 -r1.308 src/share/man/man9/Makefile
cvs rdiff -u -r1.2 -r0 src/share/man/man9/xc.9
cvs rdiff -u -r0 -r1.1 src/share/man/man9/xcall.9
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/distrib/sets/lists/comp/mi
diff -u src/distrib/sets/lists/comp/mi:1.1369 src/distrib/sets/lists/comp/mi:1.1370
--- src/distrib/sets/lists/comp/mi:1.1369 Fri Jan 22 23:14:28 2010
+++ src/distrib/sets/lists/comp/mi Sat Jan 23 00:03:38 2010
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1369 2010/01/22 23:14:28 dyoung Exp $
+# $NetBSD: mi,v 1.1370 2010/01/23 00:03:38 rmind Exp $
#
# Note: don't delete entries from here - mark them as "obsolete" instead.
#
@@ -9603,8 +9603,7 @@
./usr/share/man/cat9/wsmouse.0 comp-sys-catman .cat
./usr/share/man/cat9/wsmouse_input.0 comp-sys-catman .cat
./usr/share/man/cat9/wsmousedevprint.0 comp-sys-catman .cat
-./usr/share/man/cat9/xc.0 comp-sys-catman .cat
-./usr/share/man/cat9/xc_init_cpu.0 comp-sys-catman .cat
+./usr/share/man/cat9/xcall.0 comp-sys-catman .cat
./usr/share/man/cat9/xc_broadcast.0 comp-sys-catman .cat
./usr/share/man/cat9/xc_unicast.0 comp-sys-catman .cat
./usr/share/man/cat9/xc_wait.0 comp-sys-catman .cat
@@ -15088,8 +15087,7 @@
./usr/share/man/html9/wsmouse.html comp-sys-htmlman html
./usr/share/man/html9/wsmouse_input.html comp-sys-htmlman html
./usr/share/man/html9/wsmousedevprint.html comp-sys-htmlman html
-./usr/share/man/html9/xc.html comp-sys-htmlman html
-./usr/share/man/html9/xc_init_cpu.html comp-sys-htmlman html
+./usr/share/man/html9/xcall.html comp-sys-htmlman html
./usr/share/man/html9/xc_broadcast.html comp-sys-htmlman html
./usr/share/man/html9/xc_unicast.html comp-sys-htmlman html
./usr/share/man/html9/xc_wait.html comp-sys-htmlman html
@@ -20832,8 +20830,7 @@
./usr/share/man/man9/wsmouse.9 comp-sys-man .man
./usr/share/man/man9/wsmouse_input.9 comp-sys-man .man
./usr/share/man/man9/wsmousedevprint.9 comp-sys-man .man
-./usr/share/man/man9/xc.9 comp-sys-man .man
-./usr/share/man/man9/xc_init_cpu.9 comp-sys-man .man
+./usr/share/man/man9/xcall.9 comp-sys-man .man
./usr/share/man/man9/xc_broadcast.9 comp-sys-man .man
./usr/share/man/man9/xc_unicast.9 comp-sys-man .man
./usr/share/man/man9/xc_wait.9 comp-sys-man .man
Index: src/share/man/man9/Makefile
diff -u src/share/man/man9/Makefile:1.307 src/share/man/man9/Makefile:1.308
--- src/share/man/man9/Makefile:1.307 Fri Jan 22 23:14:29 2010
+++ src/share/man/man9/Makefile Sat Jan 23 00:03:38 2010
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.307 2010/01/22 23:14:29 dyoung Exp $
+# $NetBSD: Makefile,v 1.308 2010/01/23 00:03:38 rmind Exp $
# Makefile for section 9 (kernel function and variable) manual pages.
@@ -56,7 +56,7 @@
ubc.9 usbdi.9 uvm.9 vmem.9 \
wdc.9 workqueue.9 \
wscons.9 wsdisplay.9 wsfont.9 wskbd.9 wsmouse.9 \
- xc.9
+ xcall.9
MAN+= boothowto.9
MLINKS+=boothowto.9 BOOT_FLAG.9
@@ -858,10 +858,9 @@
wskbd.9 wskbddevprint.9
MLINKS+=wsmouse.9 wsmouse_input.9 \
wsmouse.9 wsmousedevprint.9
-MLINKS+=xc.9 xc_init_cpu.9 \
- xc.9 xc_broadcast.9 \
- xc.9 xc_unicast.9 \
- xc.9 xc_wait.9
+MLINKS+=xcall.9 xc_broadcast.9 \
+ xcall.9 xc_unicast.9 \
+ xcall.9 xc_wait.9
SUBDIR= man9.i386 man9.sun3
Added files:
Index: src/share/man/man9/xcall.9
diff -u /dev/null src/share/man/man9/xcall.9:1.1
--- /dev/null Sat Jan 23 00:03:38 2010
+++ src/share/man/man9/xcall.9 Sat Jan 23 00:03:38 2010
@@ -0,0 +1,168 @@
+.\" $NetBSD: xcall.9,v 1.1 2010/01/23 00:03:38 rmind Exp $
+.\"
+.\" Copyright (c) 2010 The NetBSD Foundation, Inc.
+.\" All rights reserved.
+.\"
+.\" This code is derived from software contributed to The NetBSD Foundation
+.\" by Andrew Doran.
+.\"
+.\" 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 January 22, 2010
+.Dt XC 9
+.Os
+.Sh NAME
+.Nm XC ,
+.Nm xc_init_cpu ,
+.Nm xc_broadcast ,
+.Nm xc_unicast ,
+.Nm xc_wait
+.Nd Cross-call interface
+.Sh SYNOPSIS
+.In sys/xcall.h
+.Vt typedef void (*xcfunc_t)(void *, void *);
+.Ft void
+.Fn xc_init_cpu "struct cpu_info *ci"
+.Ft uint64_t
+.Fn xc_broadcast "u_int flags" "xcfunc_t func" "void *arg1" "void *arg2"
+.Ft uint64_t
+.Fn xc_unicast "u_int flags" "xcfunc_t func" "void *arg1" "void *arg2" "struct cpu_info *ci"
+.Ft void
+.Fn xc_wait "uint64_t where"
+.Sh DESCRIPTION
+The machine-independent
+.Nm
+interface allows any CPU in the system to request that an arbitrary
+function be executed on any other CPU.
+.Pp
+Sometimes it is necessary to modify hardware state that is tied
+directly to individual CPUs
+.Po
+such as a CPU's local timer
+.Pc ,
+and these updates can not be done remotely by another CPU.
+The LWP requesting the update may be unable to guarantee that it
+will be running on the CPU where the update must occur, when the
+update occurs.
+.Pp
+Additionally, it's sometimes necessary to modify per-CPU software
+state from a remote CPU.
+Where these update operations are so rare or the access to the
+per-CPU data so frequent that the cost of using locking or atomic
+operations to provide coherency is prohibitive, another way must
+be found.
+.Pp
+Cross calls help to solve these types of problem.
+.Pp
+.Nm
+provides a slow mechanism for making
+.Dq "low priority"
+cross calls.
+The function to be executed runs on the remote CPU within a bound
+kthread.
+No queueing is provided, and the implementation uses global state.
+The function being called may block briefly on locks, but in doing
+so must be careful to not interfere with other cross calls in the
+system.
+The function is called with thread context and not from a soft
+interrupt, so it can ensure that it is not interrupting other code
+running on the CPU, and so has exclusive access to the CPU.
+Since this facility is heavyweight, it's expected that it will not
+be used often.
+.Sh FUNCTIONS
+.Bl -tag -width compact
+.It Fn xc_init_cpu "ci"
+Initialize the cross-call subsystem.
+Called once for each CPU in the system as it is attached.
+.It Fn xc_broadcast "flags" "func" "arg1" "arg2"
+Call
+.Fo "(*func)"
+.Fa "arg1"
+.Fa "arg2"
+.Fc
+on all CPUs in the system.
+Return a
+.Vt uint64_t
+.Dq ticket
+to
+.Fn xc_wait
+on for the cross-call to complete.
+Always call
+.Fn xc_broadcast
+from thread context.
+Because
+.Fn (*func)
+is run at a low priority, it can be preempted.
+Treat
+.Fn xc_broadcast
+as an expensive operation.
+.It Fn xc_unicast "flags" "func" "arg1" "arg2" "ci"
+Like
+.Fn xc_broadcast ,
+but call
+.Fn "(*func)"
+on only the CPU indicated by
+.Fa ci .
+.Fn xc_unicast
+also returns a
+.Dq ticket .
+.It Fn xc_wait "where"
+Wait on the
+.Dq ticket
+returned by a prior
+.Fn xc_broadcast
+or
+.Fn xc_unicast
+for the corresponding cross-call to complete.
+.El
+.Sh CODE REFERENCES
+This section describes places within the
+.Nx
+source tree where actual code implementing the
+.Nm
+interface
+can be found.
+All pathnames are relative to
+.Pa /usr/src .
+.Pp
+The
+.Nm
+interface is implemented within the file
+.Pa sys/kern/subr_xcall.c .
+.\" .Sh EXAMPLES
+.Sh SEE ALSO
+.Xr percpu 9 ,
+.Xr kpreempt 9
+.Sh HISTORY
+The
+.Nm
+interface first appeared in
+.Nx 5.0 .
+.Sh AUTHORS
+.An Andrew Doran Aq [email protected]
+.Sh CAVEATS
+Cross calls must not allocate memory, as the pagedaemon uses them
+.Po
+and memory allocation may need to wait on the pagedaemon
+.Pc .
+.\" .Sh BUGS
+.\" .Sh SECURITY CONSIDERATIONS