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
exported spinlocks
[tpg/acess2.git]
/
Kernel
/
arch
/
x86_64
/
proc.c
diff --git
a/Kernel/arch/x86_64/proc.c
b/Kernel/arch/x86_64/proc.c
index
8e7d24c
..
c5c0c18
100644
(file)
--- a/
Kernel/arch/x86_64/proc.c
+++ b/
Kernel/arch/x86_64/proc.c
@@
-36,7
+36,7
@@
extern void APStartup(void); // 16-bit AP startup code
extern Uint GetRIP(void); // start.asm
extern Uint64 gInitialPML4[512]; // start.asm
extern char gInitialKernelStack[];
extern Uint GetRIP(void); // start.asm
extern Uint64 gInitialPML4[512]; // start.asm
extern char gInitialKernelStack[];
-extern tS
pinlock
glThreadListLock;
+extern tS
hortSpinlock
glThreadListLock;
extern int giNumCPUs;
extern int giNextTID;
extern int giTotalTickets;
extern int giNumCPUs;
extern int giNextTID;
extern int giTotalTickets;
@@
-289,9
+289,14
@@
void ArchThreads_Init(void)
}
#endif
}
#endif
+ // Set Debug registers
+ __asm__ __volatile__ ("mov %0, %%db0" : : "r"(&gThreadZero));
+ __asm__ __volatile__ ("mov %%rax, %%db1" : : "a"(0));
+
gaCPUs[0].Current = &gThreadZero;
gThreadZero.MemState.CR3 = (Uint)gInitialPML4 - KERNEL_BASE;
gaCPUs[0].Current = &gThreadZero;
gThreadZero.MemState.CR3 = (Uint)gInitialPML4 - KERNEL_BASE;
+ gThreadZero.CurCPU = 0;
// Set timer frequency
outb(0x43, 0x34); // Set Channel 0, Low/High, Rate Generator
// Set timer frequency
outb(0x43, 0x34); // Set Channel 0, Low/High, Rate Generator
@@
-303,6
+308,8
@@
void ArchThreads_Init(void)
// Change Stacks
Proc_ChangeStack();
// Change Stacks
Proc_ChangeStack();
+
+ Log("Multithreading initialised");
}
#if USE_MP
}
#if USE_MP
@@
-387,11
+394,13
@@
void Proc_Start(void)
// Set current task
gaCPUs[0].Current = &gThreadZero;
// Set current task
gaCPUs[0].Current = &gThreadZero;
+ gaCPUs[0].Current->CurCPU = 0;
// Start Interrupts (and hence scheduler)
__asm__ __volatile__("sti");
#endif
MM_FinishVirtualInit();
// Start Interrupts (and hence scheduler)
__asm__ __volatile__("sti");
#endif
MM_FinishVirtualInit();
+ Log("Multithreading started");
}
/**
}
/**
@@
-726,7
+735,7
@@
void Proc_Scheduler(int CPU)
// If the spinlock is set, let it complete
if(IS_LOCKED(&glThreadListLock)) return;
// If the spinlock is set, let it complete
if(IS_LOCKED(&glThreadListLock)) return;
-
+
// Get current thread
thread = gaCPUs[CPU].Current;
// Get current thread
thread = gaCPUs[CPU].Current;
UCC
git Repository :: git.ucc.asn.au