summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhselasky <hselasky@FreeBSD.org>2018-02-25 10:19:44 +0000
committerhselasky <hselasky@FreeBSD.org>2018-02-25 10:19:44 +0000
commitc1c8be2caba87b30fb7698b3b1072e10334cbf19 (patch)
treed41878eb8768a91be51563aa3ac5981f2119af52
parent181e24e09d8534a506b3ec5c243ede6cebab03ef (diff)
downloadFreeBSD-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.h15
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)
OpenPOWER on IntegriCloud