From 2c2101232adf2b134cf408f05f00a21dc5b8b0f3 Mon Sep 17 00:00:00 2001 From: Patrick Williams Date: Wed, 7 Jul 2010 17:24:25 -0500 Subject: SMT support. --- src/kernel/kernel.C | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src/kernel/kernel.C') diff --git a/src/kernel/kernel.C b/src/kernel/kernel.C index 00f3002e5..7b119d232 100644 --- a/src/kernel/kernel.C +++ b/src/kernel/kernel.C @@ -14,6 +14,7 @@ extern "C" void kernel_dispatch_task(); extern void init_main(void* unused); +extern uint64_t kernel_other_thread_spinlock; class Kernel { @@ -27,6 +28,7 @@ class Kernel Kernel() {}; }; +extern "C" int main() { printk("Booting %s kernel...\n\n", "Chenoo"); @@ -37,12 +39,25 @@ int main() kernel.cpuBootstrap(); kernel.inittaskBootstrap(); + + // Ready to let the other CPUs go. + kernel_other_thread_spinlock = 1; kernel_dispatch_task(); // no return. while(1); return 0; } +extern "C" +int smp_slave_main(cpu_t* cpu) +{ + CpuManager::init_slave_smp(cpu); + VmmManager::init_slb(); + cpu->scheduler->setNextRunnable(); + kernel_dispatch_task(); + return 0; +} + void Kernel::cppBootstrap() { // Call default constructors for any static objects. @@ -73,6 +88,5 @@ void Kernel::inittaskBootstrap() task_t * t = TaskManager::createTask(&init_main, NULL); t->cpu = CpuManager::getCurrentCPU(); TaskManager::setCurrentTask(t); - } -- cgit v1.2.3