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