diff options
Diffstat (limited to 'sys/lockdoc/log.c')
| -rw-r--r-- | sys/lockdoc/log.c | 86 |
1 files changed, 46 insertions, 40 deletions
diff --git a/sys/lockdoc/log.c b/sys/lockdoc/log.c index b8207e54d46..7454713a353 100644 --- a/sys/lockdoc/log.c +++ b/sys/lockdoc/log.c @@ -12,28 +12,28 @@ struct log_action la_buffer; // Mutexes are always considered write locks inline void __mutex_enter(kmutex_t * lock, const char* file, int line, const char* func) { _mutex_enter(lock); - lockdoc_log_lock(P_WRITE, lock, file, line, func, LOCK_TYPE, LOCK_NONE); + lockdoc_log_lock(P_WRITE, lock, file, line, func, LOCK_TYPE, 0); } inline void __mutex_exit(kmutex_t * lock, const char* file, int line, const char* func) { - lockdoc_log_lock(V_WRITE, lock, file, line, func, LOCK_TYPE, LOCK_NONE); + lockdoc_log_lock(V_WRITE, lock, file, line, func, LOCK_TYPE, 0); _mutex_exit(lock); } inline void __mutex_spin_enter(kmutex_t * lock, const char* file, int line, const char* func) { _mutex_spin_enter(lock); - lockdoc_log_lock(P_WRITE, lock, file, line, func, LOCK_TYPE, LOCK_NONE); + lockdoc_log_lock(P_WRITE, lock, file, line, func, LOCK_TYPE, 0); } inline void __mutex_spin_exit(kmutex_t * lock, const char* file, int line, const char* func) { - lockdoc_log_lock(V_WRITE, lock, file, line, func, LOCK_TYPE, LOCK_NONE); + lockdoc_log_lock(V_WRITE, lock, file, line, func, LOCK_TYPE, 0); _mutex_spin_exit(lock); } inline int __mutex_tryenter(kmutex_t * lock, const char* file, int line, const char* func) { int enter = _mutex_tryenter(lock); if(enter != 0) { - lockdoc_log_lock(P_WRITE, lock, file, line, func, LOCK_TYPE, LOCK_NONE); + lockdoc_log_lock(P_WRITE, lock, file, line, func, LOCK_TYPE, 0); } return enter; } @@ -44,46 +44,42 @@ inline int __mutex_tryenter(kmutex_t * lock, const char* file, int line, const c inline int __rw_tryupgrade(krwlock_t * lock, const char* file, int line, const char* func) { int upgrade = _rw_tryupgrade(lock); if(upgrade != 0) { - lockdoc_log_lock(V_READ, lock, file, line, func, LOCK_TYPE, LOCK_NONE); - lockdoc_log_lock(P_WRITE, lock, file, line, func, LOCK_TYPE, LOCK_NONE); + lockdoc_log_lock(V_READ, lock, file, line, func, LOCK_TYPE, 0); + lockdoc_log_lock(P_WRITE, lock, file, line, func, LOCK_TYPE, 0); } return upgrade; } inline void __rw_downgrade(krwlock_t * lock, const char* file, int line, const char* func) { _rw_downgrade(lock); - lockdoc_log_lock(V_WRITE, lock, file, line, func, LOCK_TYPE, LOCK_NONE); - lockdoc_log_lock(P_READ, lock, file, line, func, LOCK_TYPE, LOCK_NONE); + lockdoc_log_lock(V_WRITE, lock, file, line, func, LOCK_TYPE, 0); + lockdoc_log_lock(P_READ, lock, file, line, func, LOCK_TYPE, 0); } inline void __rw_enter(krwlock_t * lock, const krw_t type, const char* file, int line, const char* func) { _rw_enter(lock, type); if(type == RW_READER) - lockdoc_log_lock(P_READ, lock, file, line, func, LOCK_TYPE, LOCK_NONE); + lockdoc_log_lock(P_READ, lock, file, line, func, LOCK_TYPE, 0); else - lockdoc_log_lock(P_WRITE, lock, file, line, func, LOCK_TYPE, LOCK_NONE); + lockdoc_log_lock(P_WRITE, lock, file, line, func, LOCK_TYPE, 0); } inline int __rw_tryenter(krwlock_t * lock, const krw_t type, const char* file, int line, const char* func) { int enter = _rw_tryenter(lock, type); if(enter != 0) { if(type == RW_READER) - lockdoc_log_lock(P_READ, lock, file, line, func, LOCK_TYPE, LOCK_NONE); + lockdoc_log_lock(P_READ, lock, file, line, func, LOCK_TYPE, 0); else - lockdoc_log_lock(P_WRITE, lock, file, line, func, LOCK_TYPE, LOCK_NONE); + lockdoc_log_lock(P_WRITE, lock, file, line, func, LOCK_TYPE, 0); } return enter; } inline void __rw_exit(krwlock_t * lock, const char* file, int line, const char* func) { - /* - * See sys/sys/rwlock.h - * We cannot include this directly due to circular dependencies. - */ if(rw_lock_op(lock) == RW_WRITER) - lockdoc_log_lock(V_WRITE, lock, file, line, func, LOCK_TYPE, LOCK_NONE); + lockdoc_log_lock(V_WRITE, lock, file, line, func, LOCK_TYPE, 0); else - lockdoc_log_lock(V_READ, lock, file, line, func, LOCK_TYPE, LOCK_NONE); + lockdoc_log_lock(V_READ, lock, file, line, func, LOCK_TYPE, 0); _rw_exit(lock); } #undef LOCK_TYPE @@ -93,7 +89,7 @@ inline void __x86_disable_intr(const char* file, int line, const char* func) { eflags = x86_read_flags(); if (eflags & (1 << 9)){ // Check if interrupts were enabled in the first place - lockdoc_log_lock(P_WRITE, (void *)PSEUDOLOCK_ADDR_HARDIRQ, file, line, "dummy", "dummy", LOCK_NONE); + lockdoc_log_lock(P_WRITE, (void *)PSEUDOLOCK_ADDR_HARDIRQ, file, line, "dummy", "dummy", 0); } _x86_disable_intr(); @@ -104,43 +100,53 @@ inline void __x86_enable_intr(const char* file, int line, const char* func) { eflags = x86_read_flags(); if (!(eflags & (1 << 9))){ // Check if interrupts were disabled in the first place - lockdoc_log_lock(V_WRITE, (void *)PSEUDOLOCK_ADDR_HARDIRQ, file, line, "dummy", "dummy", LOCK_NONE); + lockdoc_log_lock(V_WRITE, (void *)PSEUDOLOCK_ADDR_HARDIRQ, file, line, "dummy", "dummy", 0); } _x86_enable_intr(); } -int32_t lockdoc_get_ctx(void) { - if (curlwp == NULL) { - return 0; - } else if (curlwp->l_pflag & LP_INTR) { - return -1; - } else { - return curlwp->l_lid; +void __trace_irqs_on(const char *file, int line) { + lockdoc_log_lock(V_WRITE, (void *)PSEUDOLOCK_ADDR_HARDIRQ, file, line, "dummy", "dummy", 0); +} + +void __trace_irqs_on_check(int tf_eflags, const char *file, int line) { + u_long cur_eflags; + cur_eflags = x86_read_flags(); + if ((tf_eflags & (1 << 9)) && !(cur_eflags & (1 << 9))) { + lockdoc_log_lock(V_WRITE, (void *)PSEUDOLOCK_ADDR_HARDIRQ, file, line, "dummy", "dummy", 0); } } -void __trace_irqs_on(struct trapframe *frame, const char *file, int line) { - lockdoc_log_lock(V_WRITE, (void *)PSEUDOLOCK_ADDR_HARDIRQ, file, line, "dummy", "dummy", LOCK_NONE); +/* Since we cannot use the C DEFINES in interrupt handling asm routines */ +void __trace_irqs_on_asm(void) { + __trace_irqs_on("asm", 0); } -void __trace_irqs_on_check(struct trapframe *frame, const char *file, int line) { +void __trace_irqs_off(const char *file, int line) { + lockdoc_log_lock(P_WRITE, (void *)PSEUDOLOCK_ADDR_HARDIRQ, file, line, "dummy", "dummy", 0); +} + +void __trace_irqs_off_check(int tf_eflags, const char *file, int line) { u_long cur_eflags; cur_eflags = x86_read_flags(); - if ((frame->tf_eflags & (1 << 9)) && !(cur_eflags & (1 << 9))) { - lockdoc_log_lock(V_WRITE, (void *)PSEUDOLOCK_ADDR_HARDIRQ, file, line, "dummy", "dummy", LOCK_NONE); + if ((tf_eflags & (1 << 9)) && !(cur_eflags & (1 << 9))) { + lockdoc_log_lock(P_WRITE, (void *)PSEUDOLOCK_ADDR_HARDIRQ, file, line, "dummy", "dummy", 0); } } -void __trace_irqs_off(struct trapframe *frame, const char *file, int line) { - lockdoc_log_lock(P_WRITE, (void *)PSEUDOLOCK_ADDR_HARDIRQ, file, line, "dummy", "dummy", frame->tf_trapno); +/* Since we cannot use the C DEFINES in interrupt handling asm routines */ +void __trace_irqs_off_asm(void) { + __trace_irqs_off("asm", 0); } -void __trace_irqs_off_check(struct trapframe *frame, const char *file, int line) { - u_long cur_eflags; - cur_eflags = x86_read_flags(); - if ((frame->tf_eflags & (1 << 9)) && !(cur_eflags & (1 << 9))) { - lockdoc_log_lock(P_WRITE, (void *)PSEUDOLOCK_ADDR_HARDIRQ, file, line, "dummy", "dummy", frame->tf_trapno); +int32_t lockdoc_get_ctx(void) { + if (curlwp == NULL) { + return 0; + } else if (curlwp->l_pflag & LP_INTR) { + return -1; + } else { + return curlwp->l_lid; } } |
