diff options
| author | Merlin Scholz <merlin@scholz.ruhr> | 2023-03-16 23:26:30 +0100 |
|---|---|---|
| committer | Merlin Scholz <merlin@scholz.ruhr> | 2023-03-16 23:26:30 +0100 |
| commit | 776ee58682b55a490930b73105b3596dde1f16fa (patch) | |
| tree | b41d6963b6f2d4f07bdcf5d478bcbc652c28cda0 /sys/lockdoc/log.c | |
| parent | bf1ce4ce265b9f38a71f0bca82d8f0e8c055233a (diff) | |
Implement logging for rwlock_enter() and rwlock_exit(), move from do-while macros to dedicated functions to allow for return values.
Diffstat (limited to 'sys/lockdoc/log.c')
| -rw-r--r-- | sys/lockdoc/log.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/sys/lockdoc/log.c b/sys/lockdoc/log.c index 56815b93d75..9269baf2e65 100644 --- a/sys/lockdoc/log.c +++ b/sys/lockdoc/log.c @@ -7,6 +7,51 @@ struct log_action la_buffer; +inline void __mutex_enter(kmutex_t * lock, const char* file, int line) { + lockdoc_log_lock(P_WRITE, lock, file, line, LOCK_NONE); + _mutex_enter(lock); +} + +inline void __mutex_exit(kmutex_t * lock, const char* file, int line) { + lockdoc_log_lock(V_WRITE, lock, file, line, LOCK_NONE); + _mutex_exit(lock); +} + +inline void __mutex_spin_enter(kmutex_t * lock, const char* file, int line) { + lockdoc_log_lock(P_WRITE, lock, file, line, LOCK_NONE); + _mutex_spin_enter(lock); +} + +inline void __mutex_spin_exit(kmutex_t * lock, const char* file, int line) { + lockdoc_log_lock(V_WRITE, lock, file, line, LOCK_NONE); + _mutex_spin_exit(lock); +} + +inline void __rw_enter(krwlock_t * lock, const krw_t type, const char* file, int line) { + if(type == RW_READER) + lockdoc_log_lock(P_READ, lock, file, line, LOCK_NONE); + else + lockdoc_log_lock(P_WRITE, lock, file, line, LOCK_NONE); + _rw_enter(lock, type); +} + +inline int __rw_tryenter(krwlock_t * lock, const krw_t type, const char* file, int line) { + // TODO Check against other implementations + return _rw_tryenter(lock, type); +} + +inline void __rw_exit(krwlock_t * lock, const char* file, int line) { + if((lock->rw_owner & 0x02UL) > 0) + lockdoc_log_lock(V_WRITE, lock, file, line, LOCK_NONE); + else + lockdoc_log_lock(V_READ, lock, file, line, LOCK_NONE); + _rw_exit(lock); +} + +/* + * Yet to be implemented: Check https://man.netbsd.org/locking.9 + */ + int32_t lockdoc_get_ctx(void) { if (curlwp == NULL) { return 0; |
