DDI_ENTER_CRITICAL(9F)  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(
unsignedint ddic);
INTERFACE LEVEL
       illumos DDI specific (illumos DDI).
PARAMETERS
       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 provided 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 
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
       The 
ddi_enter_critical() function 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, interrupt, or kernel context.
WARNINGS
       Driver writers should note that in a multiple processor system  this
       function does not temporarily suspend other processors 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 
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                              January 16, 2006        DDI_ENTER_CRITICAL(9F)