Changeset View
Changeset View
Standalone View
Standalone View
sys/compat/linuxkpi/common/include/linux/spinlock.h
Show First 20 Lines • Show All 157 Lines • ▼ Show 20 Lines | #define DEFINE_SPINLOCK(lock) \ | ||||
MTX_SYSINIT(lock, &(lock).m, spin_lock_name("lnxspin"), MTX_DEF) | MTX_SYSINIT(lock, &(lock).m, spin_lock_name("lnxspin"), MTX_DEF) | ||||
#define assert_spin_locked(_l) do { \ | #define assert_spin_locked(_l) do { \ | ||||
if (SPIN_SKIP()) \ | if (SPIN_SKIP()) \ | ||||
break; \ | break; \ | ||||
mtx_assert(&(_l)->m, MA_OWNED); \ | mtx_assert(&(_l)->m, MA_OWNED); \ | ||||
} while (0) | } while (0) | ||||
#define atomic_dec_and_lock_irqsave(cnt, lock, flags) \ | |||||
_atomic_dec_and_lock_irqsave(cnt, lock, &(flags)) | |||||
static inline int | static inline int | ||||
atomic_dec_and_lock_irqsave(atomic_t *cnt, spinlock_t *lock, | _atomic_dec_and_lock_irqsave(atomic_t *cnt, spinlock_t *lock, | ||||
unsigned long flags) | unsigned long *flags) | ||||
{ | { | ||||
spin_lock_irqsave(lock, flags); | if (atomic_add_unless(cnt, -1, 1)) | ||||
return (0); | |||||
spin_lock_irqsave(lock, *flags); | |||||
if (atomic_dec_and_test(cnt)) | if (atomic_dec_and_test(cnt)) | ||||
return 1; | return (1); | ||||
spin_unlock_irqrestore(lock, flags); | spin_unlock_irqrestore(lock, *flags); | ||||
return 0; | return (0); | ||||
} | } | ||||
#endif /* _LINUX_SPINLOCK_H_ */ | #endif /* _LINUX_SPINLOCK_H_ */ |