summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-05-16 09:51:24 +0200
committerAmlal El Mahrouss <amlal@nekernel.org>2025-05-16 10:08:17 +0200
commit5b2ec031ab578caec8fbbdbe5350b9c0df493fd3 (patch)
treea0aab7bea6ef32aaa48ece6bdf287974dd67c8eb
parentb7c6e7aef4c2c647623520f65d78921841bdffaa (diff)
feat(kernel/ap): Improved and fixed the AP boot flow, also made sure that the segment
loading for the long mode stub works. TODO: - Stack pointer shall be set when jumping to AP routine. Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
-rw-r--r--dev/kernel/HALKit/AMD64/HalAPICController.cc38
-rw-r--r--dev/kernel/HALKit/AMD64/HalAPICDmaWrapper.cc39
-rw-r--r--dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc138
-rw-r--r--dev/kernel/HALKit/AMD64/HalApplicationProcessorStartup.asm14
-rw-r--r--dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc20
-rw-r--r--dev/kernel/HALKit/AMD64/HalHandoverStub.asm (renamed from dev/kernel/HALKit/AMD64/HalBootHeader.asm)2
-rw-r--r--dev/kernel/HALKit/AMD64/HalInterruptAPI.asm8
-rw-r--r--dev/kernel/HALKit/AMD64/HalKernelMain.cc10
-rw-r--r--dev/kernel/HALKit/AMD64/Processor.h17
-rw-r--r--dev/kernel/amd64-ci.make2
-rw-r--r--dev/kernel/amd64-desktop.make2
-rw-r--r--dev/kernel/src/UserProcessTeam.cc1
12 files changed, 146 insertions, 145 deletions
diff --git a/dev/kernel/HALKit/AMD64/HalAPICController.cc b/dev/kernel/HALKit/AMD64/HalAPICController.cc
deleted file mode 100644
index e547d982..00000000
--- a/dev/kernel/HALKit/AMD64/HalAPICController.cc
+++ /dev/null
@@ -1,38 +0,0 @@
-/* -------------------------------------------
-
- Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
-
-------------------------------------------- */
-
-#include <HALKit/AMD64/Processor.h>
-#include <modules/ACPI/ACPIFactoryInterface.h>
-
-#define kIOAPICRegVal (4)
-#define kIOAPICRegReg (0)
-
-namespace Kernel::HAL {
-APICController::APICController(VoidPtr base) : fApic(base) {}
-
-/// @brief Read from APIC controller.
-/// @param reg register.
-UInt32 APICController::Read(UInt32 reg) noexcept {
- MUST_PASS(this->fApic);
-
- UInt32 volatile* io_apic = (UInt32 volatile*) this->fApic;
- io_apic[kIOAPICRegReg] = (reg & 0xFF);
-
- return io_apic[kIOAPICRegVal];
-}
-
-/// @brief Write to APIC controller.
-/// @param reg register.
-/// @param value value.
-Void APICController::Write(UInt32 reg, UInt32 value) noexcept {
- MUST_PASS(this->fApic);
-
- UInt32 volatile* io_apic = (UInt32 volatile*) this->fApic;
-
- io_apic[kIOAPICRegReg] = (reg & 0xFF);
- io_apic[kIOAPICRegVal] = value;
-}
-} // namespace Kernel::HAL
diff --git a/dev/kernel/HALKit/AMD64/HalAPICDmaWrapper.cc b/dev/kernel/HALKit/AMD64/HalAPICDmaWrapper.cc
new file mode 100644
index 00000000..6aba5b0e
--- /dev/null
+++ b/dev/kernel/HALKit/AMD64/HalAPICDmaWrapper.cc
@@ -0,0 +1,39 @@
+/* -------------------------------------------
+
+ Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
+
+------------------------------------------- */
+
+#include <HALKit/AMD64/Processor.h>
+#include <modules/ACPI/ACPIFactoryInterface.h>
+
+namespace Kernel::HAL {
+/***********************************************************************************/
+/// Constructors.
+/***********************************************************************************/
+LAPICDmaWrapper::LAPICDmaWrapper(VoidPtr base) : fApic(base) {}
+LAPICDmaWrapper::~LAPICDmaWrapper() = default;
+
+/***********************************************************************************/
+/// @brief Read from APIC controller.
+/// @param reg register.
+/***********************************************************************************/
+UInt32 LAPICDmaWrapper::Read(UInt16 reg) noexcept {
+ MUST_PASS(this->fApic);
+
+ UInt32 volatile* io_apic = (UInt32 volatile*) this->fApic;
+ return io_apic[reg];
+}
+
+/***********************************************************************************/
+/// @brief Write to APIC controller.
+/// @param reg register.
+/// @param value value.
+/***********************************************************************************/
+Void LAPICDmaWrapper::Write(UInt16 reg, UInt32 value) noexcept {
+ MUST_PASS(this->fApic);
+
+ UInt32 volatile* io_apic = (UInt32 volatile*) this->fApic;
+ io_apic[reg] = value;
+}
+} // namespace Kernel::HAL
diff --git a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc
index 46b376c0..98e96687 100644
--- a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc
+++ b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc
@@ -13,18 +13,23 @@
#include <NewKit/KernelPanic.h>
#include <modules/ACPI/ACPIFactoryInterface.h>
#include <modules/CoreGfx/TextGfx.h>
+#include "NewKit/Defines.h"
#define APIC_Signature "APIC"
-#define APIC_ICR_Low 0x300
-#define APIC_ICR_High 0x310
-#define APIC_SIPI_Vector 0x00500
-#define APIC_EIPI_Vector 0x00400
+#define AP_BLOB_SIZE 126
+
+#define APIC_ICR_LOW 0x300
+#define APIC_ICR_HIGH 0x310
+#define APIC_SIPI_VEC 0x00500
+#define APIC_EIPI_VEC 0x00400
#define LAPIC_REG_TIMER_LVT 0x320
#define LAPIC_REG_TIMER_INITCNT 0x380
#define LAPIC_REG_TIMER_CURRCNT 0x390
#define LAPIC_REG_TIMER_DIV 0x3E0
+#define LAPIC_REG_ENABLE 0x80
+#define LAPIC_REG_SPURIOUS 0xF0
#define APIC_BASE_MSR 0x1B
#define APIC_BASE_MSR_BSP 0x100
@@ -52,7 +57,7 @@ STATIC HAL_APIC_MADT* kMADTBlock = nullptr;
STATIC Bool kSMPAware = false;
STATIC Int64 kSMPCount = 0;
-EXTERN_C UIntPtr kApicBaseAddress = 0UL;
+EXTERN_C UIntPtr kApicBaseAddress;
STATIC Int32 kSMPInterrupt = 0;
STATIC UInt64 kAPICLocales[kSchedProcessLimitPerTeam] = {0};
@@ -61,46 +66,16 @@ STATIC VoidPtr kRawMADT = nullptr;
/// @brief Multiple APIC Descriptor Table.
struct HAL_APIC_MADT final SDT_OBJECT {
UInt32 Address; // Madt address
- UInt8 Flags; // Madt flags
-
- struct {
- UInt8 Type;
- UInt8 Len;
-
- union APIC {
- struct IOAPIC {
- UInt8 IoID;
- UInt8 Zero;
- UInt32 IoAddress;
- UInt32 GISBase;
- } IOAPIC;
-
- struct LAPIC_NMI {
- UInt8 Source;
- UInt8 IRQSource;
- UInt32 GSI;
- UInt16 Flags;
- } LApicNMI;
-
- struct LAPIC {
- UInt8 ProcessorID;
- UInt16 Flags;
- UInt8 LINT;
- } LAPIC;
-
- struct LAPIC_OVERRIDE {
- UInt16 Reserved;
- UInt64 Address;
- } LApicOverride;
-
- struct LAPIC_X2 {
- UInt16 Reserved;
- UInt32 x2APICID;
- UInt32 Flags;
- UInt32 AcpiID;
- } LocalApicX2;
- } Apic;
- } List[1]; // Records List
+ UInt32 Flags; // Madt flags
+ UInt8 List[1]; // Records List
+};
+
+struct LAPIC final {
+ UInt8 Type;
+ UInt8 Length;
+ UInt8 ProcessorID;
+ UInt8 APICID;
+ UInt32 Flags;
};
///////////////////////////////////////////////////////////////////////////////////////
@@ -114,10 +89,10 @@ struct HAL_APIC_MADT final SDT_OBJECT {
/***********************************************************************************/
Void hal_send_start_ipi(UInt32 target, UInt32 apic_id) {
- Kernel::ke_dma_write<UInt32>(target, APIC_ICR_High, apic_id << 24);
- Kernel::ke_dma_write<UInt32>(target, APIC_ICR_Low, 0x00000500 | 0x00004000 | 0x00000000);
+ Kernel::ke_dma_write<UInt32>(target, APIC_ICR_HIGH, apic_id << 24);
+ Kernel::ke_dma_write<UInt32>(target, APIC_ICR_LOW, 0x00000500 | 0x00004000 | 0x00000000);
- while (Kernel::ke_dma_read<UInt32>(target, APIC_ICR_Low) & 0x1000) {
+ while (Kernel::ke_dma_read<UInt32>(target, APIC_ICR_LOW) & 0x1000) {
;
}
}
@@ -130,10 +105,10 @@ Void hal_send_start_ipi(UInt32 target, UInt32 apic_id) {
/// @return
/***********************************************************************************/
Void hal_send_sipi(UInt32 target, UInt32 apic_id, UInt8 vector) {
- Kernel::ke_dma_write<UInt32>(target, APIC_ICR_High, apic_id << 24);
- Kernel::ke_dma_write<UInt32>(target, APIC_ICR_Low, 0x00000600 | 0x00004000 | 0x00000000 | vector);
+ Kernel::ke_dma_write<UInt32>(target, APIC_ICR_HIGH, apic_id << 24);
+ Kernel::ke_dma_write<UInt32>(target, APIC_ICR_LOW, 0x00000600 | 0x00004000 | 0x00000000 | vector);
- while (Kernel::ke_dma_read<UInt32>(target, APIC_ICR_Low) & 0x1000) {
+ while (Kernel::ke_dma_read<UInt32>(target, APIC_ICR_LOW) & 0x1000) {
NE_UNUSED(0);
}
}
@@ -202,8 +177,6 @@ Void mp_init_cores(VoidPtr vendor_ptr) noexcept {
kSMPAware = NO;
if (kMADTBlock) {
- SizeT index = 0;
-
kSMPInterrupt = 0;
kSMPCount = 0;
@@ -221,39 +194,52 @@ Void mp_init_cores(VoidPtr vendor_ptr) noexcept {
kApicBaseAddress = apic_base & 0xFFFFF000;
- // Allow LAPIC to forward interrupts (TPR = 0)
- *(volatile UInt32*) (kApicBaseAddress + 0x80) = 0;
+ LAPICDmaWrapper controller{(VoidPtr) kApicBaseAddress};
- // Set Spurious Interrupt Vector and enable LAPIC (bit 8)
- *(volatile UInt32*) (kApicBaseAddress + 0xF0) = 0x1FF; // vector = 0xFF, enable bit = 1 << 8
+ controller.Write(LAPIC_REG_ENABLE, 0);
+ controller.Write(LAPIC_REG_SPURIOUS, 0x1FF); // Enable bit, spurious interrupt vector register.
+ controller.Write(LAPIC_REG_TIMER_DIV, 0b0011);
+ controller.Write(LAPIC_REG_TIMER_LVT, 32 | (1 << 17));
+ controller.Write(LAPIC_REG_TIMER_INITCNT, 1000000);
- // LAPIC timer setup
- *(volatile UInt32*) (kApicBaseAddress + LAPIC_REG_TIMER_DIV) = 0b0011; // Divide by 16
+ const UIntPtr trampoline_phys = 0x8000;
- *(volatile UInt32*) (kApicBaseAddress + LAPIC_REG_TIMER_LVT) =
- 32 | (1 << 17); // Vector 32, periodic
+ HAL::mm_map_page((VoidPtr)trampoline_phys, (VoidPtr)trampoline_phys, HAL::kMMFlagsWr | HAL::kMMFlagsPresent);
- *(volatile UInt32*) (kApicBaseAddress + LAPIC_REG_TIMER_INITCNT) =
- 1000000; // Init count (e.g., ~100Hz)
+ const SizeT len = AP_BLOB_SIZE; /// AP blob size.
- constexpr const auto kSMPCountMax = kMaxAPInsideSched;
+ rt_copy_memory(hal_ap_blob_start, reinterpret_cast<VoidPtr>(trampoline_phys), len);
- while (Yes) {
- // @note Don't probe greater than what the APMgr expects.
- if (kSMPCount > kSMPCountMax) break;
+ volatile UInt8* entry_ptr = reinterpret_cast<volatile UInt8*>(kMADTBlock->List);
+ volatile UInt8* end_ptr = ((UInt8*) kMADTBlock) + kMADTBlock->Length;
- /// @note Anything bigger than x2APIC type doesn't exist.
- if (kMADTBlock->List[index].Type > 9) {
- ++index;
- continue;
- }
+ while (entry_ptr < end_ptr) {
+ UInt8 type = *entry_ptr;
+ UInt8 length = *(entry_ptr + 1);
- kAPICLocales[kSMPCount] = kMADTBlock->List[kSMPCount].Apic.LAPIC.ProcessorID;
- (Void)(kout << "SMP: APIC ID: " << number(kAPICLocales[kSMPCount]) << kendl);
+ // Avoid infinite loop on bad APIC tables.
+ if (length < 2) break;
- ++kSMPCount;
+ if (type == 0) {
+ volatile LAPIC* entry_struct = (volatile LAPIC*) entry_ptr;
+
+ if (entry_struct->Flags & 0x1) {
+ kAPICLocales[kSMPCount] = entry_struct->ProcessorID;
+ ++kSMPCount;
+
+ kout << "LAPIC type, also is on...\r";
+
+ hal_send_start_ipi(kApicBaseAddress, entry_struct->ProcessorID);
+ hal_send_sipi(kApicBaseAddress, entry_struct->ProcessorID, trampoline_phys >> 12);
+
+ } else {
+ kout << "LAPIC type, also is not on...\r";
+ }
+ } else {
+ kout << "Unknown APIC type...\r";
+ }
- ++index;
+ entry_ptr += length;
}
kSMPAware = kSMPCount > 1;
diff --git a/dev/kernel/HALKit/AMD64/HalApplicationProcessorStartup.asm b/dev/kernel/HALKit/AMD64/HalApplicationProcessorStartup.asm
index 09a59e4f..181937ab 100644
--- a/dev/kernel/HALKit/AMD64/HalApplicationProcessorStartup.asm
+++ b/dev/kernel/HALKit/AMD64/HalApplicationProcessorStartup.asm
@@ -10,7 +10,7 @@
;; */
[bits 16]
-[org 0x7c000]
+[org 0x8000]
hal_ap_start:
mov ax, 0x0
@@ -61,19 +61,15 @@ hal_ap_64bit_entry:
mov fs, ax
mov gs, ax
mov ss, ax
- mov rsp, [hal_ap_64bit_entry_stack_end]
+
+ mov rsp, rbx
push 0x33
- push qword [hal_ap_64bit_entry_loop]
+ lea rax, [hal_ap_64bit_entry_loop]
+ push rax
o64 pushf
- push rsp
- push 0x33
o64 iret
hal_ap_64bit_entry_loop:
jmp $
-
-hal_ap_64bit_entry_stack:
- times 8196*2 nop
-hal_ap_64bit_entry_stack_end: \ No newline at end of file
diff --git a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc
index ff283141..d5a40390 100644
--- a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc
+++ b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc
@@ -11,9 +11,11 @@
EXTERN_C Kernel::Void idt_handle_breakpoint(Kernel::UIntPtr rip);
+EXTERN_C Kernel::UIntPtr kApicBaseAddress;
+
/// @brief Handle GPF fault.
/// @param rsp
-EXTERN_C void idt_handle_gpf(Kernel::UIntPtr rsp) {
+EXTERN_C Kernel::Void idt_handle_gpf(Kernel::UIntPtr rsp) {
auto& process = Kernel::UserProcessScheduler::The().CurrentProcess();
Kernel::kout << "Kernel: General Protection Fault.\r";
@@ -27,6 +29,8 @@ EXTERN_C void idt_handle_gpf(Kernel::UIntPtr rsp) {
process.Leak().Status = Kernel::ProcessStatusKind::kKilled;
process.Leak().Crash();
+
+ dbg_break_point();
}
/// @brief Handle page fault.
@@ -44,10 +48,16 @@ EXTERN_C void idt_handle_pf(Kernel::UIntPtr rsp) {
process.Leak().Status = Kernel::ProcessStatusKind::kKilled;
process.Leak().Crash();
+
+ dbg_break_point();
}
/// @brief Handle scheduler interrupt.
EXTERN_C void idt_handle_scheduler(Kernel::UIntPtr rsp) {
+ ((volatile UInt32*) kApicBaseAddress)[0xB0] = 0;
+
+ Kernel::HAL::rt_out8(0x20, 0x20);
+
NE_UNUSED(rsp);
Kernel::UserProcessHelper::StartScheduling();
}
@@ -68,6 +78,8 @@ EXTERN_C void idt_handle_math(Kernel::UIntPtr rsp) {
process.Leak().Status = Kernel::ProcessStatusKind::kKilled;
process.Leak().Crash();
+
+ dbg_break_point();
}
/// @brief Handle any generic fault.
@@ -87,6 +99,8 @@ EXTERN_C void idt_handle_generic(Kernel::UIntPtr rsp) {
process.Leak().Status = Kernel::ProcessStatusKind::kKilled;
process.Leak().Crash();
+
+ dbg_break_point();
}
EXTERN_C Kernel::Void idt_handle_breakpoint(Kernel::UIntPtr rip) {
@@ -104,6 +118,8 @@ EXTERN_C Kernel::Void idt_handle_breakpoint(Kernel::UIntPtr rip) {
Kernel::kout << "Kernel: SIGTRAP status.\r";
process.Leak().Status = Kernel::ProcessStatusKind::kFrozen;
+
+ idt_handle_scheduler(rip);
}
/// @brief Handle #UD fault.
@@ -124,6 +140,8 @@ EXTERN_C void idt_handle_ud(Kernel::UIntPtr rsp) {
process.Leak().Status = Kernel::ProcessStatusKind::kKilled;
process.Leak().Crash();
+
+ dbg_break_point();
}
/// @brief Enter syscall from assembly.
diff --git a/dev/kernel/HALKit/AMD64/HalBootHeader.asm b/dev/kernel/HALKit/AMD64/HalHandoverStub.asm
index 21f8621b..a337a223 100644
--- a/dev/kernel/HALKit/AMD64/HalBootHeader.asm
+++ b/dev/kernel/HALKit/AMD64/HalHandoverStub.asm
@@ -4,8 +4,6 @@
;; * NeKernel
;; * Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
;; *
-;; * 25/03/25: Rename HalBootHeader.asm to HalBootHeader.asm, expose struct symbols; remove unused external symbol.
-;; *
;; * ========================================================
;; */
diff --git a/dev/kernel/HALKit/AMD64/HalInterruptAPI.asm b/dev/kernel/HALKit/AMD64/HalInterruptAPI.asm
index 189b2976..fdd62e57 100644
--- a/dev/kernel/HALKit/AMD64/HalInterruptAPI.asm
+++ b/dev/kernel/HALKit/AMD64/HalInterruptAPI.asm
@@ -232,11 +232,6 @@ IntNormal 31
[extern kApicBaseAddress]
__NE_INT_32:
- mov al, 0x20
- out 0x20, al
-
- mov dword [kApicBaseAddress+0xB0], 0
-
push rax
mov rcx, rsp
call idt_handle_scheduler
@@ -411,3 +406,6 @@ kInterruptVectorTable:
dq __NE_INT_%+i
%assign i i+1
%endrep
+
+kApicBaseAddress:
+ dq 0 \ No newline at end of file
diff --git a/dev/kernel/HALKit/AMD64/HalKernelMain.cc b/dev/kernel/HALKit/AMD64/HalKernelMain.cc
index b7ff3038..158eaa85 100644
--- a/dev/kernel/HALKit/AMD64/HalKernelMain.cc
+++ b/dev/kernel/HALKit/AMD64/HalKernelMain.cc
@@ -106,10 +106,12 @@ EXTERN_C Int32 hal_init_platform(Kernel::HEL::BootInfoHeader* handover_hdr) {
EXTERN_C void rtl_ne_task(void);
EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept {
- Kernel::rtl_create_user_process(rtl_ne_task, "MGMTCTL");
- Kernel::rtl_create_user_process(rtl_ne_task, "LAUNCHCTL");
- Kernel::rtl_create_user_process(rtl_ne_task, "SECURITYCTL");
+ Kernel::rtl_create_user_process(rtl_ne_task, "MgmtSrv");
+ Kernel::rtl_create_user_process(rtl_ne_task, "LaunchSrv");
+ Kernel::rtl_create_user_process(rtl_ne_task, "SecSrv");
+ Kernel::HAL::mp_init_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr);
+
Kernel::HAL::Register64 idt_reg;
idt_reg.Base = reinterpret_cast<Kernel::UIntPtr>(kInterruptVectorTable);
@@ -117,8 +119,6 @@ EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept {
idt_loader.Load(idt_reg);
- Kernel::HAL::mp_init_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr);
-
#ifdef __FSKIT_INCLUDES_HEFS__
if (Kernel::HeFS::fs_init_hefs()) {
goto hal_spin_kernel;
diff --git a/dev/kernel/HALKit/AMD64/Processor.h b/dev/kernel/HALKit/AMD64/Processor.h
index 1b2e35f7..8fb69c0c 100644
--- a/dev/kernel/HALKit/AMD64/Processor.h
+++ b/dev/kernel/HALKit/AMD64/Processor.h
@@ -19,6 +19,8 @@
#include <NewKit/Defines.h>
#include <NewKit/Utils.h>
+#include <HALKit/AMD64/CPUID.h>
+
#define kPITControlPort (0x43)
#define kPITChannel0Port (0x40)
#define kPITFrequency (1193180)
@@ -28,7 +30,8 @@
#define kPIC2Command (0xA0)
#define kPIC2Data (0xA1)
-#include <HALKit/AMD64/CPUID.h>
+#define kIOAPICRegVal (4)
+#define kIOAPICRegReg (0)
#define rtl_nop_op() asm volatile("nop")
@@ -229,16 +232,16 @@ namespace Detail {
};
} // namespace Detail
-class APICController final {
+class LAPICDmaWrapper final {
public:
- explicit APICController(VoidPtr base);
- ~APICController() = default;
+ explicit LAPICDmaWrapper(VoidPtr base);
+ ~LAPICDmaWrapper();
- NE_COPY_DEFAULT(APICController)
+ NE_COPY_DEFAULT(LAPICDmaWrapper)
public:
- UInt32 Read(UInt32 reg) noexcept;
- Void Write(UInt32 reg, UInt32 value) noexcept;
+ UInt32 Read(UInt16 reg) noexcept;
+ Void Write(UInt16 reg, UInt32 value) noexcept;
private:
VoidPtr fApic{nullptr};
diff --git a/dev/kernel/amd64-ci.make b/dev/kernel/amd64-ci.make
index d431342a..38021901 100644
--- a/dev/kernel/amd64-ci.make
+++ b/dev/kernel/amd64-ci.make
@@ -51,7 +51,7 @@ nekernel-amd64-epm: clean
$(CXX) $(CCFLAGS) $(DISK_DRV) $(DEBUG_MACRO) $(wildcard src/*.cc) $(wildcard src/Gfx/*.cc) $(wildcard HALKit/AMD64/PCI/*.cc) $(wildcard src/Network/*.cc) $(wildcard src/Storage/*.cc) $(wildcard src/FS/*.cc) $(wildcard HALKit/AMD64/Storage/*.cc) $(wildcard HALKit/AMD64/*.cc) $(wildcard src/Swap/*.cc) $(wildcard HALKit/AMD64/*.s)
$(ASM) $(ASMFLAGS) HALKit/AMD64/HalInterruptAPI.asm
$(ASM) $(ASMFLAGS) HALKit/AMD64/HalCommonAPI.asm
- $(ASM) $(ASMFLAGS) HALKit/AMD64/HalBootHeader.asm
+ $(ASM) $(ASMFLAGS) HALKit/AMD64/HalHandoverStub.asm
$(ASM) $(ASMFLAGS) HALKit/AMD64/HalUtilsAPI.asm
$(MOVEALL)
diff --git a/dev/kernel/amd64-desktop.make b/dev/kernel/amd64-desktop.make
index 0358bd0a..ae2307fd 100644
--- a/dev/kernel/amd64-desktop.make
+++ b/dev/kernel/amd64-desktop.make
@@ -53,7 +53,7 @@ nekernel-amd64-epm: clean
$(CXX) $(CCFLAGS) $(DISK_DRV) $(DEBUG_MACRO) $(wildcard src/*.cc) $(wildcard src/Gfx/*.cc) $(wildcard HALKit/AMD64/Network/*.cc) $(wildcard HALKit/AMD64/PCI/*.cc) $(wildcard src/Network/*.cc) $(wildcard src/Storage/*.cc) $(wildcard src/FS/*.cc) $(wildcard HALKit/AMD64/Storage/*.cc) $(wildcard HALKit/AMD64/*.cc) $(wildcard src/Swap/*.cc) $(wildcard HALKit/AMD64/*.s)
$(ASM) $(ASMFLAGS) HALKit/AMD64/HalInterruptAPI.asm
$(ASM) $(ASMFLAGS) HALKit/AMD64/HalCommonAPI.asm
- $(ASM) $(ASMFLAGS) HALKit/AMD64/HalBootHeader.asm
+ $(ASM) $(ASMFLAGS) HALKit/AMD64/HalHandoverStub.asm
$(ASM) $(ASMFLAGS) HALKit/AMD64/HalUtilsAPI.asm
$(MOVEALL)
diff --git a/dev/kernel/src/UserProcessTeam.cc b/dev/kernel/src/UserProcessTeam.cc
index 7acbcf8d..987fbf0b 100644
--- a/dev/kernel/src/UserProcessTeam.cc
+++ b/dev/kernel/src/UserProcessTeam.cc
@@ -16,6 +16,7 @@ UserProcessTeam::UserProcessTeam() {
for (SizeT i = 0U; i < this->mProcessList.Count(); ++i) {
this->mProcessList[i] = USER_PROCESS();
this->mProcessList[i].PTime = 0;
+ this->mProcessList[i].RTime = 0;
this->mProcessList[i].Status = ProcessStatusKind::kKilled;
}