diff options
| -rw-r--r-- | TODO | 1 | ||||
| -rw-r--r-- | sys/Makefile | 2 | ||||
| -rw-r--r-- | sys/arch/i386/conf/LOCKDOC | 2 | ||||
| -rw-r--r-- | sys/arch/i386/conf/files.i386 | 2 | ||||
| -rw-r--r-- | sys/arch/x86/include/cpufunc.h | 25 | ||||
| -rw-r--r-- | sys/lockdoc/log.c | 19 | ||||
| -rw-r--r-- | sys/sys/lockdoc.h | 1 |
7 files changed, 49 insertions, 3 deletions
@@ -1,3 +1,4 @@ +- Separate LOCKDEBUG from LOCKDOC kernel opt - SMP - IRQ - Implement all lock types diff --git a/sys/Makefile b/sys/Makefile index e6ffd9d0b32..fdaf70194d7 100644 --- a/sys/Makefile +++ b/sys/Makefile @@ -2,7 +2,7 @@ .include <bsd.own.mk> -SUBDIR= altq arch compat dev fs miscfs \ +SUBDIR= altq arch compat dev fs lockdoc miscfs \ net net80211 netatalk netbt netcan netipsec netinet netinet6 \ netmpls \ nfs opencrypto sys ufs uvm diff --git a/sys/arch/i386/conf/LOCKDOC b/sys/arch/i386/conf/LOCKDOC index 955fa29fec2..d7d2d0f7efe 100644 --- a/sys/arch/i386/conf/LOCKDOC +++ b/sys/arch/i386/conf/LOCKDOC @@ -22,7 +22,7 @@ include "arch/i386/conf/std.i386" options INCLUDE_CONFIG_FILE # embed config file in kernel binary -#ident "GENERIC-$Revision: 1.1208.2.5 $" +#ident "LOCKDOC-$Revision: 1.1208.2.5 $" maxusers 64 # estimated number of users diff --git a/sys/arch/i386/conf/files.i386 b/sys/arch/i386/conf/files.i386 index 062d0873d76..9bc8094f250 100644 --- a/sys/arch/i386/conf/files.i386 +++ b/sys/arch/i386/conf/files.i386 @@ -46,7 +46,7 @@ defparam opt_beep.h BEEP_ONHALT_PITCH=1500 defparam opt_beep.h BEEP_ONHALT_PERIOD=250 -file lockdoc/log.c lockdebug +file lockdoc/log.c lockdebug # Multiboot support defflag opt_multiboot.h MULTIBOOT diff --git a/sys/arch/x86/include/cpufunc.h b/sys/arch/x86/include/cpufunc.h index 524b8db6d86..8b216c21fcf 100644 --- a/sys/arch/x86/include/cpufunc.h +++ b/sys/arch/x86/include/cpufunc.h @@ -45,6 +45,7 @@ #ifdef _KERNEL #if defined(_KERNEL_OPT) #include "opt_xen.h" +#include "opt_lockdebug.h" #endif static inline void @@ -567,17 +568,41 @@ xrstor64(const void *addr, uint64_t mask) void x86_disable_intr(void); void x86_enable_intr(void); #else + +#ifdef LOCKDEBUG +#define x86_disable_intr() __x86_disable_intr(__FILE__, __LINE__, __func__) +void __x86_disable_intr(const char *file, int line, const char *func); + +static __inline void lockdoc_x86_disable_intr(void) +{ + __asm volatile ("cli" ::: "memory"); +} + +#else static inline void x86_disable_intr(void) { __asm volatile ("cli" ::: "memory"); } +#endif /* LOCKDEBUG */ +#ifdef LOCKDEBUG +#define x86_enable_intr() __x86_enable_intr(__FILE__, __LINE__, __func__) +void __x86_enable_intr(const char *file, int line, const char *func); + +static __inline void lockdoc_x86_enable_intr(void) +{ + __asm volatile ("sti" ::: "memory"); +} + +#else static inline void x86_enable_intr(void) { __asm volatile ("sti" ::: "memory"); } +#endif /* LOCKDEBUG */ + #endif /* XENPV */ /* Use read_psl, write_psl when saving and restoring interrupt state. */ diff --git a/sys/lockdoc/log.c b/sys/lockdoc/log.c index e2d49c76090..91d2a8d02cb 100644 --- a/sys/lockdoc/log.c +++ b/sys/lockdoc/log.c @@ -1,3 +1,22 @@ +#include <arch/x86/include/cpufunc.h> #include <sys/lockdoc.h> +#include "opt_lockdebug.h" + +#ifdef LOCKDEBUG + struct log_action la_buffer; + +void __x86_disable_intr(const char *file, int line, const char *func){ + // TODO Actually log things + lockdoc_x86_disable_intr(); + __asm __volatile("cli" : : : "memory"); +} + +void __x86_enable_intr(const char *file, int line, const char *func){ + // TODO Actually log things + lockdoc_x86_enable_intr(); + __asm __volatile ("sti" ::: "memory"); +} + +#endif /* LOCKDEBUG */
\ No newline at end of file diff --git a/sys/sys/lockdoc.h b/sys/sys/lockdoc.h index 45c1aa7faeb..e6b666540d5 100644 --- a/sys/sys/lockdoc.h +++ b/sys/sys/lockdoc.h @@ -2,6 +2,7 @@ #define __LOCKDOC_H__ #include <sys/types.h> +#include <sys/systm.h> #include <sys/lockdoc_event.h> #define DELIMITER "#" |
