Kernel Functions for Drivers ddientercritical(9F)
NAME
ddientercritical, ddiexitcritical - enter and exit a
critical region of control
SYNOPSIS
#include
#include
#include
unsigned int ddientercritical(void);
void ddiexitcritical(unsignedint ddic);
INTERFACE LEVEL
Solaris DI specific (Solaris DI).
PARAMETERS
ddic The returned value from the call to
ddientercritical() must be passed to
ddiexitcritical().
DESCRIPTION
Nearly all driver operations can be done without any special
synchronization and protection mechanisms beyond those pro-
vided by, for example, mutexes (see mutex(9F)). However, for
certain devices there can exist a very short critical region
of code which must be allowed to run uninterrupted. The
function ddientercritical() 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 ddiexitcritical() is made (with an
argument which was the returned value from
ddientercritical()).
The driver may not call any functions external to itself in
between the time it calls ddientercritical() and the time
it calls ddiexitcritical().
RETURN VALUES
The ddientercritical() function returns an opaque unsigned
integer which must be used in the subsequent call to
ddiexitcritical().
CONTEXT
SunOS 5.11 Last change: 16 Jan 2006 1
Kernel Functions for Drivers ddientercritical(9F)
This function can be called from user, interrupt, or kernel
context.
WARNINGS
Driver writers should note that in a multiple processor sys-
tem this function does not temporarily suspend other pro-
cessors from executing. This function also cannot guarantee
to actually block the hardware from doing such things as
interrupt acknowledge cycles. What it can do is guarantee
that the currently executing thread will not be preempted.
Do not write code bracketed by ddientercritical() and
ddiexitcritical() 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.11 Last change: 16 Jan 2006 2
|