1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
#include <arch/x86/include/cpufunc.h>
#include <arch/i386/include/pio.h>
#include <sys/lwp.h>
#include <sys/lockdoc.h>
#ifdef LOCKDOC
void lockdoc_send_current_task_addr(void) {
u_long flags;
flags = x86_read_flags();
_x86_disable_intr();
memset(&la_buffer,0,sizeof(la_buffer));
la_buffer.action = LOCKDOC_CURRENT_TASK;
la_buffer.ptr = (uint32_t)((uint32_t)curcpu()->ci_self + offsetof(struct cpu_info, ci_curlwp));
LOCKDOC_PING();
x86_write_flags(flags);
}
void lockdoc_send_lwp_flag_offset(void) {
u_long flags;
flags = x86_read_flags();
_x86_disable_intr();
memset(&la_buffer,0,sizeof(la_buffer));
la_buffer.action = LOCKDOC_LWP_FLAG_OFFSET;
la_buffer.ptr = offsetof(struct lwp, l_pflag);
LOCKDOC_PING();
x86_write_flags(flags);
}
void lockdoc_send_pid_offset(void) {
u_long flags;
flags = x86_read_flags();
_x86_disable_intr();
memset(&la_buffer,0,sizeof(la_buffer));
la_buffer.action = LOCKDOC_PID_OFFSET;
la_buffer.ptr = offsetof(struct lwp, l_lid);
LOCKDOC_PING();
x86_write_flags(flags);
}
void lockdoc_send_kernel_version(void) {
u_long flags;
flags = x86_read_flags();
_x86_disable_intr();
memset(&la_buffer,0,sizeof(la_buffer));
snprintf((char*)&la_buffer.type, LOCKDOC_LOG_CHAR_BUFFER_LEN,
"%d-lockdoc-%s", __NetBSD_Version__, LOCKDOC_VERSION);
la_buffer.action = LOCKDOC_KERNEL_VERSION;
LOCKDOC_PING();
x86_write_flags(flags);
}
#endif
|