summaryrefslogtreecommitdiffhomepage
path: root/dev
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-08-27 16:56:41 +0200
committerAmlal El Mahrouss <amlal@nekernel.org>2025-08-27 16:56:41 +0200
commit2fe8c419e2724a7009d39e4adeb05de7569d5d11 (patch)
treee52d888e5ce7c06ce8adeac2c83dd32649a62bc0 /dev
parent5ab0e37e4c606db6e5c10b0fe2d65b4e611e9503 (diff)
feat: docs/tex: Update OpenHeFS specs.
feat: HAL/amd64: Harden AP files. Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev')
-rw-r--r--dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc2
-rw-r--r--dev/kernel/HALKit/POWER/HalApplicationProcessor.cc9
2 files changed, 10 insertions, 1 deletions
diff --git a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc
index 64f146f3..df5386e4 100644
--- a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc
+++ b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc
@@ -4,6 +4,7 @@
------------------------------------------- */
+/// Different than the MADT, might be confusing to some.
#define APIC_MAG "APIC"
#define APIC_ICR_LOW 0x300
@@ -145,6 +146,7 @@ Bool mp_is_smp(Void) noexcept {
Void mp_init_cores(VoidPtr vendor_ptr) noexcept {
if (!vendor_ptr) return;
+ if (!kHandoverHeader) return;
if (!kHandoverHeader->f_HardwareTables.f_MultiProcessingEnabled) {
kSMPAware = NO;
diff --git a/dev/kernel/HALKit/POWER/HalApplicationProcessor.cc b/dev/kernel/HALKit/POWER/HalApplicationProcessor.cc
index daa26e53..c2703af6 100644
--- a/dev/kernel/HALKit/POWER/HalApplicationProcessor.cc
+++ b/dev/kernel/HALKit/POWER/HalApplicationProcessor.cc
@@ -8,6 +8,8 @@
#include <HALKit/POWER/Processor.h>
#include <KernelKit/DebugOutput.h>
+/// @note This part of the HAL needs an owner.
+
namespace Kernel::Detail {
STATIC void mp_hang_fn(void) {
while (YES)
@@ -21,6 +23,9 @@ namespace Kernel {
void mp_wakeup_thread(HAL::StackFramePtr stack) {
if (!stack) return;
+ MUST_PASS(stack->R15 > 0);
+ MUST_PASS(stack->IP > 0);
+
hal_set_pc_to_hart(reinterpret_cast<HAL_HARDWARE_THREAD*>(stack->R15),
reinterpret_cast<VoidPtr>(stack->IP));
}
@@ -30,7 +35,9 @@ void mp_wakeup_thread(HAL::StackFramePtr stack) {
void mp_hang_thread(HAL::StackFramePtr stack) {
if (!stack) return;
+ MUST_PASS(stack->R15 > 0);
+
hal_set_pc_to_hart(reinterpret_cast<HAL_HARDWARE_THREAD*>(stack->R15),
reinterpret_cast<VoidPtr>(Kernel::Detail::mp_hang_fn));
}
-} // namespace Kernel \ No newline at end of file
+} // namespace Kernel