|
@@ -1084,6 +1084,20 @@ static void clear_all_debug_regs(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+#ifdef CONFIG_KGDB
|
|
|
+/*
|
|
|
+ * Restore debug regs if using kgdbwait and you have a kernel debugger
|
|
|
+ * connection established.
|
|
|
+ */
|
|
|
+static void dbg_restore_debug_regs(void)
|
|
|
+{
|
|
|
+ if (unlikely(kgdb_connected && arch_kgdb_ops.correct_hw_break))
|
|
|
+ arch_kgdb_ops.correct_hw_break();
|
|
|
+}
|
|
|
+#else /* ! CONFIG_KGDB */
|
|
|
+#define dbg_restore_debug_regs()
|
|
|
+#endif /* ! CONFIG_KGDB */
|
|
|
+
|
|
|
/*
|
|
|
* cpu_init() initializes state that is per-CPU. Some data is already
|
|
|
* initialized (naturally) in the bootstrap process, such as the GDT
|
|
@@ -1174,18 +1188,8 @@ void __cpuinit cpu_init(void)
|
|
|
load_TR_desc();
|
|
|
load_LDT(&init_mm.context);
|
|
|
|
|
|
-#ifdef CONFIG_KGDB
|
|
|
- /*
|
|
|
- * If the kgdb is connected no debug regs should be altered. This
|
|
|
- * is only applicable when KGDB and a KGDB I/O module are built
|
|
|
- * into the kernel and you are using early debugging with
|
|
|
- * kgdbwait. KGDB will control the kernel HW breakpoint registers.
|
|
|
- */
|
|
|
- if (kgdb_connected && arch_kgdb_ops.correct_hw_break)
|
|
|
- arch_kgdb_ops.correct_hw_break();
|
|
|
- else
|
|
|
-#endif
|
|
|
- clear_all_debug_regs();
|
|
|
+ clear_all_debug_regs();
|
|
|
+ dbg_restore_debug_regs();
|
|
|
|
|
|
fpu_init();
|
|
|
|
|
@@ -1239,6 +1243,7 @@ void __cpuinit cpu_init(void)
|
|
|
#endif
|
|
|
|
|
|
clear_all_debug_regs();
|
|
|
+ dbg_restore_debug_regs();
|
|
|
|
|
|
/*
|
|
|
* Force FPU initialization:
|