parallel compile, SMP, swapgs, cleanup, remove useless Reserved fields
This commit is contained in:
1 parent
b17c9ac854
commit
bfe2b55142
42 files changed
+2131
-426
No files matched your search
+22
-2
@@ -21,6 +21,7 @@
|
||||
#include <ntlite/ddi/hal_api.h>
|
||||
#include <kernel/io_file.h>
|
||||
#include <kernel/ke_selftest.h>
|
||||
#include <kernel/ke_smp.h>
|
||||
#include <common/ini_parser.h>
|
||||
|
||||
typedef struct {
|
||||
@@ -380,6 +381,8 @@ void SystemInitThread(void* arg) {
|
||||
|
||||
DbgPrint("SystemInitThread: Thread started. Igniting the system...\n");
|
||||
|
||||
KiRunEarlyKernelSelfTests();
|
||||
|
||||
KiInitializeDrivers(args->bootInfo, args->hal);
|
||||
|
||||
KiResolveSystemImports(args->bootInfo);
|
||||
@@ -436,7 +439,7 @@ extern void KernelMain(BOOT_INFO* bootInfo) {
|
||||
}
|
||||
|
||||
PHYSICAL_ADDRESS pml4 = (PHYSICAL_ADDRESS)__readcr3();
|
||||
MmInitializeVirtual(pml4, 4 * 1024 * 1024 /* 4 MB initial pool */);
|
||||
MmInitializeVirtual(pml4, 1 * 1024 * 1024 /* 1 MB initial pool */);
|
||||
|
||||
//
|
||||
// Bootstrap CPU and architecture setup (GDT/IDT/Faults)
|
||||
@@ -472,7 +475,17 @@ extern void KernelMain(BOOT_INFO* bootInfo) {
|
||||
const HAL_API* hal = HalGetApi();
|
||||
gKmainHal = hal;
|
||||
|
||||
KeInitDebug(hal->Screen.PrintChar, bootInfo->Debug & 1); // Enable debug
|
||||
KeInitDebug(hal->Screen.PrintChar, bootInfo->Debug & 1);
|
||||
|
||||
// CPU startup intentionally lives after HAL initialization but before IRQs
|
||||
// and scheduler startup. HAL owns ACPI/MADT discovery and LAPIC INIT/SIPI;
|
||||
// the kernel owns KCPU records, per-CPU stacks, GDT/TSS/IDT state, and the
|
||||
// AP park loop. External device IRQs remain routed to the BSP during this
|
||||
// step; APs only become runnable after scheduler admission below.
|
||||
KSTATUS smpStatus = KeStartApplicationProcessors();
|
||||
if (!KSUCCESS(smpStatus)) {
|
||||
KePanic(KE_PANIC_CODE_INIT, "SMP: failed to start application processors, status=0x%x\n", smpStatus);
|
||||
}
|
||||
|
||||
KeIrqInitialize(hal);
|
||||
KeInitializeDpcSystem();
|
||||
@@ -501,6 +514,13 @@ extern void KernelMain(BOOT_INFO* bootInfo) {
|
||||
//
|
||||
KeInitializeScheduler();
|
||||
|
||||
KSTATUS smpSchedStatus = KeAdmitApplicationProcessorsToScheduler();
|
||||
if (!KSUCCESS(smpSchedStatus)) {
|
||||
KePanic(KE_PANIC_CODE_INIT, "SMP: failed to admit APs to scheduler, status=0x%x\n", smpSchedStatus);
|
||||
}
|
||||
|
||||
KiRunCoreHardeningSelfTests();
|
||||
|
||||
// Pack the arguments for the init thread
|
||||
SYSTEM_INIT_ARGS* initArgs = MmAllocatePool(sizeof(SYSTEM_INIT_ARGS));
|
||||
initArgs->bootInfo = bootInfo;
|
||||
|
||||
Reference in new issue
Block a user