diff options
author | Neel Chauhan <nc@FreeBSD.org> | 2021-04-26 15:15:49 +0000 |
---|---|---|
committer | Neel Chauhan <nc@FreeBSD.org> | 2021-04-26 15:15:49 +0000 |
commit | ce65353ac1a17677bef03e96df8da967c9086743 (patch) | |
tree | 121d41128e52d25ef18256c28dfbea9a105a2c3b /sys/compat/linuxkpi/common | |
parent | 057f145aae9a3528ccd722c8f566d740d5cafcbb (diff) | |
download | src-ce65353ac1a17677bef03e96df8da967c9086743.tar.gz src-ce65353ac1a17677bef03e96df8da967c9086743.zip |
linuxkpi: Implement atomic_dec_and_lock_irqsave()
This is needed by the drm-kmod 5.5 update.
Reviewed by: hselasky, manu
MFC after: 3 days
Differential Revision: https://reviews.freebsd.org/D29988
Diffstat (limited to 'sys/compat/linuxkpi/common')
-rw-r--r-- | sys/compat/linuxkpi/common/include/linux/spinlock.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/sys/compat/linuxkpi/common/include/linux/spinlock.h b/sys/compat/linuxkpi/common/include/linux/spinlock.h index 2309794b26ec..7ef474b671dc 100644 --- a/sys/compat/linuxkpi/common/include/linux/spinlock.h +++ b/sys/compat/linuxkpi/common/include/linux/spinlock.h @@ -31,6 +31,7 @@ #ifndef _LINUX_SPINLOCK_H_ #define _LINUX_SPINLOCK_H_ +#include <asm/atomic.h> #include <sys/param.h> #include <sys/kernel.h> #include <sys/lock.h> @@ -160,4 +161,16 @@ spin_lock_destroy(spinlock_t *lock) mtx_assert(&(_l)->m, MA_OWNED); \ } while (0) +static inline int +atomic_dec_and_lock_irqsave(atomic_t *cnt, spinlock_t *lock, + unsigned long flags) +{ + spin_lock_irqsave(lock, flags); + if (atomic_dec_and_test(cnt)) { + return (1); + } + spin_unlock_irqrestore(lock, flags); + return (0); +} + #endif /* _LINUX_SPINLOCK_H_ */ |