diff options
| author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2015-08-17 16:23:35 +0200 |
|---|---|---|
| committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2015-08-17 16:23:35 +0200 |
| commit | 45d879095b37af88af8c1b18ae28b4a1a17c48bf (patch) | |
| tree | ebe704426bc1a734c90bbf345919e1bf715d3795 /debian/patches/fix-locking0001-kern-disable-the-simple-lock-checks-while-debugging.patch | |
| parent | 614bdbf121888c390a4e9b4291d5e30a4932bf75 (diff) | |
add patch series
Diffstat (limited to 'debian/patches/fix-locking0001-kern-disable-the-simple-lock-checks-while-debugging.patch')
| -rw-r--r-- | debian/patches/fix-locking0001-kern-disable-the-simple-lock-checks-while-debugging.patch | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/debian/patches/fix-locking0001-kern-disable-the-simple-lock-checks-while-debugging.patch b/debian/patches/fix-locking0001-kern-disable-the-simple-lock-checks-while-debugging.patch new file mode 100644 index 0000000..b8e22e0 --- /dev/null +++ b/debian/patches/fix-locking0001-kern-disable-the-simple-lock-checks-while-debugging.patch @@ -0,0 +1,107 @@ +From bdc9b8583e6336bb3a44a80f10bac8b7b369719c Mon Sep 17 00:00:00 2001 +From: Justus Winter <4winter@informatik.uni-hamburg.de> +Date: Sat, 15 Aug 2015 16:43:24 +0200 +Subject: [PATCH gnumach 1/4] kern: disable the simple lock checks while + debugging + +* kern/lock.c (do_check_simple_locks): New variable. +(check_simple_locks): Make check conditional. +(check_simple_locks_{en,dis}able): New functions. +* kern/lock.h (check_simple_locks_{en,dis}able): New declarations. +* ddb/db_trap.c (db_task_trap): Disable simple lock checks. +--- + ddb/db_trap.c | 4 ++++ + kern/lock.c | 14 +++++++++++++- + kern/lock.h | 6 ++++++ + 3 files changed, 23 insertions(+), 1 deletion(-) + +diff --git a/ddb/db_trap.c b/ddb/db_trap.c +index 7e10731..cbb6bde 100644 +--- a/ddb/db_trap.c ++++ b/ddb/db_trap.c +@@ -45,6 +45,7 @@ + #include <ddb/db_trap.h> + #include <ddb/db_run.h> + #include <machine/db_interface.h> ++#include <kern/lock.h> + + + extern jmp_buf_t *db_recover; +@@ -65,6 +66,8 @@ db_task_trap( + boolean_t watchpt; + task_t task_space; + ++ check_simple_locks_disable(); ++ + task_space = db_target_space(current_thread(), user_space); + bkpt = IS_BREAKPOINT_TRAP(type, code); + watchpt = IS_WATCHPOINT_TRAP(type, code); +@@ -97,6 +100,7 @@ db_task_trap( + db_command_loop(); + } + ++ check_simple_locks_enable(); + db_restart_at_pc(watchpt, task_space); + } + +diff --git a/kern/lock.c b/kern/lock.c +index 3c74fec..d894b06 100644 +--- a/kern/lock.c ++++ b/kern/lock.c +@@ -136,9 +136,21 @@ struct simple_locks_info { + void *ra; + } simple_locks_info[NSLINFO]; + ++int do_check_simple_locks = 1; ++ + void check_simple_locks(void) + { +- assert(simple_locks_taken == 0); ++ assert(! do_check_simple_locks || simple_locks_taken == 0); ++} ++ ++void check_simple_locks_enable(void) ++{ ++ do_check_simple_locks = 1; ++} ++ ++void check_simple_locks_disable(void) ++{ ++ do_check_simple_locks = 0; + } + + /* Need simple lock sanity checking code if simple locks are being +diff --git a/kern/lock.h b/kern/lock.h +index 435ee1d..0eba0ad 100644 +--- a/kern/lock.h ++++ b/kern/lock.h +@@ -81,6 +81,8 @@ class simple_lock_data_t name; + #define simple_lock_taken(lock) (simple_lock_assert(lock), \ + 1) /* always succeeds */ + #define check_simple_locks() ++#define check_simple_locks_enable() ++#define check_simple_locks_disable() + + #else /* NCPUS > 1 */ + /* +@@ -97,6 +99,8 @@ extern boolean_t simple_lock_try(simple_lock_t); + (lock)->lock_data) + + extern void check_simple_locks(void); ++extern void check_simple_locks_enable(void); ++extern void check_simple_locks_disable(void); + + #endif /* NCPUS > 1 */ + +@@ -121,6 +125,8 @@ class struct simple_lock_data_empty name; + #define simple_lock_taken(l) (simple_lock_assert(l), \ + 1) /* always succeeds */ + #define check_simple_locks() ++#define check_simple_locks_enable() ++#define check_simple_locks_disable() + #define simple_lock_pause() + + #endif /* MACH_SLOCKS */ +-- +2.1.4 + |
