Fix race condition with scheduler starting before task list is populated
[tpg/acess2.git] / Kernel / arch / x86 / proc.c
index 448eab2..2413a6e 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
@@ -134,7 +141,14 @@ void ArchThreads_Init()
        
        // Change Stacks
        Proc_ChangeStack();
-       
+}
+
+/**
+ * \fn void Proc_Start()
+ * \brief Start process scheduler
+ */
+void Proc_Start()
+{
        // Start Interrupts (and hence scheduler)
        __asm__ __volatile__("sti");
 }

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