allocate and initialize a sleep lock
sleep_t *SLEEP_ALLOC(int arg, lkinfo_t *lkinfop, int flag);
SLEEP_ALLOC dynamically allocates and initializes
an instance of a sleep lock.
The lock is initialized to the unlocked state.
If flag is set to KM_SLEEP, the caller will sleep if
necessary until sufficient memory is available.
If flag is set to KM_NOSLEEP, the caller will not sleep,
but SLEEP_ALLOC will return NULL if sufficient memory is not
Reserved for future use
(must be equal to zero).
Pointer to a
lkinfo structure (see
lk_name member of the lkinfo structure points to a character
string defining a name that will be associated with the lock for the purpose
of statistics gathering.
Specifies whether the caller is willing to sleep
waiting for memory.
Upon successful completion, SLEEP_ALLOC returns a pointer to the newly
If KM_NOSLEEP is specified and sufficient memory is not immediately
available, SLEEP_ALLOC returns a NULL pointer.
The name should begin with the driver prefix and should be unique to the lock
or group of locks for which the driver wishes to collect a uniquely
identifiable set of statistics
(that is, if a given name is shared by a group of locks,
the statistics of individual locks within the group
will not be uniquely identifiable).
The only bit flag currently specified within the
lk_flags member of
the lkinfo structure is the LK_NOSTATS flag, which specifies that
statistics are not to be collected for this particular lock under the
_MPSTATS compilation option.
If the LK_NOSTATS flag is not specified, statistics will be
collected for this lock under the _MPSTATS compilation option, and
the lkinfop pointer will be recorded in the statistics buffer along with
the lock statistics.
A given lkinfo structure may be shared among multiple sleep locks
but a lkinfo structure may not be shared between a sleep lock and
a basic or read/write lock.
The caller must ensure that the
lk_pad member of the
lkinfo structure is zeroed out before passing it to SLEEP_ALLOC.
Under the _MPSTATS compilation option, if KM_NOSLEEP is
specified and sufficient memory can be immediately allocated for the lock itself
but not for an accompanying statistics buffer, SLEEP_ALLOC will
return a pointer to the allocated lock but individual statistics will not be
collected for the lock.
Context and synchronization
If flag is set to KM_NOSLEEP,
non-blockable, initialization, or interrupt
If flag is set to KM_SLEEP,
5, 5mp, 6, 6mp, 7, 7mp, 7.1, 7.1mp, 8, 8mp
``Sleep locks'' in HDK Technical Reference
19 June 2005
© 2005 The SCO Group, Inc. All rights reserved.
OpenServer 6 and UnixWare (SVR5) HDK - June 2005