summaryrefslogtreecommitdiff
path: root/sys/lockdoc/log.c
diff options
context:
space:
mode:
authorMerlin Scholz <merlin@scholz.ruhr>2023-03-16 23:26:30 +0100
committerMerlin Scholz <merlin@scholz.ruhr>2023-03-16 23:26:30 +0100
commit776ee58682b55a490930b73105b3596dde1f16fa (patch)
treeb41d6963b6f2d4f07bdcf5d478bcbc652c28cda0 /sys/lockdoc/log.c
parentbf1ce4ce265b9f38a71f0bca82d8f0e8c055233a (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.c45
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;