diff --git a/Kernel/arch/x86/lib.c b/Kernel/arch/x86/lib.c index 0471deba284fbbaabe830e0339ad51609e3b2ba2..3858eff3eee7ccf75abfcc235e2a338c48221f50 100644 --- a/Kernel/arch/x86/lib.c +++ b/Kernel/arch/x86/lib.c @@ -82,9 +82,12 @@ void SHORTLOCK(struct sShortSpinlock *Lock) __ASM__("cli"); // Wait for another CPU to release - while(v) { - __ASM__("xchgl %%eax, (%%edi)":"=a"(v):"a"(cpu),"D"(&Lock->Lock)); - } + __ASM__( + "1: lock cmpxchgl %2, (%3)\n\t" + "jnz 1b" + : "=a"(v) + : "a"(0), "r"(cpu), "r"(&Lock->Lock) + ); Lock->IF = IF; diff --git a/Kernel/arch/x86/proc.c b/Kernel/arch/x86/proc.c index 9e8aa385da825d43af8121412290f5749db79974..1cd11067256f2af745f32076d9d7a3704854b5c8 100644 --- a/Kernel/arch/x86/proc.c +++ b/Kernel/arch/x86/proc.c @@ -488,7 +488,7 @@ void Proc_Start(void) #else // Create Idle Task tid = Proc_NewKThread(Proc_IdleThread, &gaCPUs[0]); - gaCPUs[0].IdleThread = Threads_GetThread(tid); +// gaCPUs[0].IdleThread = Threads_GetThread(tid); // Set current task gaCPUs[0].Current = &gThreadZero;