1 #include <linux/module.h>
2 #include <linux/spinlock.h>
3 #include <asm/atomic.h>
6 * This is an architecture-neutral, but slow,
7 * implementation of the notion of "decrement
8 * a reference count, and return locked if it
9 * decremented to zero".
11 * NOTE NOTE NOTE! This is _not_ equivalent to
13 * if (atomic_dec_and_test(&atomic)) {
19 * because the spin-lock and the decrement must be
22 * This slow version gets the spinlock unconditionally,
23 * and releases it if it isn't needed. Architectures
24 * are encouraged to come up with better approaches,
25 * this is trivially done efficiently using a load-locked
26 * store-conditional approach, for example.
29 #ifndef ATOMIC_DEC_AND_LOCK
30 int _atomic_dec_and_lock(atomic_t
*atomic
, spinlock_t
*lock
)
33 if (atomic_dec_and_test(atomic
))
39 EXPORT_SYMBOL(_atomic_dec_and_lock
);