Modifying the start routine
All code that calls the
start( )
entry point routine
needs to obtain the lock.
Any early error checks need to release lock_xxtab.
lock_xxtab is released in the
start( )
routine just after:
   if(!xxtab.b_active) {
   ...
       xxtab.b_active++;
       unlockb(&lock_xxtab, -1);
   ...
   }
The -1 argument to the
unlockb( )
function
indicates that
unlockb( )
will not restore the spl value;
that is, your driver will call
splx(D3oddi)
after the
unlockb( )
call, usually in the routine that called
start( ).
If
start( )
was called as a result of an interprocessor interrupt,
from the use of
startio(D3oddi),
then the kernel will perform
the necessary splx at the end of the interrupt.
© 2005 The SCO Group, Inc.  All rights reserved.