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().
|