From owner-freebsd-arch Sat Mar 17 10:38:49 2001 Delivered-To: freebsd-arch@freebsd.org Received: from feral.com (feral.com [192.67.166.1]) by hub.freebsd.org (Postfix) with ESMTP id E0E2B37B719; Sat, 17 Mar 2001 10:38:42 -0800 (PST) (envelope-from mjacob@feral.com) Received: from beppo (beppo [192.67.166.79]) by feral.com (8.9.3/8.9.3) with ESMTP id KAA27848; Sat, 17 Mar 2001 10:38:41 -0800 Date: Sat, 17 Mar 2001 10:38:37 -0800 (PST) From: Matthew Jacob Reply-To: mjacob@feral.com To: Warner Losh Cc: Poul-Henning Kamp , John Baldwin , arch@FreeBSD.ORG Subject: Re: man pages In-Reply-To: <200103171820.f2HIKq945996@harmony.village.org> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG 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 #include #include 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