diff options
author | Ian Moffett <ian@osmora.org> | 2025-05-16 20:07:43 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2025-05-16 20:19:29 -0400 |
commit | fb4002d54b25ab70d46649a76bf536c67cb92bf4 (patch) | |
tree | 693c650a3af6c21f828b7f3df3876356a749b7a9 /sys/arch | |
parent | 9e83d053812096b795fb8b511c49a65e4ad18a44 (diff) |
kernel: Add cpu_halt_others() and harden panic()
Ensure interrupts are disabled at the start of panic()
to prevent any interrupts from further degrading the
state of the system. Also adds a newline before "panic: "
to clean up the logs.
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'sys/arch')
-rw-r--r-- | sys/arch/aarch64/aarch64/machdep.c | 7 | ||||
-rw-r--r-- | sys/arch/amd64/amd64/machdep.c | 15 |
2 files changed, 22 insertions, 0 deletions
diff --git a/sys/arch/aarch64/aarch64/machdep.c b/sys/arch/aarch64/aarch64/machdep.c index a29ad7e..7c21e62 100644 --- a/sys/arch/aarch64/aarch64/machdep.c +++ b/sys/arch/aarch64/aarch64/machdep.c @@ -42,6 +42,13 @@ cpu_startup(struct cpu_info *ci) } void +cpu_halt_others(void) +{ + /* TODO: STUB */ + return; +} + +void serial_init(void) { /* TODO: STUB */ diff --git a/sys/arch/amd64/amd64/machdep.c b/sys/arch/amd64/amd64/machdep.c index 07d6cdd..4a885fa 100644 --- a/sys/arch/amd64/amd64/machdep.c +++ b/sys/arch/amd64/amd64/machdep.c @@ -174,6 +174,21 @@ cpu_halt_all(void) for (;;); } +/* + * Same as cpu_halt_all() but for all other + * cores but ourselves. + */ +void +cpu_halt_others(void) +{ + if (rdmsr(IA32_GS_BASE) == 0) { + __ASMV("cli; hlt"); + } + + /* Send IPI to all cores */ + lapic_send_ipi(0, IPI_SHORTHAND_OTHERS, halt_vector); +} + void serial_init(void) { |