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
Slight change to VMM defines
[tpg/acess2.git]
/
Kernel
/
arch
/
x86
/
proc.c
diff --git
a/Kernel/arch/x86/proc.c
b/Kernel/arch/x86/proc.c
index
16af0da
..
ad83c99
100644
(file)
--- a/
Kernel/arch/x86/proc.c
+++ b/
Kernel/arch/x86/proc.c
@@
-14,6
+14,7
@@
// === FLAGS ===
#define DEBUG_TRACE_SWITCH 0
// === 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
// === 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 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);
// === PROTOTYPES ===
void ArchThreads_Init(void);
@@
-286,7
+287,7
@@
void ArchThreads_Init(void)
MM_FinishVirtualInit();
#endif
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;
// 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";
}
gaCPUs[i].IdleThread = Threads_GetThread(tid);
gaCPUs[i].IdleThread->ThreadName = "Idle Thread";
- Threads_Set
Tickets( gaCPUs[i].IdleThread, 0 );
// Never called randomly
+ Threads_Set
Priority( gaCPUs[i].IdleThread, -1 );
// Never called randomly
gaCPUs[i].IdleThread->Quantum = 1; // 1 slice quantum
gaCPUs[i].IdleThread->Quantum = 1; // 1 slice quantum
@@
-468,7
+469,7
@@
void Proc_Start(void)
{
gpIdleThread = Proc_GetCurThread();
gpIdleThread->ThreadName = "Idle Thread";
{
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
}
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
Uint tmpEbp, oldEsp = esp;
// Set CR3
+ #if USE_PAE
+ # warning "PAE Unimplemented"
+ #else
newThread->MemState.CR3 = cur->MemState.CR3;
newThread->MemState.CR3 = cur->MemState.CR3;
+ #endif
// Create new KStack
newThread->KernelStack = MM_NewKStack();
// 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
__asm__ __volatile__ ("mov %0, %%db0" : : "r" (newThread) );
#if USE_MP
// ACK the interrupt
- if(
GetCPUNum()
)
+ if(
GetCPUNum()
)
gpMP_LocalAPIC->EOI.Val = 0;
else
#endif
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
// Set EIP as parent
new->SavedState.EIP = eip;
// Mark as active
- new->Status = THREAD_STAT_ACTIVE;
Threads_AddActive( new );
return new->TID;
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
{
// 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(;;);
}
for(;;);
}
UCC
git Repository :: git.ucc.asn.au