Use separate IST stack for IRQs and cpu exceptions
This commit is contained in:
@@ -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 ();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user