diff options
Diffstat (limited to 'src/arch/x86/system.cc')
-rw-r--r-- | src/arch/x86/system.cc | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/arch/x86/system.cc b/src/arch/x86/system.cc index 096f10f5e..b0dab7bed 100644 --- a/src/arch/x86/system.cc +++ b/src/arch/x86/system.cc @@ -43,6 +43,7 @@ #include "arch/x86/bios/intelmp.hh" #include "arch/x86/bios/smbios.hh" +#include "arch/x86/faults.hh" #include "arch/x86/isa_traits.hh" #include "base/loader/object_file.hh" #include "cpu/thread_context.hh" @@ -107,6 +108,19 @@ X86System::initState() { System::initState(); + for (auto *tc: threadContexts) { + X86ISA::InitInterrupt(0).invoke(tc); + + if (tc->contextId() == 0) { + tc->activate(); + } else { + // This is an application processor (AP). It should be initialized + // to look like only the BIOS POST has run on it and put then put + // it into a halted state. + tc->suspend(); + } + } + if (!kernel) fatal("No kernel to load.\n"); |