summaryrefslogtreecommitdiff
path: root/Source/Kernel/TaskManager
diff options
context:
space:
mode:
authorAlexis211 <alexis211@gmail.com>2009-10-23 08:13:15 +0200
committerAlexis211 <alexis211@gmail.com>2009-10-23 08:13:15 +0200
commit5e5b36b281d951433d8db71ae898a9dc3272384a (patch)
tree41ce80e62d121620db1c4fffc5b8e117ab8b32c5 /Source/Kernel/TaskManager
parentdc37d089e8ca98ff2dc8a320c21fc3ac0a87eaa6 (diff)
downloadMelon-5e5b36b281d951433d8db71ae898a9dc3272384a.tar.gz
Melon-5e5b36b281d951433d8db71ae898a9dc3272384a.zip
Fixed a bug with paging/tasking.
Diffstat (limited to 'Source/Kernel/TaskManager')
-rw-r--r--Source/Kernel/TaskManager/Task.ns.cpp6
-rw-r--r--Source/Kernel/TaskManager/Thread.class.cpp1
2 files changed, 3 insertions, 4 deletions
diff --git a/Source/Kernel/TaskManager/Task.ns.cpp b/Source/Kernel/TaskManager/Task.ns.cpp
index aef07f3..75f9c3d 100644
--- a/Source/Kernel/TaskManager/Task.ns.cpp
+++ b/Source/Kernel/TaskManager/Task.ns.cpp
@@ -70,7 +70,7 @@ SimpleList<Thread*> *nextThread() {
void doSwitch() {
if (currentThread == NULL or currentProcess == NULL) return;
- u32int esp, ebp, eip, cr3;
+ u32int esp, ebp, eip;
asm volatile("mov %%esp, %0" : "=r"(esp));
asm volatile("mov %%ebp, %0" : "=r"(ebp));
@@ -91,7 +91,6 @@ void doSwitch() {
esp = t->getEsp();
ebp = t->getEbp();
eip = t->getEip();
- cr3 = currentProcess->getPagedir()->physicalAddr;
asm volatile("cli");
@@ -101,10 +100,9 @@ void doSwitch() {
mov %0, %%ebp; \
mov %1, %%esp; \
mov %2, %%ecx; \
- mov %3, %%cr3; \
mov $0x12345, %%eax; \
jmp *%%ecx;"
- : : "r"(ebp), "r"(esp), "r"(eip), "r"(cr3));
+ : : "r"(ebp), "r"(esp), "r"(eip));
}
void triggerSwitch() {
diff --git a/Source/Kernel/TaskManager/Thread.class.cpp b/Source/Kernel/TaskManager/Thread.class.cpp
index 419a954..a9c53ed 100644
--- a/Source/Kernel/TaskManager/Thread.class.cpp
+++ b/Source/Kernel/TaskManager/Thread.class.cpp
@@ -18,6 +18,7 @@ u32int Thread::scall(u8int wat, u32int a, u32int b, u32int c, u32int d) {
}
void runThread(Thread* thread, void* data, thread_entry_t entry_point) {
+ thread->m_process->getPagedir()->switchTo();
if (thread->m_isKernel) {
asm volatile("sti");
u32int ret = entry_point(data); //Run !