-/*
- * A "simple" spin lock, providing non-blocking mutual
- * exclusion and conditional acquisition.
- *
- * The usimple_lock exists even in uniprocessor configurations.
- * A data structure is always allocated for it and the following
- * operations are always defined:
- *
- * usimple_lock_init lock initialization (mandatory!)
- * usimple_lock lock acquisition
- * usimple_unlock lock release
- * usimple_lock_try conditional lock acquisition;
- * non-zero means success
- * Simple lock DEBUG interfaces
- * usimple_lock_held verify lock already held by me
- * usimple_lock_none_held verify no usimple locks are held
- *
- * The usimple_lock may be used for synchronization between
- * thread context and interrupt context, or between a uniprocessor
- * and an intelligent device. Obviously, it may also be used for
- * multiprocessor synchronization. Its use should be rare; the
- * simple_lock is the preferred spinning lock (see below).
- *
- * The usimple_lock supports optional lock debugging and statistics.
- *
- * Normally, we expect the usimple_lock data structure to be
- * defined here, with its operations implemented in an efficient,
- * machine-dependent way. However, any implementation may choose
- * to rely on a C-based, portable version of the usimple_lock for
- * debugging, statistics, and/or tracing. Three hooks are used in
- * the portable lock package to allow the machine-dependent package
- * to override some or all of the portable package's features.
- *
- * The usimple_lock also handles pre-emption. Lock acquisition
- * implies disabling pre-emption, while lock release implies
- * re-enabling pre-emption. Conditional lock acquisition does
- * not assume success: on success, pre-emption is disabled
- * but on failure the pre-emption state remains the same as
- * the pre-emption state before the acquisition attempt.
- */