Fix Segfault in ArchThreads_Init and added MAX_CPUS macro (x86 = 8 cpus)
authorJohn Hodge <[email protected]>
Fri, 25 Sep 2009 02:31:56 +0000 (10:31 +0800)
committerJohn Hodge <[email protected]>
Fri, 25 Sep 2009 02:31:56 +0000 (10:31 +0800)
Kernel/arch/x86/include/arch.h
Kernel/arch/x86/proc.c

index 0611c6c..dd459c2 100644 (file)
 # error "Unknown architecture '" #ARCH "'"
 #endif
 
+#if USE_MP
+# define       MAX_CPUS        8
+#else
+# define       MAX_CPUS        1
+#endif
+
 // === MACROS ===
 #define LOCK(lockptr)  do {int v=1;\
        while(v)__asm__ __volatile__("lock xchgl %%eax, (%%edi)":"=a"(v):"a"(1),"D"(lockptr));}while(0)
index 448eab2..48a3c1a 100644 (file)
@@ -24,6 +24,7 @@ extern int    giNumCPUs;
 extern int     giNextTID;
 extern int     giTotalTickets;
 extern int     giNumActiveThreads;
+extern tThread gThreadZero;
 extern tThread *gActiveThreads;
 extern tThread *gSleepingThreads;
 extern tThread *gDeleteThreads;
@@ -39,7 +40,7 @@ void  Proc_Scheduler();
 // === GLOBALS ===
 // --- Current State ---
 #if USE_MP
-tThread        **gCurrentThread = NULL;
+tThread        *gCurrentThread[MAX_CPUS] = NULL;
 #else
 tThread        *gCurrentThread = NULL;
 #endif
@@ -124,6 +125,12 @@ void ArchThreads_Init()
        }
        #endif
        
+       #if USE_MP
+       gCurrentThread[0] = &gThreadZero;
+       #else
+       gCurrentThread = &gThreadZero;
+       #endif
+       
        // Set timer frequency
        outb(0x43, 0x34);       // Set Channel 0, Low/High, Rate Generator
        outb(0x40, TIMER_DIVISOR&0xFF); // Low Byte of Divisor

UCC git Repository :: git.ucc.asn.au