diff options
author | hselasky <hselasky@FreeBSD.org> | 2018-02-25 10:19:44 +0000 |
---|---|---|
committer | hselasky <hselasky@FreeBSD.org> | 2018-02-25 10:19:44 +0000 |
commit | c1c8be2caba87b30fb7698b3b1072e10334cbf19 (patch) | |
tree | d41878eb8768a91be51563aa3ac5981f2119af52 | |
parent | 181e24e09d8534a506b3ec5c243ede6cebab03ef (diff) | |
download | FreeBSD-src-c1c8be2caba87b30fb7698b3b1072e10334cbf19.zip FreeBSD-src-c1c8be2caba87b30fb7698b3b1072e10334cbf19.tar.gz |
MFC r329378:
Implement mutex_trylock_recursive() in the LinuxKPI.
Submitted by: Johannes Lundberg <johalun0@gmail.com>
Sponsored by: Mellanox Technologies
-rw-r--r-- | sys/compat/linuxkpi/common/include/linux/mutex.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/sys/compat/linuxkpi/common/include/linux/mutex.h b/sys/compat/linuxkpi/common/include/linux/mutex.h index 36911b1..8adbba6 100644 --- a/sys/compat/linuxkpi/common/include/linux/mutex.h +++ b/sys/compat/linuxkpi/common/include/linux/mutex.h @@ -77,6 +77,21 @@ typedef struct mutex { !!sx_try_xlock(&(_m)->sx); \ }) +enum mutex_trylock_recursive_enum { + MUTEX_TRYLOCK_FAILED = 0, + MUTEX_TRYLOCK_SUCCESS = 1, + MUTEX_TRYLOCK_RECURSIVE = 2, +}; + +static inline __must_check enum mutex_trylock_recursive_enum +mutex_trylock_recursive(struct mutex *lock) +{ + if (unlikely(sx_xholder(&lock->sx) == curthread)) + return (MUTEX_TRYLOCK_RECURSIVE); + + return (mutex_trylock(lock)); +} + #define mutex_init(_m) \ linux_mutex_init(_m, mutex_name(#_m), SX_NOWITNESS) |