mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
debug_core: disable hw_breakpoints on all cores in kgdb_cpu_enter()
The slave cpus do not have the hw breakpoints disabled upon entry to the debug_core and as a result could cause unrecoverable recursive faults on badly placed breakpoints, or get out of sync with the arch specific hw breakpoint operations. This patch addresses the problem by invoking kgdb_disable_hw_debug() earlier in kgdb_enter_cpu for each cpu that enters the debug core. The hw breakpoint dis/enable flow should be: master_debug_cpu slave_debug_cpu \ / kgdb_cpu_enter | kgdb_disable_hw_debug --> uninstall pre-enabled hw_breakpoint | do add/rm dis/enable operates to hw_breakpoints on master_debug_cpu.. | correct_hw_break --> correct/install the enabled hw_breakpoint | leave_kgdb Signed-off-by: Dongdong Deng <dongdong.deng@windriver.com> Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
This commit is contained in:
parent
91b152aa85
commit
c1bb9a9c19
1 changed files with 5 additions and 2 deletions
|
@ -485,6 +485,9 @@ static int kgdb_cpu_enter(struct kgdb_state *ks, struct pt_regs *regs)
|
||||||
int error;
|
int error;
|
||||||
int i, cpu;
|
int i, cpu;
|
||||||
int trace_on = 0;
|
int trace_on = 0;
|
||||||
|
|
||||||
|
kgdb_disable_hw_debug(ks->linux_regs);
|
||||||
|
|
||||||
acquirelock:
|
acquirelock:
|
||||||
/*
|
/*
|
||||||
* Interrupts will be restored by the 'trap return' code, except when
|
* Interrupts will be restored by the 'trap return' code, except when
|
||||||
|
@ -569,8 +572,6 @@ return_normal:
|
||||||
if (dbg_io_ops->pre_exception)
|
if (dbg_io_ops->pre_exception)
|
||||||
dbg_io_ops->pre_exception();
|
dbg_io_ops->pre_exception();
|
||||||
|
|
||||||
kgdb_disable_hw_debug(ks->linux_regs);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get the passive CPU lock which will hold all the non-primary
|
* Get the passive CPU lock which will hold all the non-primary
|
||||||
* CPU in a spin state while the debugger is active
|
* CPU in a spin state while the debugger is active
|
||||||
|
@ -661,6 +662,8 @@ kgdb_restore:
|
||||||
else
|
else
|
||||||
kgdb_sstep_pid = 0;
|
kgdb_sstep_pid = 0;
|
||||||
}
|
}
|
||||||
|
if (arch_kgdb_ops.correct_hw_break)
|
||||||
|
arch_kgdb_ops.correct_hw_break();
|
||||||
if (trace_on)
|
if (trace_on)
|
||||||
tracing_on();
|
tracing_on();
|
||||||
/* Free kgdb_active */
|
/* Free kgdb_active */
|
||||||
|
|
Loading…
Reference in a new issue