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>
