diff options
Diffstat (limited to 'kernel/gdt.c')
| -rw-r--r-- | kernel/gdt.c | 11 |
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); |
