Kernel - Cleaning up messages
[tpg/acess2.git] / Kernel / threads.c
index bee332b..4ab76ff 100644 (file)
@@ -7,6 +7,7 @@
 #include <threads.h>
 #include <threads_int.h>
 #include <errno.h>
+#include <mutex.h>
 #include <semaphore.h>
 
 // Configuration
 #define SCHED_RR_SIM   2       // Single Queue Round Robin
 #define SCHED_RR_PRI   3       // Multi Queue Round Robin
 // Set scheduler type
-#define SCHEDULER_TYPE SCHED_LOTTERY
+#define SCHEDULER_TYPE SCHED_RR_PRI
 
 // === CONSTANTS ===
-#define        DEFAULT_QUANTUM 10
+#define        DEFAULT_QUANTUM 5
 #define        DEFAULT_PRIORITY        5
 #define MIN_PRIORITY           10
 const enum eConfigTypes        cCONFIG_TYPES[] = {
@@ -861,13 +862,23 @@ void Threads_AddActive(tThread *Thread)
        Thread->Status = THREAD_STAT_ACTIVE;
 //     Thread->CurCPU = -1;
        // Add to active list
-       #if SCHEDULER_TYPE == SCHED_RR_PRI
-       Thread->Next = gaActiveThreads[Thread->Priority];
-       gaActiveThreads[Thread->Priority] = Thread;
-       #else
-       Thread->Next = gActiveThreads;
-       gActiveThreads = Thread;
-       #endif
+       {
+               tThread *tmp, *prev = NULL;
+               #if SCHEDULER_TYPE == SCHED_RR_PRI
+               for( tmp = gaActiveThreads[Thread->Priority]; tmp; prev = tmp, tmp = tmp->Next );
+               if(prev)
+                       prev->Next = Thread;
+               else
+                       gaActiveThreads[Thread->Priority] = Thread;
+               #else
+               for( tmp = gActiveThreads; tmp; prev = tmp, tmp = tmp->Next );
+               if(prev)
+                       prev->Next = Thread;
+               else
+                       gActiveThreads = Thread;
+               #endif
+               Thread->Next = NULL;
+       }
        
        // Update bookkeeping
        giNumActiveThreads ++;
@@ -953,8 +964,6 @@ void Threads_Fault(int Num)
 {
        tThread *thread = Proc_GetCurThread();
        
-       Log_Log("Threads", "Threads_Fault: thread = %p", thread);
-       
        if(!thread)     return ;
        
        Log_Log("Threads", "Threads_Fault: thread->FaultHandler = %p", thread->FaultHandler);
@@ -1476,7 +1485,6 @@ int Semaphore_Wait(tSemaphore *Sem, int MaxToTake)
                else
                        taken = Sem->Value;
                Sem->Value -= taken;
-               SHORTREL( &Sem->Protector );
        }
        else
        {

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