summaryrefslogtreecommitdiff
path: root/kernel/gdt.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/gdt.c')
-rw-r--r--kernel/gdt.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/kernel/gdt.c b/kernel/gdt.c
index c91524a..0657387 100644
--- a/kernel/gdt.c
+++ b/kernel/gdt.c
@@ -9,12 +9,12 @@
//https://wiki.osdev.org/Task_State_Segment
tss_struct sys_tss[SMP_MAX_PROC]; //Define the TSS as a global structure
-void install_tss(uint32_t esp0){
+void install_tss(uint32_t cpu,uint32_t esp0){
// now fill each value
// set values necessary
- sys_tss[0].ss0 = 0x10; //kernel data
- sys_tss[0].esp0 = esp0;
+ sys_tss[cpu].ss0 = 0x10; //kernel data
+ sys_tss[cpu].esp0 = esp0;
// now set the IO bitmap (not necessary, so set above limit)
// sys_tss.iomap = ( unsigned short ) sizeof( tss_struct );
@@ -135,7 +135,7 @@ void gdt_init()
myGDT[4].type=0xF2;
//TSS 0x28
- myGDT[5].base=&sys_tss[last_cpu++]; //tss start
+ myGDT[5].base=&sys_tss[last_cpu]; //tss start
myGDT[5].limit=sizeof(tss_struct); //tss end
myGDT[5].type=0x89;
@@ -144,7 +144,8 @@ void gdt_init()
encodeGdtEntry(&gdt_struct[8*i],myGDT[i]);
// update tss entry
- install_tss(0);
+ install_tss(last_cpu,0);
+ last_cpu++;
setup_gdt(gdt_struct);