diff options
| -rw-r--r-- | src/kernel/HALKit/AMD64/HalApplicationProcessor.cc | 4 | ||||
| -rw-r--r-- | src/kernel/HALKit/AMD64/HalInterruptAPI.asm | 2 | ||||
| -rw-r--r-- | src/kernel/HALKit/AMD64/HalKernelMain.cc | 21 | ||||
| -rw-r--r-- | src/kernel/src/BitMapMgr.cc | 3 |
4 files changed, 24 insertions, 6 deletions
diff --git a/src/kernel/HALKit/AMD64/HalApplicationProcessor.cc b/src/kernel/HALKit/AMD64/HalApplicationProcessor.cc index 9286af57..0450c71c 100644 --- a/src/kernel/HALKit/AMD64/HalApplicationProcessor.cc +++ b/src/kernel/HALKit/AMD64/HalApplicationProcessor.cc @@ -123,6 +123,8 @@ EXTERN_C BOOL mp_register_task(HAL::StackFramePtr stack_frame, ThreadID thrdid) kHWThread[thrdid].mThreadID = thrdid; kHWThread[thrdid].mFramePtr = stack_frame; + hal_send_ipi_msg(thrdid, kAPICLocales[thrdid], kSMPInterrupt + 32); + return YES; } @@ -209,8 +211,6 @@ Void mp_init_cores(VoidPtr vendor_ptr) { entry_ptr += length; } - - kSMPAware = kSMPCount > 1; } } } // namespace Kernel::HAL diff --git a/src/kernel/HALKit/AMD64/HalInterruptAPI.asm b/src/kernel/HALKit/AMD64/HalInterruptAPI.asm index be8675f8..ada65474 100644 --- a/src/kernel/HALKit/AMD64/HalInterruptAPI.asm +++ b/src/kernel/HALKit/AMD64/HalInterruptAPI.asm @@ -193,6 +193,7 @@ IntNormal 31 [extern idt_handle_scheduler] [extern kApicBaseAddress] +[global __NE_INT_33] __NE_INT_32: cli @@ -206,7 +207,6 @@ __NE_INT_32: o64 iret -global __NE_INT_33 __NE_INT_33: cli diff --git a/src/kernel/HALKit/AMD64/HalKernelMain.cc b/src/kernel/HALKit/AMD64/HalKernelMain.cc index cdf593cb..cf98a20a 100644 --- a/src/kernel/HALKit/AMD64/HalKernelMain.cc +++ b/src/kernel/HALKit/AMD64/HalKernelMain.cc @@ -149,6 +149,27 @@ EXTERN_C Kernel::Void hal_real_init(Kernel::Void) { if (ldr.IsLoaded()) rtl_create_user_process(ldr, UserProcess::ExecutableKind::kExecutableKind); + rtl_create_user_process( + []() { + while (YES) + ; + }, + "idle"); + + rtl_create_user_process( + []() { + while (YES) + ; + }, + "idle2"); + + rtl_create_user_process( + []() { + while (YES) + ; + }, + "idle3"); + HAL::mp_init_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr); HAL::Register64 idt_reg; diff --git a/src/kernel/src/BitMapMgr.cc b/src/kernel/src/BitMapMgr.cc index 56c261c2..d9e8a869 100644 --- a/src/kernel/src/BitMapMgr.cc +++ b/src/kernel/src/BitMapMgr.cc @@ -50,7 +50,6 @@ namespace HAL { if (!page_ptr) return No; if (ptr_bit_set[kBitMapMagIdx] != kBitMapMagic) return No; - if (ptr_bit_set[kBitMapSizeIdx] > kBitMapMaxSz) return No; this->GetBitMapStatus(ptr_bit_set); @@ -128,8 +127,6 @@ namespace HAL { UIntPtr raw_base = reinterpret_cast<UIntPtr>(base); - if (ptr_bit_set[kBitMapSizeIdx] > kBitMapMaxSz) return nullptr; - UIntPtr offset = (ptr_bit_set[kBitMapMagIdx] != kBitMapMagic) ? (size + pad) : ptr_bit_set[kBitMapSizeIdx]; |
