LOCK_ALLOC -- allocate and initialize a basic lock


   #include <sys/types.h>
   #include <sys/kmem.h>
   #include <sys/ksynch.h>
   #include <sys/ddi.h>

lock_t *LOCK_ALLOC(uchar_t hierarchy, pl_t min_pl, lkinfo_t *lkinfop, int flag);


LOCK_ALLOC dynamically allocates and initializes an instance of a basic 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 LOCK_ALLOC returns NULL if sufficient memory is not immediately available.


Hierarchy value which asserts the order in which this lock will be acquired relative to other basic and read/write locks.

Minimum priority level argument which asserts the minimum priority level that will be passed in with any attempt to acquire this lock [see LOCK(D3)].

Pointer to a lkinfo structure. The 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.

Return values

Upon successful completion, LOCK_ALLOC returns a pointer to the newly allocated lock. If KM_NOSLEEP is specified and sufficient memory is not immediately available, LOCK_ALLOC returns a NULL pointer.


hierarchy argument

See hierarchy(D5).

min_pl argument

See pl(D5) for a list of values.

lkinfop argument

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. (For example, if a given name is shared by a group of locks, the statistics of individual locks within the group will not be uniquely identifiable.) No flags defined within the lk_flags member of the lkinfo structure [see LKINFO_DECL(D5)] for use with LOCK_ALLOC.

The lkinfop pointer is recorded in a statistics buffer along with the lock statistics when the driver is compiled with the DEBUG and _MPSTATS compilation options defined. A given lkinfo structure may be shared among multiple basic locks and read/write locks but a lkinfo structure may not be shared between a basic lock and a sleep lock. The caller must ensure that the lk_flags and lk_pad members of the lkinfo structure are zeroed out before passing it to LOCK_ALLOC.

flag argument

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, LOCK_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 context.

If flag is set to KM_SLEEP, user context.

Hardware applicability


Version applicability

ddi: 5, 5mp, 6, 6mp, 7, 7mp, 7.1, 7.1mp, 8, 8mp


hierarchy(D5), LOCK(D3), LOCK_DEALLOC(D3), LKINFO_DECL(D5), pl(D5) TRYLOCK(D3), UNLOCK(D3)

``Spin locks (DDI)'' in HDK Technical Reference

19 June 2005
© 2005 The SCO Group, Inc. All rights reserved.
OpenServer 6 and UnixWare (SVR5) HDK - June 2005