diff options
author | Mateusz Guzik <mjg@FreeBSD.org> | 2017-11-25 20:22:51 +0000 |
---|---|---|
committer | Mateusz Guzik <mjg@FreeBSD.org> | 2017-11-25 20:22:51 +0000 |
commit | c1e1a7ec30e1dd504755ec33a6ea3c3f2c13b588 (patch) | |
tree | 4ea0e98897a4ab1497ab51a762b1eac31c1bf5c3 /sys/kern/kern_rwlock.c | |
parent | cec174732271804b6ccf31c92e610d41ba2179b8 (diff) | |
download | src-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.c | 28 |
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) { |