LOCK(D3) LOCK(D3)
NAME
LOCK - acquire a basic lock
SYNOPSIS
#include <sys/types.h>
#include <sys/ksynch.h>
#include <sys/ddi.h>
pl_t LOCK(lock_t *lockp, pl_t pl);
Arguments
lockp Pointer to the basic lock to be acquired.
pl The interrupt priority level to be set while the
lock is held by the caller.
DESCRIPTION
LOCK sets the interrupt priority level in accordance with the
value specified by pl (if required by the implementation) and
acquires the lock specified by lockp. If the lock is not
immediately available, the caller will wait until the lock is
available. It is implementation defined whether the caller
will block during the wait. Some implementations may cause
the caller to spin for the duration of the wait, while on
others the caller may block at some point.
Return Values
Upon acquiring the lock, LOCK returns the previous interrupt
priority level (plbase - plhi).
USAGE
Because some implementations require that interrupts that
might attempt to acquire the lock be blocked on the processor
on which the lock is held, portable drivers must specify a pl
value that is sufficient to block out any interrupt handler
that might attempt to acquire this lock. See the description
of the min_pl argument to LOCK_ALLOC(D3) for additional
discussion and a list of the valid values for pl.
Implementations which do not require that the interrupt
priority level be raised during lock acquisition may choose to
ignore this argument.
Level
Base or Interrupt.
Copyright 1994 Novell, Inc. Page 1
LOCK(D3) LOCK(D3)
Synchronization Constraints
Driver-defined sleep locks may be held across calls to this
function.
Driver-defined basic locks and read/write locks may be held
across calls to this function subject to the hierarchy and
recursion restrictions described below.
Warnings
Basic locks are not recursive. A call to LOCK attempting to
acquire a lock that is currently held by the calling context
will result in deadlock.
Calls to LOCK should honor the ordering defined by the lock
hierarchy [see LOCK_ALLOC(D3)] in order to avoid deadlock.
When called from interrupt level, the pl argument must not
specify a priority level below the level at which the
interrupt handler is running.
REFERENCES
LOCK_ALLOC(D3), LOCK_DEALLOC(D3), TRYLOCK(D3), UNLOCK(D3)
NOTICES
Portability
All processors
Applicability
ddi: 5, 5mp, 6, 6mp, 7, 7mp
Copyright 1994 Novell, Inc. Page 2