xref: /dflybsd-src/share/man/man9/serializer.9 (revision 04262d71ebc376d90784f561d09feced97cea556)
1*04262d71SSascha Wildner.\"
2*04262d71SSascha Wildner.\" Copyright (c) 2007
3*04262d71SSascha Wildner.\"	The DragonFly Project.  All rights reserved.
4*04262d71SSascha Wildner.\"
5*04262d71SSascha Wildner.\" Redistribution and use in source and binary forms, with or without
6*04262d71SSascha Wildner.\" modification, are permitted provided that the following conditions
7*04262d71SSascha Wildner.\" are met:
8*04262d71SSascha Wildner.\"
9*04262d71SSascha Wildner.\" 1. Redistributions of source code must retain the above copyright
10*04262d71SSascha Wildner.\"    notice, this list of conditions and the following disclaimer.
11*04262d71SSascha Wildner.\" 2. Redistributions in binary form must reproduce the above copyright
12*04262d71SSascha Wildner.\"    notice, this list of conditions and the following disclaimer in
13*04262d71SSascha Wildner.\"    the documentation and/or other materials provided with the
14*04262d71SSascha Wildner.\"    distribution.
15*04262d71SSascha Wildner.\" 3. Neither the name of The DragonFly Project nor the names of its
16*04262d71SSascha Wildner.\"    contributors may be used to endorse or promote products derived
17*04262d71SSascha Wildner.\"    from this software without specific, prior written permission.
18*04262d71SSascha Wildner.\"
19*04262d71SSascha Wildner.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20*04262d71SSascha Wildner.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21*04262d71SSascha Wildner.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
22*04262d71SSascha Wildner.\" FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
23*04262d71SSascha Wildner.\" COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
24*04262d71SSascha Wildner.\" INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
25*04262d71SSascha Wildner.\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26*04262d71SSascha Wildner.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
27*04262d71SSascha Wildner.\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28*04262d71SSascha Wildner.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
29*04262d71SSascha Wildner.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30*04262d71SSascha Wildner.\" SUCH DAMAGE.
31*04262d71SSascha Wildner.\"
32*04262d71SSascha Wildner.\" $DragonFly: src/share/man/man9/serializer.9,v 1.1 2007/03/31 10:54:52 swildner Exp $
33*04262d71SSascha Wildner.\"
34*04262d71SSascha Wildner.Dd March 31, 2007
35*04262d71SSascha Wildner.Os
36*04262d71SSascha Wildner.Dt SERIALIZER 9
37*04262d71SSascha Wildner.Sh NAME
38*04262d71SSascha Wildner.Nm lwkt_serialize_init ,
39*04262d71SSascha Wildner.Nm lwkt_serialize_enter ,
40*04262d71SSascha Wildner.Nm lwkt_serialize_try ,
41*04262d71SSascha Wildner.Nm lwkt_serialize_exit ,
42*04262d71SSascha Wildner.Nm lwkt_serialize_handler_enable ,
43*04262d71SSascha Wildner.Nm lwkt_serialize_handler_disable ,
44*04262d71SSascha Wildner.Nm lwkt_serialize_handler_call ,
45*04262d71SSascha Wildner.Nm lwkt_serialize_handler_try ,
46*04262d71SSascha Wildner.Nm ASSERT_SERIALIZED
47*04262d71SSascha Wildner.Nd generic low level serializer
48*04262d71SSascha Wildner.Sh SYNOPSIS
49*04262d71SSascha Wildner.In sys/serialize.h
50*04262d71SSascha Wildner.Ft void
51*04262d71SSascha Wildner.Fn lwkt_serialize_init "lwkt_serialize_t s"
52*04262d71SSascha Wildner.Ft void
53*04262d71SSascha Wildner.Fn lwkt_serialize_enter "lwkt_serialize_t s"
54*04262d71SSascha Wildner.Ft int
55*04262d71SSascha Wildner.Fn lwkt_serialize_try "lwkt_serialize_t s"
56*04262d71SSascha Wildner.Ft void
57*04262d71SSascha Wildner.Fn lwkt_serialize_exit "lwkt_serialize_t s"
58*04262d71SSascha Wildner.Ft void
59*04262d71SSascha Wildner.Fn lwkt_serialize_handler_enable "lwkt_serialize_t s"
60*04262d71SSascha Wildner.Ft void
61*04262d71SSascha Wildner.Fn lwkt_serialize_handler_disable "lwkt_serialize_t s"
62*04262d71SSascha Wildner.Ft void
63*04262d71SSascha Wildner.Fo lwkt_serialize_handler_call
64*04262d71SSascha Wildner.Fa "lwkt_serialize_t s"
65*04262d71SSascha Wildner.Fa "void (*func)(void *, void *)"
66*04262d71SSascha Wildner.Fa "void *arg"
67*04262d71SSascha Wildner.Fa "void *frame"
68*04262d71SSascha Wildner.Fc
69*04262d71SSascha Wildner.Ft int
70*04262d71SSascha Wildner.Fo lwkt_serialize_handler_try
71*04262d71SSascha Wildner.Fa "lwkt_serialize_t s"
72*04262d71SSascha Wildner.Fa "void (*func)(void *, void *)"
73*04262d71SSascha Wildner.Fa "void *arg"
74*04262d71SSascha Wildner.Fa "void *frame"
75*04262d71SSascha Wildner.Fc
76*04262d71SSascha Wildner.Fn ASSERT_SERIALIZED "s"
77*04262d71SSascha Wildner.Sh DESCRIPTION
78*04262d71SSascha WildnerThe
79*04262d71SSascha Wildner.Nm serializer
80*04262d71SSascha WildnerAPI provides a fast locked-bus-cycle-based serialization facility
81*04262d71SSascha Wildnerthat will serialize across blocking conditions.
82*04262d71SSascha WildnerIt is very similar to a lock but much faster for the common case.
83*04262d71SSascha Wildner.Pp
84*04262d71SSascha WildnerThis API was initially designed to be a replacement for SPL calls, but
85*04262d71SSascha Wildnermay be used whenever a low level exclusive lock (serialization) and/or
86*04262d71SSascha Wildnerinterrupt/device interaction is required.
87*04262d71SSascha WildnerUnlike tokens this serialization is not safe from deadlocks nor is it
88*04262d71SSascha Wildnerrecursive, and care must be taken when using it.
89*04262d71SSascha WildnerNote that
90*04262d71SSascha Wildner.Xr tsleep 9
91*04262d71SSascha Wildnerwill not release a serializer that is being held.
92*04262d71SSascha Wildner.Pp
93*04262d71SSascha WildnerThere are two primary facilities \(em the serializer facility itself and
94*04262d71SSascha Wildneran integrated non-stackable interrupt handler disablement facility
95*04262d71SSascha Wildnerused by drivers.
96*04262d71SSascha Wildner.Pp
97*04262d71SSascha Wildner.Fn lwkt_serialize_init ,
98*04262d71SSascha Wildner.Fn lwkt_serialize_enter
99*04262d71SSascha Wildnerand
100*04262d71SSascha Wildner.Fn lwkt_serialize_exit
101*04262d71SSascha Wildnerrespectively initialize, hold and release the serializer
102*04262d71SSascha Wildner.Fa s .
103*04262d71SSascha Wildner.Fn lwkt_serialize_try
104*04262d71SSascha Wildneris a non-blocking version of
105*04262d71SSascha Wildner.Fn lwkt_serialize_enter .
106*04262d71SSascha Wildner.Pp
107*04262d71SSascha Wildner.Fn lwkt_serialize_handler_disable ,
108*04262d71SSascha Wildner.Fn lwkt_serialize_handler_enable
109*04262d71SSascha Wildnerand
110*04262d71SSascha Wildner.Fn lwkt_serialize_handler_call
111*04262d71SSascha Wildnerrespectively disable, enable and call an interrupt handler
112*04262d71SSascha Wildner.Fa func
113*04262d71SSascha Wildnerfor the serializer
114*04262d71SSascha Wildner.Fa s .
115*04262d71SSascha WildnerThe arguments
116*04262d71SSascha Wildner.Fa arg
117*04262d71SSascha Wildnerand
118*04262d71SSascha Wildner.Fa frame
119*04262d71SSascha Wildnerwill be passed to the handler.
120*04262d71SSascha Wildner.Fn lwkt_serialize_handler_try
121*04262d71SSascha Wildneris a non-blocking version of
122*04262d71SSascha Wildner.Fn lwkt_serialize_handler_call .
123*04262d71SSascha Wildner.Pp
124*04262d71SSascha WildnerThe
125*04262d71SSascha Wildner.Fn ASSERT_SERIALIZED
126*04262d71SSascha Wildnermacro asserts that the serializer
127*04262d71SSascha Wildner.Fa s
128*04262d71SSascha Wildneris being held.
129*04262d71SSascha Wildner.Sh RETURN VALUES
130*04262d71SSascha WildnerThe
131*04262d71SSascha Wildner.Fn lwkt_serialize_try
132*04262d71SSascha Wildnerand
133*04262d71SSascha Wildner.Fn lwkt_serialize_handler_try
134*04262d71SSascha Wildnerfunctions return 0 on success and 1 on failure.
135*04262d71SSascha Wildner.Sh FILES
136*04262d71SSascha Wildner.Pa sys/kern/lwkt_serialize.c
137*04262d71SSascha Wildner.Sh SEE ALSO
138*04262d71SSascha Wildner.Xr crit_enter 9 ,
139*04262d71SSascha Wildner.Xr spinlock 9
140*04262d71SSascha Wildner.Sh HISTORY
141*04262d71SSascha WildnerThe
142*04262d71SSascha Wildner.Nm serializer
143*04262d71SSascha WildnerAPI first appeared in
144*04262d71SSascha Wildner.Dx 1.3 .
145*04262d71SSascha Wildner.Sh AUTHORS
146*04262d71SSascha Wildner.An -nosplit
147*04262d71SSascha WildnerThe
148*04262d71SSascha Wildner.Nm serializer
149*04262d71SSascha WildnerAPI was written by
150*04262d71SSascha Wildner.An Matt Dillon .
151*04262d71SSascha WildnerThis manual page was written by
152*04262d71SSascha Wildner.An Hasso Tepper .
153