From a01120cfe4555b081f5606f7d8ae8b1e4956d4a5 Mon Sep 17 00:00:00 2001 From: Ruslan Isaev Date: Wed, 9 Jul 2025 16:44:19 +0300 Subject: [PATCH] tasking: switch tss.esp0 on switching process --- include/gdt.h | 7 ------- src/kernel/gdt.c | 7 +++++++ src/tasking/task.c | 2 ++ 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/include/gdt.h b/include/gdt.h index bcf6fe3..8dceff4 100644 --- a/include/gdt.h +++ b/include/gdt.h @@ -92,11 +92,4 @@ struct tss_entry_struct { extern struct tss_entry_struct tss; -struct seg_desc gdt[NR_GDT_ENTRIES]; - -struct desc_r gdtr = { - sizeof(gdt) - 1, - (uint32_t)&gdt -}; - #endif diff --git a/src/kernel/gdt.c b/src/kernel/gdt.c index 1a19b84..c9c56a8 100644 --- a/src/kernel/gdt.c +++ b/src/kernel/gdt.c @@ -4,6 +4,13 @@ struct tss_entry_struct tss; +struct seg_desc gdt[NR_GDT_ENTRIES]; + +struct desc_r gdtr = { + sizeof(gdt) - 1, + (uint32_t)&gdt +}; + void bss_init() { memset((void *)((int)_edata), 0, KERNEL_BSS_SIZE); diff --git a/src/tasking/task.c b/src/tasking/task.c index e1e9ff0..5452f53 100644 --- a/src/tasking/task.c +++ b/src/tasking/task.c @@ -3,6 +3,7 @@ #include "../include/paging.h" #include "../include/string.h" #include "../include/liballoc.h" +#include "../include/gdt.h" #include @@ -145,6 +146,7 @@ void schedule() { } if (next && next != current) { + tss.esp0 = next->kesp; switchProcess(next); }