|
@@ -672,6 +672,10 @@ kgdb_handle_exception(int evector, int signo, int ecode, struct pt_regs *regs)
|
|
|
{
|
|
|
struct kgdb_state kgdb_var;
|
|
|
struct kgdb_state *ks = &kgdb_var;
|
|
|
+ int ret = 0;
|
|
|
+
|
|
|
+ if (arch_kgdb_ops.enable_nmi)
|
|
|
+ arch_kgdb_ops.enable_nmi(0);
|
|
|
|
|
|
ks->cpu = raw_smp_processor_id();
|
|
|
ks->ex_vector = evector;
|
|
@@ -681,11 +685,15 @@ kgdb_handle_exception(int evector, int signo, int ecode, struct pt_regs *regs)
|
|
|
ks->linux_regs = regs;
|
|
|
|
|
|
if (kgdb_reenter_check(ks))
|
|
|
- return 0; /* Ouch, double exception ! */
|
|
|
+ goto out; /* Ouch, double exception ! */
|
|
|
if (kgdb_info[ks->cpu].enter_kgdb != 0)
|
|
|
- return 0;
|
|
|
+ goto out;
|
|
|
|
|
|
- return kgdb_cpu_enter(ks, regs, DCPU_WANT_MASTER);
|
|
|
+ ret = kgdb_cpu_enter(ks, regs, DCPU_WANT_MASTER);
|
|
|
+out:
|
|
|
+ if (arch_kgdb_ops.enable_nmi)
|
|
|
+ arch_kgdb_ops.enable_nmi(1);
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
int kgdb_nmicallback(int cpu, void *regs)
|