diff options
| author | Colin Cross <ccross@android.com> | 2012-05-17 15:24:16 -0700 | 
|---|---|---|
| committer | Arve Hjønnevåg <arve@android.com> | 2013-07-01 13:40:46 -0700 | 
| commit | 86b24e0e87296330759ddf57a20eb6adeea0ded8 (patch) | |
| tree | a131e7f39473b9210ede2d56a8ec5dfbd97e6ec1 /kernel | |
| parent | 013c2275512f32470749c41ceba53a86ce59a368 (diff) | |
| download | olio-linux-3.10-86b24e0e87296330759ddf57a20eb6adeea0ded8.tar.xz olio-linux-3.10-86b24e0e87296330759ddf57a20eb6adeea0ded8.zip | |
debug: add parameters to prevent entering debug mode on errors
On non-developer devices kgdb prevents CONFIG_PANIC_TIMEOUT from
rebooting the device after a panic. Add module parameters
debug_core.break_on_exception and debug_core.break_on_panic to
allow skipping debug on panics and exceptions respectively.  Both
default to true to preserve existing behavior.
Change-Id: I75dce7263e96cee069a9750920cce83dc6f98e8c
Signed-off-by: Colin Cross <ccross@android.com>
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/debug/debug_core.c | 12 | 
1 files changed, 12 insertions, 0 deletions
| diff --git a/kernel/debug/debug_core.c b/kernel/debug/debug_core.c index 0506d447aed..2d4438b14b4 100644 --- a/kernel/debug/debug_core.c +++ b/kernel/debug/debug_core.c @@ -86,6 +86,10 @@ static int kgdb_use_con;  bool dbg_is_early = true;  /* Next cpu to become the master debug core */  int dbg_switch_cpu; +/* Flag for entering kdb when a panic occurs */ +static bool break_on_panic = true; +/* Flag for entering kdb when an exception occurs */ +static bool break_on_exception = true;  /* Use kdb or gdbserver mode */  int dbg_kdb_mode = 1; @@ -100,6 +104,8 @@ early_param("kgdbcon", opt_kgdb_con);  module_param(kgdb_use_con, int, 0644);  module_param(kgdbreboot, int, 0644); +module_param(break_on_panic, bool, 0644); +module_param(break_on_exception, bool, 0644);  /*   * Holds information about breakpoints in a kernel. These breakpoints are @@ -678,6 +684,9 @@ kgdb_handle_exception(int evector, int signo, int ecode, struct pt_regs *regs)  	if (arch_kgdb_ops.enable_nmi)  		arch_kgdb_ops.enable_nmi(0); +	if (unlikely(signo != SIGTRAP && !break_on_exception)) +		return 1; +  	ks->cpu			= raw_smp_processor_id();  	ks->ex_vector		= evector;  	ks->signo		= signo; @@ -784,6 +793,9 @@ static int kgdb_panic_event(struct notifier_block *self,  			    unsigned long val,  			    void *data)  { +	if (!break_on_panic) +		return NOTIFY_DONE; +  	if (dbg_kdb_mode)  		kdb_printf("PANIC: %s\n", (char *)data);  	kgdb_breakpoint(); |