#include <linux/export.h> #include <linux/spinlock.h> #include <linux/atomic.h> /* * This is an implementation of the notion of "decrement a * reference count, and return locked if it decremented to zero". * * NOTE NOTE NOTE! This is _not_ equivalent to * * if (atomic_dec_and_test(&atomic)) { * spin_lock(&lock); * return 1; * } * return 0; * * because the spin-lock and the decrement must be * "atomic". */
int _atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock) { /* Subtract 1 from counter unless that drops it to 0 (ie. it was 1) */ if (atomic_add_unless(atomic, -1, 1)) return 0; /* Otherwise do it the slow way */ spin_lock(lock); if (atomic_dec_and_test(atomic)) return 1; spin_unlock(lock); return 0; }Contributors
Person | Tokens | Prop | Commits | CommitProp | |
pre-git | pre-git | 24 | 45.28% | 1 | 33.33% |
david s. miller | david s. miller | 23 | 43.40% | 1 | 33.33% |
nick piggin | nick piggin | 6 | 11.32% | 1 | 33.33% |
Total | 53 | 100.00% | 3 | 100.00% |
Person | Tokens | Prop | Commits | CommitProp | |
pre-git | pre-git | 29 | 42.65% | 1 | 14.29% |
david s. miller | david s. miller | 23 | 33.82% | 1 | 14.29% |
linus torvalds | linus torvalds | 7 | 10.29% | 2 | 28.57% |
nick piggin | nick piggin | 7 | 10.29% | 1 | 14.29% |
paul gortmaker | paul gortmaker | 1 | 1.47% | 1 | 14.29% |
arun sharma | arun sharma | 1 | 1.47% | 1 | 14.29% |
Total | 68 | 100.00% | 7 | 100.00% |