Use separate IST stack for IRQs and cpu exceptions

This commit is contained in:
2025-12-22 22:19:01 +01:00
parent 1fd6f4890d
commit 259aa732c8
3 changed files with 57 additions and 53 deletions

View File

@@ -1,4 +1,3 @@
#include <amd64/debug.h>
#include <amd64/init.h>
#include <amd64/intr.h>
#include <amd64/tss.h>
@@ -38,6 +37,8 @@ struct gdt_extended {
} PACKED;
ALIGNED (16) static volatile uint8_t kernel_stack[KSTACK_SIZE];
ALIGNED (16) static volatile uint8_t except_stack[KSTACK_SIZE];
ALIGNED (16) static volatile uint8_t irq_stack[KSTACK_SIZE];
ALIGNED (16) static volatile struct gdt_extended gdt;
static void amd64_gdt_set (volatile struct gdt_entry* ent, uint32_t base, uint32_t limit,
@@ -59,6 +60,8 @@ static void amd64_gdt_init (void) {
tss->iopb_off = sizeof (*tss);
tss->rsp0 = (uint64_t)((uintptr_t)kernel_stack + sizeof (kernel_stack));
tss->ist[0] = (uint64_t)((uintptr_t)except_stack + sizeof (except_stack));
tss->ist[1] = (uint64_t)((uintptr_t)irq_stack + sizeof (irq_stack));
uint64_t tssbase = (uint64_t)&tss;
uint64_t tsslimit = sizeof (*tss) - 1;
@@ -101,6 +104,5 @@ static void amd64_gdt_init (void) {
void amd64_init (void) {
amd64_gdt_init ();
amd64_debug_init ();
amd64_intr_init ();
}