SV_WAIT(D3DK) —
NAME
SV_WAIT − sleep on a synchronization variable .IX \f4SV_WAIT\fP(D3DK)
SYNOPSIS
#include <sys/types.h>
#include <sys/ksynch.h>
void SV_WAIT(sv_t ∗svp, int priority, lock_t ∗lkp);
ARGUMENTS
svpPointer to the synchronization variable on which to sleep.
priorityA hint to the the scheduling policy as to the relative priority the caller wishes to be assigned while running in the kernel after waking up. The valid values for this argument are as follows:
| pridisk | Priority appropriate for disk driver. |
| prinet | Priority appropriate for network driver. |
| pritty | Priority appropriate for terminal driver. |
| pritape | Priority appropriate for tape driver. |
| prihi | High priority. |
| primed | Medium priority. |
| prilo | Low priority. |
Drivers may use these values to request a priority appropriate to a given type of device or to request a priority that is high, medium or low relative to other activities within the kernel. It is also permissible to specify positive or negative offsets from the values defined above. Positive offsets result in more favorable priority. The maximum allowable offset in all cases is 3 (e.g. pridisk+3 and pridisk-3 are valid values but pridisk+4 and pridisk-4 are not valid). Offsets can be useful in defining the relative importance of different locks or resources that may be held by a given driver. In general, a higher relative priority should be used when the caller is sleeping waiting for a highly contended kernel resource, or when the caller is already holding one or more locks or kernel resources upon entry to SV_WAIT. The exact semantic of the priority argument is specific to the scheduling class of the caller, and some scheduling classes may choose to ignore the argument for the purposes of assigning a scheduling priority.
lkpPointer to a basic lock which must be locked when SV_WAIT is called. The basic lock is released when the calling process goes to sleep, as described below.
DESCRIPTION
SV_WAIT causes the calling process to go to sleep (the caller’s execution is suspended and other processes may be scheduled) waiting for a call to SV_SIGNAL(D3DK) or SV_BROADCAST(D3DK) for the synchronization variable specified by svp.
The basic lock specified by lkp must be held by the caller upon entry. The lock is released and the interrupt priority level is set to pl0 after the process is queued on the synchronization variable but prior to context switching to another process. When the caller returns from SV_WAIT the basic lock is not held and the interrupt priority level is equal to pl0.
The caller will not be interrupted by signals while sleeping inside SV_WAIT.
RETURN VALUE
None.
LEVEL
Base Level Only.
NOTES
May sleep. Driver defined basic locks (with the exception of the lock specified by lkp) and read/write locks may not be held across calls to this function. Driver defined sleep locks may be held across calls to this function.
SEE ALSO
SV_ALLOC(D3DK), SV_BROADCAST(D3DK), SV_DEALLOC(D3DK), SV_SIGNAL(D3DK), SV_WAIT_SIG(D3DK)
DDI/DKI