git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix clean all script for renamed armv7 arch
[tpg/acess2.git]
/
Kernel
/
threads.c
diff --git
a/Kernel/threads.c
b/Kernel/threads.c
index
7114745
..
a81736b
100644
(file)
--- a/
Kernel/threads.c
+++ b/
Kernel/threads.c
@@
-667,9
+667,10
@@
void Threads_Kill(tThread *Thread, int Status)
SHORTREL( &Thread->IsLocked ); // TODO: We may not actually be released...
// And, reschedule
SHORTREL( &Thread->IsLocked ); // TODO: We may not actually be released...
// And, reschedule
- if(isCurThread) {
+ if(isCurThread)
+ {
for( ;; )
for( ;; )
-
HALT
();
+
Proc_Reschedule
();
}
}
}
}
@@
-678,10
+679,7
@@
void Threads_Kill(tThread *Thread, int Status)
*/
void Threads_Yield(void)
{
*/
void Threads_Yield(void)
{
- tThread *thread = Proc_GetCurThread();
- thread->Remaining = 0;
- //while(thread->Remaining == 0)
- HALT();
+ Proc_Reschedule();
}
/**
}
/**
@@
-717,8
+715,9
@@
void Threads_Sleep(void)
// Release Spinlock
SHORTREL( &glThreadListLock );
// Release Spinlock
SHORTREL( &glThreadListLock );
-
- while(cur->Status != THREAD_STAT_ACTIVE) HALT();
+
+ while(cur->Status != THREAD_STAT_ACTIVE)
+ Proc_Reschedule();
}
}
@@
-849,7
+848,8
@@
void Threads_AddActive(tThread *Thread)
if( Thread->Status == THREAD_STAT_ACTIVE ) {
tThread *cur = Proc_GetCurThread();
if( Thread->Status == THREAD_STAT_ACTIVE ) {
tThread *cur = Proc_GetCurThread();
- Warning("WTF, CPU%i %p (%i %s) is adding %p (%i %s) when it is active",
+ Log_Warning("Threads", "WTF, %p CPU%i %p (%i %s) is adding %p (%i %s) when it is active",
+ __builtin_return_address(0),
GetCPUNum(), cur, cur->TID, cur->ThreadName, Thread, Thread->TID, Thread->ThreadName);
SHORTREL( &glThreadListLock );
return ;
GetCPUNum(), cur, cur->TID, cur->ThreadName, Thread, Thread->TID, Thread->ThreadName);
SHORTREL( &glThreadListLock );
return ;
@@
-904,14
+904,17
@@
void Threads_AddActive(tThread *Thread)
/**
* \brief Removes the current thread from the active queue
/**
* \brief Removes the current thread from the active queue
- * \warning This should ONLY be called with t
ask switches disable
d
+ * \warning This should ONLY be called with t
he lock hel
d
* \return Current thread pointer
*/
tThread *Threads_RemActive(void)
{
tThread *ret = Proc_GetCurThread();
* \return Current thread pointer
*/
tThread *Threads_RemActive(void)
{
tThread *ret = Proc_GetCurThread();
-
- SHORTLOCK( &glThreadListLock );
+
+ if( !IS_LOCKED(&glThreadListLock) ) {
+ Log_KernelPanic("Threads", "Threads_RemActive called without lock held");
+ return NULL;
+ }
// Delete from active queue
#if SCHEDULER_TYPE == SCHED_RR_PRI
// Delete from active queue
#if SCHEDULER_TYPE == SCHED_RR_PRI
@@
-938,8
+941,6
@@
tThread *Threads_RemActive(void)
GetCPUNum(), ret, ret->TID, ret->ThreadName, giFreeTickets);
#endif
GetCPUNum(), ret, ret->TID, ret->ThreadName, giFreeTickets);
#endif
- SHORTREL( &glThreadListLock );
-
return ret;
}
return ret;
}
@@
-979,6
+980,7
@@
void Threads_Fault(int Num)
// Double Fault? Oh, F**k
if(thread->CurFaultNum != 0) {
// Double Fault? Oh, F**k
if(thread->CurFaultNum != 0) {
+ Log_Warning("Threads", "Threads_Fault: Double fault on %i", thread->TID);
Threads_Kill(thread, -1); // For now, just kill
HALT();
}
Threads_Kill(thread, -1); // For now, just kill
HALT();
}
@@
-994,7
+996,10
@@
void Threads_Fault(int Num)
*/
void Threads_SegFault(tVAddr Addr)
{
*/
void Threads_SegFault(tVAddr Addr)
{
- Warning("Thread #%i committed a segfault at address %p", Proc_GetCurThread()->TID, Addr);
+ tThread *cur = Proc_GetCurThread();
+ cur->bInstrTrace = 0;
+ Log_Warning("Threads", "Thread #%i committed a segfault at address %p", cur->TID, Addr);
+ MM_DumpTables(0, KERNEL_BASE);
Threads_Fault( 1 );
//Threads_Exit( 0, -1 );
}
Threads_Fault( 1 );
//Threads_Exit( 0, -1 );
}
@@
-1136,7
+1141,6
@@
tThread *Threads_GetNextToRun(int CPU, tThread *Last)
if( gaThreads_NoTaskSwitch[CPU] )
return Last;
if( gaThreads_NoTaskSwitch[CPU] )
return Last;
-
// Lock thread list
SHORTLOCK( &glThreadListLock );
// Lock thread list
SHORTLOCK( &glThreadListLock );
@@
-1309,6
+1313,9
@@
tThread *Threads_GetNextToRun(int CPU, tThread *Last)
SHORTREL(&glThreadListLock);
return NULL;
}
SHORTREL(&glThreadListLock);
return NULL;
}
+ if( thread->Status != THREAD_STAT_ACTIVE ) {
+ LogF("Oops, Thread %i (%s) is not active\n", thread->TID, thread->ThreadName);
+ }
}
#elif SCHEDULER_TYPE == SCHED_RR_SIM
{
}
#elif SCHEDULER_TYPE == SCHED_RR_SIM
{
@@
-1338,6
+1345,7
@@
tThread *Threads_GetNextToRun(int CPU, tThread *Last)
// Make the new thread non-schedulable
thread->CurCPU = CPU;
// Make the new thread non-schedulable
thread->CurCPU = CPU;
+ thread->Remaining = thread->Quantum;
SHORTREL( &glThreadListLock );
SHORTREL( &glThreadListLock );
UCC
git Repository :: git.ucc.asn.au