summaryrefslogtreecommitdiff
path: root/debian/patches/fix-locking0001-kern-disable-the-simple-lock-checks-while-debugging.patch
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2015-08-17 16:23:35 +0200
committerJustus Winter <4winter@informatik.uni-hamburg.de>2015-08-17 16:23:35 +0200
commit45d879095b37af88af8c1b18ae28b4a1a17c48bf (patch)
treeebe704426bc1a734c90bbf345919e1bf715d3795 /debian/patches/fix-locking0001-kern-disable-the-simple-lock-checks-while-debugging.patch
parent614bdbf121888c390a4e9b4291d5e30a4932bf75 (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.patch107
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
+