Multiple IPStack Related changes (and other bugfixes)
[tpg/acess2.git] / Kernel / arch / x86 / proc.c
index 16af0da..ad83c99 100644 (file)
@@ -14,6 +14,7 @@
 
 // === FLAGS ===
 #define DEBUG_TRACE_SWITCH     0
+#define DEBUG_DISABLE_DOUBLEFAULT      1
 
 // === CONSTANTS ===
 #define        SWITCH_MAGIC    0xFF5317C8      // FF SWITCH - There is no code in this area
@@ -48,7 +49,7 @@ extern int    giNextTID;
 extern tThread gThreadZero;
 extern tThread *Threads_CloneTCB(Uint *Err, Uint Flags);
 extern void    Isr8(void);     // Double Fault
-extern void    Proc_ReturnToUser(void);
+extern void    Proc_ReturnToUser(tVAddr Handler, Uint Argument);
 
 // === PROTOTYPES ===
 void   ArchThreads_Init(void);
@@ -286,7 +287,7 @@ void ArchThreads_Init(void)
        MM_FinishVirtualInit();
        #endif
        
-       #if 0
+       #if !DEBUG_DISABLE_DOUBLEFAULT
        // Initialise Double Fault TSS
        gGDT[5].BaseLow = (Uint)&gDoubleFault_TSS & 0xFFFF;
        gGDT[5].BaseMid = (Uint)&gDoubleFault_TSS >> 16;
@@ -445,7 +446,7 @@ void Proc_Start(void)
                }
                gaCPUs[i].IdleThread = Threads_GetThread(tid);
                gaCPUs[i].IdleThread->ThreadName = "Idle Thread";
-               Threads_SetTickets( gaCPUs[i].IdleThread, 0 );  // Never called randomly
+               Threads_SetPriority( gaCPUs[i].IdleThread, -1 );        // Never called randomly
                gaCPUs[i].IdleThread->Quantum = 1;      // 1 slice quantum
                
                
@@ -468,7 +469,7 @@ void Proc_Start(void)
        {
                gpIdleThread = Proc_GetCurThread();
                gpIdleThread->ThreadName = "Idle Thread";
-               gpIdleThread->NumTickets = 0;   // Never called randomly
+               Threads_SetPriority( gpIdleThread, -1 );        // Never called randomly
                gpIdleThread->Quantum = 1;      // 1 slice quantum
                for(;;) HALT(); // Just yeilds
        }
@@ -570,7 +571,11 @@ int Proc_Clone(Uint *Err, Uint Flags)
                Uint    tmpEbp, oldEsp = esp;
 
                // Set CR3
+               #if USE_PAE
+               # warning "PAE Unimplemented"
+               #else
                newThread->MemState.CR3 = cur->MemState.CR3;
+               #endif
 
                // Create new KStack
                newThread->KernelStack = MM_NewKStack();
@@ -606,7 +611,7 @@ int Proc_Clone(Uint *Err, Uint Flags)
                __asm__ __volatile__ ("mov %0, %%db0" : : "r" (newThread) );
                #if USE_MP
                // ACK the interrupt
-               if(GetCPUNum())
+               if( GetCPUNum() )
                        gpMP_LocalAPIC->EOI.Val = 0;
                else
                #endif
@@ -674,7 +679,6 @@ int Proc_SpawnWorker(void)
        // Set EIP as parent
        new->SavedState.EIP = eip;
        // Mark as active
-       new->Status = THREAD_STAT_ACTIVE;
        Threads_AddActive( new );
        
        return new->TID;
@@ -829,7 +833,7 @@ void Proc_CallFaultHandler(tThread *Thread)
 {
        // Rewinds the stack and calls the user function
        // Never returns
-       __asm__ __volatile__ ("mov %0, %%ebp;\n\tcall Proc_ReturnToUser" :: "r"(Thread->FaultHandler));
+       Proc_ReturnToUser( Thread->FaultHandler, Thread->CurFaultNum );
        for(;;);
 }
 

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