Date: Sat, 17 Mar 2001 10:38:37 -0800 (PST) From: Matthew Jacob <mjacob@feral.com> To: Warner Losh <imp@harmony.village.org> Cc: Poul-Henning Kamp <phk@critter.freebsd.dk>, John Baldwin <jhb@FreeBSD.ORG>, arch@FreeBSD.ORG Subject: Re: man pages Message-ID: <Pine.BSF.4.21.0103171037090.65580-100000@beppo.feral.com> In-Reply-To: <200103171820.f2HIKq945996@harmony.village.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Kernel Functions for Drivers ddi_enter_critical(9F) NAME ddi_enter_critical, ddi_exit_critical - enter and exit a critical region of control SYNOPSIS #include <sys/conf.h> #include <sys/ddi.h> #include <sys/sunddi.h> unsigned int ddi_enter_critical(void); void ddi_exit_critical(unsigned int ddic); INTERFACE LEVEL Solaris DDI specific (Solaris DDI). ARGUMENTS ddic The returned value from the call to ddi_enter_critical() must be passed to ddi_exit_critical(). DESCRIPTION Nearly all driver operations can be done without any special synchronization and protection mechanisms beyond those pro- vided by, e.g., mutexes (see mutex(9F)). However, for cer- tain devices there can exist a very short critical region of code which must be allowed to run uninterrupted. The func- tion ddi_enter_critical() provides a mechanism by which a driver can ask the system to guarantee to the best of its ability that the current thread of execution will neither be preempted nor interrupted. This stays in effect until a bracketing call to ddi_exit_critical() is made (with an argument which was the returned value from ddi_enter_critical()). The driver may not call any functions external to itself in between the time it calls ddi_enter_critical() and the time it calls ddi_exit_critical(). RETURN VALUES ddi_enter_critical() returns an opaque unsigned integer which must be used in the subsequent call to ddi_exit_critical(). CONTEXT This function can be called from user or interrupt context. WARNINGS Driver writers should note that in a multiple processor sys- tem this function does not temporarily suspend other proces- sors from executing. This function also cannot guarantee to actually block the hardware from doing such things as SunOS 5.6 Last change: 4 Nov 1991 1 Kernel Functions for Drivers ddi_enter_critical(9F) interrupt acknowledge cycles. What it can do is guarantee that the currently executing thread will not be preempted. Do not write code bracketed by ddi_enter_critical() and ddi_exit_critical() that can get caught in an infinite loop, as the machine may crash if you do. SEE ALSO mutex(9F) Writing Device Drivers SunOS 5.6 Last change: 4 Nov 1991 2 To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0103171037090.65580-100000>