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>
This commit is contained in:
@@ -85,6 +85,10 @@ static int kgdb_use_con;
|
|||||||
bool dbg_is_early = true;
|
bool dbg_is_early = true;
|
||||||
/* Next cpu to become the master debug core */
|
/* Next cpu to become the master debug core */
|
||||||
int dbg_switch_cpu;
|
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 */
|
/* Use kdb or gdbserver mode */
|
||||||
int dbg_kdb_mode = 1;
|
int dbg_kdb_mode = 1;
|
||||||
@@ -99,6 +103,8 @@ early_param("kgdbcon", opt_kgdb_con);
|
|||||||
|
|
||||||
module_param(kgdb_use_con, int, 0644);
|
module_param(kgdb_use_con, int, 0644);
|
||||||
module_param(kgdbreboot, 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
|
* Holds information about breakpoints in a kernel. These breakpoints are
|
||||||
@@ -673,6 +679,9 @@ kgdb_handle_exception(int evector, int signo, int ecode, struct pt_regs *regs)
|
|||||||
struct kgdb_state kgdb_var;
|
struct kgdb_state kgdb_var;
|
||||||
struct kgdb_state *ks = &kgdb_var;
|
struct kgdb_state *ks = &kgdb_var;
|
||||||
|
|
||||||
|
if (unlikely(signo != SIGTRAP && !break_on_exception))
|
||||||
|
return 1;
|
||||||
|
|
||||||
ks->cpu = raw_smp_processor_id();
|
ks->cpu = raw_smp_processor_id();
|
||||||
ks->ex_vector = evector;
|
ks->ex_vector = evector;
|
||||||
ks->signo = signo;
|
ks->signo = signo;
|
||||||
@@ -759,6 +768,9 @@ static int kgdb_panic_event(struct notifier_block *self,
|
|||||||
unsigned long val,
|
unsigned long val,
|
||||||
void *data)
|
void *data)
|
||||||
{
|
{
|
||||||
|
if (!break_on_panic)
|
||||||
|
return NOTIFY_DONE;
|
||||||
|
|
||||||
if (dbg_kdb_mode)
|
if (dbg_kdb_mode)
|
||||||
kdb_printf("PANIC: %s\n", (char *)data);
|
kdb_printf("PANIC: %s\n", (char *)data);
|
||||||
kgdb_breakpoint();
|
kgdb_breakpoint();
|
||||||
|
|||||||
Reference in New Issue
Block a user