X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Farch%2Fx86%2Fproc.c;h=69c89b279ee058b896dbf8759e76423c33bee9ec;hb=01fbfb424865291e00242681662ed9b20c33a524;hp=e9b4a681fb1317abb433893f4164cb8ec02c6313;hpb=2d83a99f3202f0e4688b58405f67604a24420861;p=tpg%2Facess2.git diff --git a/Kernel/arch/x86/proc.c b/Kernel/arch/x86/proc.c index e9b4a681..69c89b27 100644 --- a/Kernel/arch/x86/proc.c +++ b/Kernel/arch/x86/proc.c @@ -42,13 +42,13 @@ extern Uint GetEIP(void); // start.asm extern int GetCPUNum(void); // start.asm extern Uint32 gaInitPageDir[1024]; // start.asm extern char Kernel_Stack_Top[]; -extern tSpinlock glThreadListLock; +extern tShortSpinlock glThreadListLock; extern int giNumCPUs; 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); @@ -570,7 +570,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 +610,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 +678,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 +832,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(;;); }