From 505307eb2af0ae6a06a45677db27074a7d3f476c Mon Sep 17 00:00:00 2001 From: John Hodge Date: Mon, 28 Dec 2009 23:28:08 +0800 Subject: [PATCH 1/1] Attempting to fix an intermittent TSS bug --- Kernel/Makefile.BuildNum | 1 + Kernel/arch/x86/desctab.asm | 4 ++-- Kernel/arch/x86/proc.c | 4 ++++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Kernel/Makefile.BuildNum b/Kernel/Makefile.BuildNum index e69de29b..7794f7bf 100644 --- a/Kernel/Makefile.BuildNum +++ b/Kernel/Makefile.BuildNum @@ -0,0 +1 @@ +BUILD_NUM = 2 diff --git a/Kernel/arch/x86/desctab.asm b/Kernel/arch/x86/desctab.asm index 969752c7..aad49c5f 100644 --- a/Kernel/arch/x86/desctab.asm +++ b/Kernel/arch/x86/desctab.asm @@ -21,8 +21,8 @@ gGDT: dd 0x0000FFFF, 0x00CF9200 ; 10 PL0 Data dd 0x0000FFFF, 0x00CFFA00 ; 18 PL3 Code dd 0x0000FFFF, 0x00CFF200 ; 20 PL3 Data - dd 0, 0 ; Double Fault TSS - times MAX_CPUS dd 0, 0 + dd 26*4-1, 0x00408900 ; Double Fault TSS + times MAX_CPUS dd 26*4-1, 0x00408900 gGDTptr: dw GDT_SIZE-1 dd gGDT diff --git a/Kernel/arch/x86/proc.c b/Kernel/arch/x86/proc.c index 2d68d65e..9841c224 100644 --- a/Kernel/arch/x86/proc.c +++ b/Kernel/arch/x86/proc.c @@ -116,10 +116,12 @@ void ArchThreads_Init() #endif // Initialise Double Fault TSS + /* gGDT[5].LimitLow = sizeof(tTSS); gGDT[5].LimitHi = 0; gGDT[5].Access = 0x89; // Type gGDT[5].Flags = 0x4; + */ gGDT[5].BaseLow = (Uint)&gDoubleFault_TSS & 0xFFFF; gGDT[5].BaseMid = (Uint)&gDoubleFault_TSS >> 16; gGDT[5].BaseHi = (Uint)&gDoubleFault_TSS >> 24; @@ -136,10 +138,12 @@ void ArchThreads_Init() gGDT[6+pos].BaseLow = ((Uint)(&gTSSs[pos])) & 0xFFFF; gGDT[6+pos].BaseMid = ((Uint)(&gTSSs[pos])) >> 16; gGDT[6+pos].BaseHi = ((Uint)(&gTSSs[pos])) >> 24; + /* gGDT[6+pos].LimitLow = sizeof(tTSS); gGDT[6+pos].LimitHi = 0; gGDT[6+pos].Access = 0x89; // Type gGDT[6+pos].Flags = 0x4; + */ #if USE_MP } for(pos=0;pos