[panic] Have panics stop all cores
Kernel panics previously only stopped the calling core. This commit re-implements the panic system to allow us to stop all cores on a panic. Changes include: - panic now sends an NMI to all cores. This means we can't control the contents of their registers, so panic information has been moved to a global struct, and the panicking cpu sets the pointer to that data in its cpu_data. - the panic_handler is now set up with mutexes to print appropriately and only initialize objects once. - copying _current_gsbase into the panic handler, and #including the cpprt.cpp file (so that we can define NDEBUG and not have it try to link the assert code back in) - making the symbol data pointer in kargs an actual pointer again, not an address - and carrying that through to the panic handler - the number of cpus is now saved globally in the kernel as g_num_cpus
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
#include <stdint.h>
|
||||
|
||||
struct cpu_state;
|
||||
struct cpu_data;
|
||||
|
||||
namespace panicking {
|
||||
|
||||
@@ -24,6 +25,7 @@ void print_header(
|
||||
const char *file,
|
||||
uint64_t line);
|
||||
|
||||
void print_cpu(serial_port &out, cpu_data &cpu);
|
||||
void print_callstack(serial_port &out, symbol_table &syms, frame const *fp);
|
||||
void print_cpu_state(serial_port &out, const cpu_state ®s);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user