aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/kern_rwlock.c
diff options
context:
space:
mode:
authorMateusz Guzik <mjg@FreeBSD.org>2017-11-25 20:22:51 +0000
committerMateusz Guzik <mjg@FreeBSD.org>2017-11-25 20:22:51 +0000
commitc1e1a7ec30e1dd504755ec33a6ea3c3f2c13b588 (patch)
tree4ea0e98897a4ab1497ab51a762b1eac31c1bf5c3 /sys/kern/kern_rwlock.c
parentcec174732271804b6ccf31c92e610d41ba2179b8 (diff)
downloadsrc-c1e1a7ec30e1dd504755ec33a6ea3c3f2c13b588.tar.gz
src-c1e1a7ec30e1dd504755ec33a6ea3c3f2c13b588.zip
rwlock: add __rw_try_{r,w}lock_int
Notes
Notes: svn path=/head/; revision=326197
Diffstat (limited to 'sys/kern/kern_rwlock.c')
-rw-r--r--sys/kern/kern_rwlock.c28
1 files changed, 20 insertions, 8 deletions
diff --git a/sys/kern/kern_rwlock.c b/sys/kern/kern_rwlock.c
index 3c2cab87b706..acffdb8a22a6 100644
--- a/sys/kern/kern_rwlock.c
+++ b/sys/kern/kern_rwlock.c
@@ -284,9 +284,8 @@ _rw_wlock_cookie(volatile uintptr_t *c, const char *file, int line)
}
int
-__rw_try_wlock(volatile uintptr_t *c, const char *file, int line)
+__rw_try_wlock_int(struct rwlock *rw LOCK_FILE_LINE_ARG_DEF)
{
- struct rwlock *rw;
struct thread *td;
uintptr_t tid, v;
int rval;
@@ -297,8 +296,6 @@ __rw_try_wlock(volatile uintptr_t *c, const char *file, int line)
if (SCHEDULER_STOPPED_TD(td))
return (1);
- rw = rwlock2rw(c);
-
KASSERT(kdb_active != 0 || !TD_IS_IDLETHREAD(td),
("rw_try_wlock() by idle thread %p on rwlock %s @ %s:%d",
curthread, rw->lock_object.lo_name, file, line));
@@ -334,6 +331,15 @@ __rw_try_wlock(volatile uintptr_t *c, const char *file, int line)
return (rval);
}
+int
+__rw_try_wlock(volatile uintptr_t *c, const char *file, int line)
+{
+ struct rwlock *rw;
+
+ rw = rwlock2rw(c);
+ return (__rw_try_wlock_int(rw, LOCK_FILE_LINE_ARG));
+}
+
void
_rw_wunlock_cookie(volatile uintptr_t *c, const char *file, int line)
{
@@ -656,16 +662,13 @@ __rw_rlock(volatile uintptr_t *c, const char *file, int line)
}
int
-__rw_try_rlock(volatile uintptr_t *c, const char *file, int line)
+__rw_try_rlock_int(struct rwlock *rw LOCK_FILE_LINE_ARG_DEF)
{
- struct rwlock *rw;
uintptr_t x;
if (SCHEDULER_STOPPED())
return (1);
- rw = rwlock2rw(c);
-
KASSERT(kdb_active != 0 || !TD_IS_IDLETHREAD(curthread),
("rw_try_rlock() by idle thread %p on rwlock %s @ %s:%d",
curthread, rw->lock_object.lo_name, file, line));
@@ -692,6 +695,15 @@ __rw_try_rlock(volatile uintptr_t *c, const char *file, int line)
return (0);
}
+int
+__rw_try_rlock(volatile uintptr_t *c, const char *file, int line)
+{
+ struct rwlock *rw;
+
+ rw = rwlock2rw(c);
+ return (__rw_try_rlock_int(rw, LOCK_FILE_LINE_ARG));
+}
+
static bool __always_inline
__rw_runlock_try(struct rwlock *rw, struct thread *td, uintptr_t *vp)
{