#include <linux/export.h>
#include <linux/lockref.h>
#define CMPXCHG_LOOP(CODE, SUCCESS) do { \
BUILD_BUG_ON(sizeof(old) != 8); \
old.lock_count = READ_ONCE(lockref->lock_count); \
while (likely(arch_spin_value_unlocked(old.lock.rlock.raw_lock))) { \
struct lockref new = old, prev = old; \
old.lock_count = cmpxchg64_relaxed(&lockref->lock_count, \
if (likely(old.lock_count == prev.lock_count)) { \
#define CMPXCHG_LOOP(CODE, SUCCESS) do { } while (0)
void lockref_get(struct lockref *lockref)
spin_lock(&lockref->lock);
spin_unlock(&lockref->lock);
EXPORT_SYMBOL(lockref_get);
int lockref_get_not_zero(struct lockref *lockref)