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 a...@netbsd.org
+.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

Reply via email to