diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-12-30 19:08:56 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-12-30 19:11:19 +0100 |
| commit | 86555126d855df005bb1777c1c4ab7127c677b6c (patch) | |
| tree | 5afca23f0ab7a6bf091dc25fc4998d0c51347147 /src | |
| parent | 8d853a3235d37b746508d178b6128380b07ceb57 (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.h | 15 | ||||
| -rw-r--r-- | src/kernel/KernelKit/UserProcessScheduler.h | 4 | ||||
| -rw-r--r-- | src/kernel/MACROS_MAP.md | 5 | ||||
| -rw-r--r-- | src/kernel/amd64-desktop.make | 4 | ||||
| -rw-r--r-- | src/kernel/arm64-desktop.make | 2 | ||||
| -rw-r--r-- | src/kernel/src/UserProcessScheduler.cc | 10 |
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; } |
