summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-12-30 19:08:56 +0100
committerAmlal El Mahrouss <amlal@nekernel.org>2025-12-30 19:11:19 +0100
commit86555126d855df005bb1777c1c4ab7127c677b6c (patch)
tree5afca23f0ab7a6bf091dc25fc4998d0c51347147 /src
parent8d853a3235d37b746508d178b6128380b07ceb57 (diff)
feat: SMP support tweaks, add MACROS_MAP.md
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'src')
-rw-r--r--src/kernel/KernelKit/HardwareThreadScheduler.h15
-rw-r--r--src/kernel/KernelKit/UserProcessScheduler.h4
-rw-r--r--src/kernel/MACROS_MAP.md5
-rw-r--r--src/kernel/amd64-desktop.make4
-rw-r--r--src/kernel/arm64-desktop.make2
-rw-r--r--src/kernel/src/UserProcessScheduler.cc10
6 files changed, 27 insertions, 13 deletions
diff --git a/src/kernel/KernelKit/HardwareThreadScheduler.h b/src/kernel/KernelKit/HardwareThreadScheduler.h
index b7aa63e5..bc5bea81 100644
--- a/src/kernel/KernelKit/HardwareThreadScheduler.h
+++ b/src/kernel/KernelKit/HardwareThreadScheduler.h
@@ -2,8 +2,8 @@
// Licensed under the Apache License, Version 2.0 (see LICENSE file)
// Official repository: https://github.com/nekernel-org/nekernel
-#ifndef __INC_MP_MANAGER_H__
-#define __INC_MP_MANAGER_H__
+#ifndef KERNEL_HARDWARETHREADSCHEDULER_H
+#define KERNELKIT_HARDWARETHREADSCHEDULER_H
#include <ArchKit/ArchKit.h>
#include <CompilerKit/CompilerKit.h>
@@ -12,9 +12,17 @@
/// @note Last Rev Sun 28 Jul CET 2024
/// @note Last Rev Thu, Aug 1, 2024 9:07:38 AM
-#define kMaxAPInsideSched (4U)
+#if defined(__nekernel_max_cores)
+/// \note This can be edited at compile-time to specify how many cores can be used by NeKernel.
+#define kMaxAPInsideSched (__nekernel_max_cores)
+#endif
+
+#if defined(__nekernel_boot_core_index)
+#define kBootAPIndex (__nekernel_boot_core_index)
+#endif
namespace Kernel {
+
enum struct ThreadKind {
kAPInvalid = 0,
kAPSystemReserved = 100, // System reserved thread, well user can't use it
@@ -123,6 +131,7 @@ Void mp_wakeup_thread(HAL::StackFramePtr stack);
/// @brief makes thread sleep.
/// hooks and hangs thread to prevent code from executing.
Void mp_hang_thread(HAL::StackFramePtr stack);
+
} // namespace Kernel
#endif // !__INC_MP_MANAGER_H__
diff --git a/src/kernel/KernelKit/UserProcessScheduler.h b/src/kernel/KernelKit/UserProcessScheduler.h
index e4d86a19..126be648 100644
--- a/src/kernel/KernelKit/UserProcessScheduler.h
+++ b/src/kernel/KernelKit/UserProcessScheduler.h
@@ -2,8 +2,8 @@
// Licensed under the Apache License, Version 2.0 (see LICENSE file)
// Official repository: https://github.com/nekernel-org/nekernel
-#ifndef __KERNEL_KIT_USER_PROCESS_SCHEDULER_H__
-#define __KERNEL_KIT_USER_PROCESS_SCHEDULER_H__
+#ifndef KERNELKIT_USERPROCESSSCHEDULER_H
+#define KERNELKIT_USERPROCESSSCHEDULER_H
/// @file UserProcessScheduler.h
/// @brief User Process Scheduler backend file.
diff --git a/src/kernel/MACROS_MAP.md b/src/kernel/MACROS_MAP.md
new file mode 100644
index 00000000..77118a44
--- /dev/null
+++ b/src/kernel/MACROS_MAP.md
@@ -0,0 +1,5 @@
+# __nekernel: Configuration Macros of NeKernel.
+
+- `__nekernel_max_cores` -> Max SMP cores usable by NeKernel's scheduler.
+
+
diff --git a/src/kernel/amd64-desktop.make b/src/kernel/amd64-desktop.make
index 081bf75b..88652718 100644
--- a/src/kernel/amd64-desktop.make
+++ b/src/kernel/amd64-desktop.make
@@ -1,11 +1,11 @@
-##################################################
+#################################################
# (c) Amlal El Mahrouss, licensed under the Apache 2.0 license.
# This is the NeKernel's makefile.
##################################################
CXX = x86_64-w64-mingw32-g++
LD = x86_64-w64-mingw32-ld
-CCFLAGS = -fshort-wchar -c -D__NE_AMD64__ -D__NEOSKRNL__ -D__NE_VEPM__ -Wall -Wpedantic -Wextra -mno-red-zone -fno-rtti -fno-exceptions -std=c++20 -D__FSKIT_INCLUDES_OPENHEFS__ -D__FSKIT_INCLUDES_EXT2__ -D__NE_SUPPORT_NX__ -O0 -I../vendor -D__NEKERNEL__ -D__HAVE_NE_APIS__ -D__FREESTANDING__ -D__NE_VIRTUAL_MEMORY_SUPPORT__ -D__NE_AUTO_FORMAT__ -D__NE__ -I./ -I../ -I../boot
+CCFLAGS = -fshort-wchar -D__nekernel_max_cores=8 -c -D__NE_AMD64__ -D__NEOSKRNL__ -D__NE_VEPM__ -Wall -Wpedantic -Wextra -mno-red-zone -fno-rtti -fno-exceptions -std=c++20 -D__FSKIT_INCLUDES_OPENHEFS__ -D__FSKIT_INCLUDES_EXT2__ -D__NE_SUPPORT_NX__ -O0 -I../vendor -D__NEKERNEL__ -D__HAVE_NE_APIS__ -D__FREESTANDING__ -D__NE_VIRTUAL_MEMORY_SUPPORT__ -D__NE_AUTO_FORMAT__ -D__NE__ -I./ -I../ -I../boot
ASM = nasm
diff --git a/src/kernel/arm64-desktop.make b/src/kernel/arm64-desktop.make
index f5228d6b..d24203c1 100644
--- a/src/kernel/arm64-desktop.make
+++ b/src/kernel/arm64-desktop.make
@@ -7,7 +7,7 @@ CC = clang++
LD = lld-link
CCFLAGS = -fshort-wchar -c -ffreestanding -MMD -mno-red-zone -D__NE_ARM64__ -fno-rtti -fno-exceptions -I./ \
-target aarch64-unknown-windows \
- -std=c++20 -O3 -D__NEKERNEL__ -D__NEOSKRNL__ -D__NE_VEPM__ -D__NE_MINIMAL_OS__ -D__NE_NO_BUILTIN__ -D__HAVE_NE_APIS__ -D__NE__ -I../
+ -std=c++20 -D__nekernel_max_cores -O3 -D__NEKERNEL__ -D__NEOSKRNL__ -D__NE_VEPM__ -D__NE_MINIMAL_OS__ -D__NE_NO_BUILTIN__ -D__HAVE_NE_APIS__ -D__NE__ -I../
ASM = clang++
diff --git a/src/kernel/src/UserProcessScheduler.cc b/src/kernel/src/UserProcessScheduler.cc
index 6bd5f3fd..d7cbfaf0 100644
--- a/src/kernel/src/UserProcessScheduler.cc
+++ b/src/kernel/src/UserProcessScheduler.cc
@@ -617,22 +617,22 @@ Bool UserProcessHelper::Switch(HAL::StackFramePtr frame_ptr, ProcessID new_pid)
HardwareThreadScheduler::The()[index].Leak()->Busy(YES);
- Bool ret = HardwareThreadScheduler::The()[index].Leak()->Switch(frame_ptr);
+ Bool ret{HardwareThreadScheduler::The()[index].Leak()->Switch(frame_ptr)};
////////////////////////////////////////////////////////////
- /// Rollback on fail. ///
+ /// Rollback on fail. ///
////////////////////////////////////////////////////////////
if (!ret) continue;
+ (Void)(kout << "AP_" << hex_number(index));
+ kout << " is now running a new task!\r";
+
UserProcessHelper::TheCurrentPID().Leak().Leak() = new_pid;
HardwareThreadScheduler::The()[index].Leak()->fPTime =
UserProcessScheduler::The().TheCurrentTeam().Leak().AsArray()[new_pid].PTime;
- (Void)(kout << "AP_" << hex_number(index));
- kout << " is now running a new task!\r";
-
return YES;
}