summaryrefslogtreecommitdiff
path: root/sys/lockdoc
diff options
context:
space:
mode:
Diffstat (limited to 'sys/lockdoc')
-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;