aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/debug/debug_core.c4
-rw-r--r--kernel/debug/kdb/kdb_bt.c11
-rw-r--r--kernel/debug/kdb/kdb_debugger.c7
3 files changed, 14 insertions, 8 deletions
diff --git a/kernel/debug/debug_core.c b/kernel/debug/debug_core.c
index 1fb8b239e567..5cc608de6883 100644
--- a/kernel/debug/debug_core.c
+++ b/kernel/debug/debug_core.c
@@ -592,6 +592,8 @@ return_normal:
592 arch_kgdb_ops.correct_hw_break(); 592 arch_kgdb_ops.correct_hw_break();
593 if (trace_on) 593 if (trace_on)
594 tracing_on(); 594 tracing_on();
595 kgdb_info[cpu].debuggerinfo = NULL;
596 kgdb_info[cpu].task = NULL;
595 kgdb_info[cpu].exception_state &= 597 kgdb_info[cpu].exception_state &=
596 ~(DCPU_WANT_MASTER | DCPU_IS_SLAVE); 598 ~(DCPU_WANT_MASTER | DCPU_IS_SLAVE);
597 kgdb_info[cpu].enter_kgdb--; 599 kgdb_info[cpu].enter_kgdb--;
@@ -724,6 +726,8 @@ kgdb_restore:
724 if (trace_on) 726 if (trace_on)
725 tracing_on(); 727 tracing_on();
726 728
729 kgdb_info[cpu].debuggerinfo = NULL;
730 kgdb_info[cpu].task = NULL;
727 kgdb_info[cpu].exception_state &= 731 kgdb_info[cpu].exception_state &=
728 ~(DCPU_WANT_MASTER | DCPU_IS_SLAVE); 732 ~(DCPU_WANT_MASTER | DCPU_IS_SLAVE);
729 kgdb_info[cpu].enter_kgdb--; 733 kgdb_info[cpu].enter_kgdb--;
diff --git a/kernel/debug/kdb/kdb_bt.c b/kernel/debug/kdb/kdb_bt.c
index 7921ae4fca8d..7e2379aa0a1e 100644
--- a/kernel/debug/kdb/kdb_bt.c
+++ b/kernel/debug/kdb/kdb_bt.c
@@ -186,7 +186,16 @@ kdb_bt(int argc, const char **argv)
186 kdb_printf("btc: cpu status: "); 186 kdb_printf("btc: cpu status: ");
187 kdb_parse("cpu\n"); 187 kdb_parse("cpu\n");
188 for_each_online_cpu(cpu) { 188 for_each_online_cpu(cpu) {
189 sprintf(buf, "btt 0x%px\n", KDB_TSK(cpu)); 189 void *kdb_tsk = KDB_TSK(cpu);
190
191 /* If a CPU failed to round up we could be here */
192 if (!kdb_tsk) {
193 kdb_printf("WARNING: no task for cpu %ld\n",
194 cpu);
195 continue;
196 }
197
198 sprintf(buf, "btt 0x%px\n", kdb_tsk);
190 kdb_parse(buf); 199 kdb_parse(buf);
191 touch_nmi_watchdog(); 200 touch_nmi_watchdog();
192 } 201 }
diff --git a/kernel/debug/kdb/kdb_debugger.c b/kernel/debug/kdb/kdb_debugger.c
index 15e1a7af5dd0..53a0df6e4d92 100644
--- a/kernel/debug/kdb/kdb_debugger.c
+++ b/kernel/debug/kdb/kdb_debugger.c
@@ -118,13 +118,6 @@ int kdb_stub(struct kgdb_state *ks)
118 kdb_bp_remove(); 118 kdb_bp_remove();
119 KDB_STATE_CLEAR(DOING_SS); 119 KDB_STATE_CLEAR(DOING_SS);
120 KDB_STATE_SET(PAGER); 120 KDB_STATE_SET(PAGER);
121 /* zero out any offline cpu data */
122 for_each_present_cpu(i) {
123 if (!cpu_online(i)) {
124 kgdb_info[i].debuggerinfo = NULL;
125 kgdb_info[i].task = NULL;
126 }
127 }
128 if (ks->err_code == DIE_OOPS || reason == KDB_REASON_OOPS) { 121 if (ks->err_code == DIE_OOPS || reason == KDB_REASON_OOPS) {
129 ks->pass_exception = 1; 122 ks->pass_exception = 1;
130 KDB_FLAG_SET(CATASTROPHIC); 123 KDB_FLAG_SET(CATASTROPHIC);