From 67a14f5c12510e277911cbcf8ea5ce01f8b8fbb1 Mon Sep 17 00:00:00 2001 From: amlal Date: Thu, 13 Jun 2024 22:02:27 +0200 Subject: MHR-31: Detect all types of cores except the boot one. Signed-off-by: amlal --- Kernel/ArchKit/ArchKit.hpp | 4 ++-- Kernel/FirmwareKit/EFI/API.hxx | 4 ++-- Kernel/FirmwareKit/EPM.hxx | 8 +++---- .../HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp | 3 +-- .../HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp | 27 ++++++++++++++-------- Kernel/HALKit/AMD64/HalKernelMain.cxx | 7 +++--- Kernel/HALKit/AMD64/PCI/Iterator.cxx | 2 +- Kernel/HALKit/AXP/CoreSyscallHandlerDEC.cpp | 2 +- Kernel/KernelKit/DriveManager.hxx | 6 ++--- Kernel/KernelKit/FileManager.hpp | 2 +- Kernel/KernelKit/Framebuffer.hpp | 2 +- Kernel/KernelKit/KernelHeap.hpp | 8 +++---- Kernel/KernelKit/ProcessScheduler.hxx | 8 +++---- Kernel/KernelKit/SMPManager.hpp | 4 ++-- Kernel/KernelKit/XCOFF.hxx | 11 +++++---- Kernel/NetworkKit/IPCEP.hxx | 4 ++-- Kernel/NewKit/Array.hpp | 1 - Kernel/NewKit/MutableArray.hpp | 4 ++-- Kernel/Sources/HError.cxx | 2 +- Kernel/Sources/KeMain.cxx | 6 ++--- Kernel/Sources/KernelHeap.cxx | 4 ++-- Kernel/Sources/SMPManager.cxx | 6 ++--- Kernel/Sources/UserHeap.cxx | 8 +++---- 23 files changed, 70 insertions(+), 63 deletions(-) (limited to 'Kernel') diff --git a/Kernel/ArchKit/ArchKit.hpp b/Kernel/ArchKit/ArchKit.hpp index 6407a0d8..c889c93c 100644 --- a/Kernel/ArchKit/ArchKit.hpp +++ b/Kernel/ArchKit/ArchKit.hpp @@ -83,8 +83,8 @@ typedef NewOS::Void (*rt_syscall_proc)(NewOS::VoidPtr); struct RTSyscallInfoHdr final { - NewOS::Int64 fHash; - NewOS::Bool fHooked; + NewOS::Int64 fHash; + NewOS::Bool fHooked; rt_syscall_proc fProc; }; diff --git a/Kernel/FirmwareKit/EFI/API.hxx b/Kernel/FirmwareKit/EFI/API.hxx index c6d02a3e..0f7da5a4 100644 --- a/Kernel/FirmwareKit/EFI/API.hxx +++ b/Kernel/FirmwareKit/EFI/API.hxx @@ -92,8 +92,8 @@ Bascially frees everything we have in the EFI side. GXInit(); GXDrawImg(NewBootFatal, NEWBOOTFATAL_HEIGHT, NEWBOOTFATAL_WIDTH, - (kHandoverHeader->f_GOP.f_Width - NEWBOOTFATAL_WIDTH) / 2, - (kHandoverHeader->f_GOP.f_Height - NEWBOOTFATAL_HEIGHT) / 2); + (kHandoverHeader->f_GOP.f_Width - NEWBOOTFATAL_WIDTH) / 2, + (kHandoverHeader->f_GOP.f_Height - NEWBOOTFATAL_HEIGHT) / 2); GXFini(); diff --git a/Kernel/FirmwareKit/EPM.hxx b/Kernel/FirmwareKit/EPM.hxx index 7c4b37b6..93f4730e 100644 --- a/Kernel/FirmwareKit/EPM.hxx +++ b/Kernel/FirmwareKit/EPM.hxx @@ -117,16 +117,16 @@ typedef struct PartitionBlock PartitionBlockType; ///! @brief partition must start at this address. ///! Anything below is reserved for Data backup by the Main OS. -#define kEPMStartPartitionBlk (sizeof(BootBlock)) +#define kEPMStartPartitionBlk (sizeof(BootBlock)) ///! @brief Current EPM revision (2) -#define kEPMRevision (3) +#define kEPMRevision (3) ///! @brief Current EPM revision (2) -#define kEPMRevisionUEFI (0xF) +#define kEPMRevisionUEFI (0xF) /* @brief Maximum block count. */ -#define kEPMMaxBlks (128) +#define kEPMMaxBlks (128) /// END OF SPECS diff --git a/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp b/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp index 51570b86..e9c0941c 100644 --- a/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp +++ b/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp @@ -82,8 +82,7 @@ EXTERN_C NewOS::Void hal_system_call_enter(NewOS::UIntPtr rcx, NewOS::UIntPtr rd /// @brief Enter kernel call from assembly (DDK only). /// @param stack the stack pushed from assembly routine. /// @return nothing. -EXTERN_C NewOS::Void hal_kernel_call_enter(NewOS::UIntPtr rcx, NewOS::UIntPtr rdx, - NewOS::UIntPtr r8, NewOS::UIntPtr r9) +EXTERN_C NewOS::Void hal_kernel_call_enter(NewOS::UIntPtr rcx, NewOS::UIntPtr rdx, NewOS::UIntPtr r8, NewOS::UIntPtr r9) { if (rcx != 0) { diff --git a/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp b/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp index c15a7b55..37a681ab 100644 --- a/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp +++ b/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp @@ -113,10 +113,16 @@ namespace NewOS::HAL /////////////////////////////////////////////////////////////////////////////////////// - STATIC MadtType* kApicInfoBlock = nullptr; - STATIC UIntPtr kApicMadtAddresses[255] = {0}; - STATIC SizeT kApicMadtAddressesCount = 0UL; - STATIC UIntPtr cBaseAddressAPIC = 0xFEE00000; + STATIC MadtType* kApicInfoBlock = nullptr; + + STATIC struct + { + UIntPtr fAddress{0}; + UInt32 fKind{0}; + } kApicMadtAddresses[255] = {}; + + STATIC SizeT kApicMadtAddressesCount = 0UL; + STATIC UIntPtr cBaseAddressAPIC = 0xFEE00000; /// @brief this will help us schedule our cores. STATIC Boolean* cProgramInitialized = nullptr; @@ -156,7 +162,6 @@ namespace NewOS::HAL EXTERN_C Void hal_apic_acknowledge_cont(Void) { - ProcessHelper::StartScheduling(); _hal_spin_core(); } @@ -202,21 +207,23 @@ namespace NewOS::HAL if (kApicMadt != nullptr) { - MadtType* madt = (MadtType*)kApicMadt; + MadtType* madt = reinterpret_cast(kApicMadt); constexpr auto cMaxProbableCores = 4; // the amount of cores we want. constexpr auto cStartAt = 0; // start here to avoid boot core. for (SizeT coreAt = cStartAt; coreAt < cMaxProbableCores; ++coreAt) { - if (madt->MadtRecords[coreAt].Flags == kThreadLAPIC) // if local apic. + if (madt->MadtRecords[coreAt].Flags != kThreadBoot) // if local apic. { MadtType::MadtAddress& madtRecord = madt->MadtRecords[coreAt]; // then register as a core for scheduler. - kcout << "newoskrnl: register core as scheduler thread.\r"; + kcout << "newoskrnl: Register Local APIC.\r"; + + kApicMadtAddresses[kApicMadtAddressesCount].fAddress = madtRecord.Address; + kApicMadtAddresses[kApicMadtAddressesCount].fKind = madt->MadtRecords[coreAt].Flags; - kApicMadtAddresses[kApicMadtAddressesCount] = madtRecord.Address; ++kApicMadtAddressesCount; } } @@ -241,7 +248,7 @@ namespace NewOS::HAL cProgramInitialized = new Boolean(true); constexpr auto cWhereToInterrupt = 0x40; - constexpr auto cWhatCore = 1; + constexpr auto cWhatCore = 1; hal_send_start_ipi(cWhatCore, cWhereToInterrupt, cBaseAddressAPIC); } diff --git a/Kernel/HALKit/AMD64/HalKernelMain.cxx b/Kernel/HALKit/AMD64/HalKernelMain.cxx index 7064183b..9b605e1a 100644 --- a/Kernel/HALKit/AMD64/HalKernelMain.cxx +++ b/Kernel/HALKit/AMD64/HalKernelMain.cxx @@ -79,8 +79,8 @@ EXTERN_C void hal_init_platform( constexpr auto cDummyInterrupt = 0x10; // 16 kSyscalls[cDummyInterrupt].Leak().Leak()->fProc = [](NewOS::VoidPtr sf) -> void { - const char* msg = (const char*)sf; - NewOS::kcout << "newoskrnl: " << msg << "\r"; + const char* msg = (const char*)sf; + NewOS::kcout << "newoskrnl: " << msg << "\r"; }; kSyscalls[cDummyInterrupt].Leak().Leak()->fHooked = true; @@ -93,5 +93,6 @@ EXTERN_C void hal_init_platform( NewOS::HAL::hal_system_get_cores(kHandoverHeader->f_HardwareTables.f_RsdPtr); while (true) - {} + { + } } diff --git a/Kernel/HALKit/AMD64/PCI/Iterator.cxx b/Kernel/HALKit/AMD64/PCI/Iterator.cxx index 297aa89c..d3167b46 100644 --- a/Kernel/HALKit/AMD64/PCI/Iterator.cxx +++ b/Kernel/HALKit/AMD64/PCI/Iterator.cxx @@ -7,7 +7,7 @@ #include #define PCI_ITERATOR_FIND_AND_UNWRAP(DEV, SZ) \ - if (DEV.Leak().Leak()) \ + if (DEV.Leak().Leak()) \ return *DEV.Leak().Leak(); namespace NewOS::PCI diff --git a/Kernel/HALKit/AXP/CoreSyscallHandlerDEC.cpp b/Kernel/HALKit/AXP/CoreSyscallHandlerDEC.cpp index 3217a660..f308b0b5 100644 --- a/Kernel/HALKit/AXP/CoreSyscallHandlerDEC.cpp +++ b/Kernel/HALKit/AXP/CoreSyscallHandlerDEC.cpp @@ -8,7 +8,7 @@ #include /// @brief Internal call for syscall, to work with C++. -/// @param stack +/// @param stack /// @return nothing. EXTERN_C void rt_syscall_handle(NewOS::HAL::StackFrame* stack) { diff --git a/Kernel/KernelKit/DriveManager.hxx b/Kernel/KernelKit/DriveManager.hxx index e78c350e..df7d5f28 100644 --- a/Kernel/KernelKit/DriveManager.hxx +++ b/Kernel/KernelKit/DriveManager.hxx @@ -14,10 +14,10 @@ #include #include -#define kDriveManagerCount (4U) +#define kDriveManagerCount (4U) -#define kDriveInvalidID (-1) -#define kDriveNameLen (32) +#define kDriveInvalidID (-1) +#define kDriveNameLen (32) namespace NewOS { diff --git a/Kernel/KernelKit/FileManager.hpp b/Kernel/KernelKit/FileManager.hpp index 71f3cfd0..b06b926e 100644 --- a/Kernel/KernelKit/FileManager.hpp +++ b/Kernel/KernelKit/FileManager.hpp @@ -134,7 +134,7 @@ namespace NewOS void SetDataFork(const char* forkName); /// @brief Get internal parser. - /// @return + /// @return NewFSParser* GetParser() noexcept; private: diff --git a/Kernel/KernelKit/Framebuffer.hpp b/Kernel/KernelKit/Framebuffer.hpp index 3437fed1..ebe983c8 100644 --- a/Kernel/KernelKit/Framebuffer.hpp +++ b/Kernel/KernelKit/Framebuffer.hpp @@ -39,7 +39,7 @@ namespace NewOS : fFrameBufferAddr(addr) { } - + ~Framebuffer() { } diff --git a/Kernel/KernelKit/KernelHeap.hpp b/Kernel/KernelKit/KernelHeap.hpp index 7b8cbc7c..6be94a63 100644 --- a/Kernel/KernelKit/KernelHeap.hpp +++ b/Kernel/KernelKit/KernelHeap.hpp @@ -37,8 +37,8 @@ namespace NewOS /// @return if it valid: point has crc now., otherwise fail. Boolean ke_protect_ke_heap(VoidPtr heapPtr); - /// @brief Makes a kernel heap page. - /// @param heapPtr - /// @return - Int32 ke_make_ke_page(VoidPtr heapPtr); + /// @brief Makes a kernel heap page. + /// @param heapPtr + /// @return + Int32 ke_make_ke_page(VoidPtr heapPtr); } // namespace NewOS diff --git a/Kernel/KernelKit/ProcessScheduler.hxx b/Kernel/KernelKit/ProcessScheduler.hxx index 1ac19053..637fc8c4 100644 --- a/Kernel/KernelKit/ProcessScheduler.hxx +++ b/Kernel/KernelKit/ProcessScheduler.hxx @@ -162,8 +162,8 @@ namespace NewOS enum { - kAppKind = 1, - kShLibKind = 2, + kAppKind = 1, + kShLibKind = 2, kKindCount, }; @@ -231,14 +231,14 @@ namespace NewOS /// The main class which you call to schedule an app. class ProcessScheduler final { - explicit ProcessScheduler() = default; + explicit ProcessScheduler() = default; public: ~ProcessScheduler() = default; NEWOS_COPY_DEFAULT(ProcessScheduler) - operator bool(); + operator bool(); bool operator!(); public: diff --git a/Kernel/KernelKit/SMPManager.hpp b/Kernel/KernelKit/SMPManager.hpp index ba706cf6..1840dd20 100644 --- a/Kernel/KernelKit/SMPManager.hpp +++ b/Kernel/KernelKit/SMPManager.hpp @@ -99,8 +99,8 @@ namespace NewOS public: Ref operator[](const SizeT& idx); - bool operator!() noexcept; - operator bool() noexcept; + bool operator!() noexcept; + operator bool() noexcept; public: /// @brief Shared instance of the SMP Manager. diff --git a/Kernel/KernelKit/XCOFF.hxx b/Kernel/KernelKit/XCOFF.hxx index 4574fcf7..0d74b3ef 100644 --- a/Kernel/KernelKit/XCOFF.hxx +++ b/Kernel/KernelKit/XCOFF.hxx @@ -16,7 +16,7 @@ #include -#define cXCOFF64Magic (0x01F7) +#define cXCOFF64Magic (0x01F7) #define cXCOFFRelFlg (0x0001) #define cXCOFFExecutable (0x0002) @@ -41,10 +41,11 @@ typedef struct XCoffFileHeader #define cForkNameLen (255) /// @brief This the executable manifest fork. -typedef struct XCoffForkHeader { - NewOS::Char fPropertiesXMLFork[cForkNameLen]; - NewOS::Char fDynamicLoaderFork[cForkNameLen]; - NewOS::Char fCodeSignFork[cForkNameLen]; +typedef struct XCoffForkHeader +{ + NewOS::Char fPropertiesXMLFork[cForkNameLen]; + NewOS::Char fDynamicLoaderFork[cForkNameLen]; + NewOS::Char fCodeSignFork[cForkNameLen]; } XCoffForkHeader; #endif // ifndef __XCOFF__ diff --git a/Kernel/NetworkKit/IPCEP.hxx b/Kernel/NetworkKit/IPCEP.hxx index a00fa98e..72efae73 100644 --- a/Kernel/NetworkKit/IPCEP.hxx +++ b/Kernel/NetworkKit/IPCEP.hxx @@ -50,8 +50,8 @@ namespace NewOS IPCEPAddressType IpcFrom; IPCEPAddressType IpcTo; UInt32 IpcCRC32; - UInt32 IpcMsg; - UInt32 IpcMsgSz; + UInt32 IpcMsg; + UInt32 IpcMsgSz; } PACKED IPCEPConnectionHeader; } // namespace NewOS diff --git a/Kernel/NewKit/Array.hpp b/Kernel/NewKit/Array.hpp index dca5c13f..b0b94584 100644 --- a/Kernel/NewKit/Array.hpp +++ b/Kernel/NewKit/Array.hpp @@ -26,7 +26,6 @@ namespace NewOS if (At > N) return {}; - kcout << "Returning element\r"; return ErrorOr(&fArray[At]); } diff --git a/Kernel/NewKit/MutableArray.hpp b/Kernel/NewKit/MutableArray.hpp index a3ad4cb1..6be9c15e 100644 --- a/Kernel/NewKit/MutableArray.hpp +++ b/Kernel/NewKit/MutableArray.hpp @@ -173,8 +173,8 @@ namespace NewOS if (!iterationNode) { - fFirstNode = new MutableLinkedList(); - iterationNode = fFirstNode; + fFirstNode = new MutableLinkedList(); + iterationNode = fFirstNode; } MUST_PASS(iterationNode); diff --git a/Kernel/Sources/HError.cxx b/Kernel/Sources/HError.cxx index 1f36d020..5ba02049 100644 --- a/Kernel/Sources/HError.cxx +++ b/Kernel/Sources/HError.cxx @@ -13,7 +13,7 @@ namespace NewOS /// @return if error-free: true, otherwise false. Boolean ke_bug_check(void) noexcept { - /// TODO: + /// TODO: return false; } } // namespace NewOS diff --git a/Kernel/Sources/KeMain.cxx b/Kernel/Sources/KeMain.cxx index 9be8a026..58c76dc4 100644 --- a/Kernel/Sources/KeMain.cxx +++ b/Kernel/Sources/KeMain.cxx @@ -68,7 +68,7 @@ namespace NewOS::Detail } catalogDir = fNewFS->GetParser()->CreateCatalog(cDirStr[dirIndx], 0, - kNewFSCatalogKindDir); + kNewFSCatalogKindDir); NewFork theFork{0}; @@ -157,8 +157,8 @@ namespace NewOS::Detail fNewFS->GetParser()->CreateFork(catalogDisk, theDiskFork); fNewFS->GetParser()->WriteCatalog(catalogDisk, - (NewOS::VoidPtr)diskFolder.CData(), - kNewFSSectorSz, cSrcName); + (NewOS::VoidPtr)diskFolder.CData(), + kNewFSSectorSz, cSrcName); delete catalogDisk; } diff --git a/Kernel/Sources/KernelHeap.cxx b/Kernel/Sources/KernelHeap.cxx index 00dfce8c..c3e8e86b 100644 --- a/Kernel/Sources/KernelHeap.cxx +++ b/Kernel/Sources/KernelHeap.cxx @@ -76,8 +76,8 @@ namespace NewOS } /// @brief Makes a page heap. - /// @param heapPtr - /// @return + /// @param heapPtr + /// @return Int32 ke_make_ke_page(VoidPtr heapPtr) { if (kHeapCount < 1) diff --git a/Kernel/Sources/SMPManager.cxx b/Kernel/Sources/SMPManager.cxx index 683343ff..5002e880 100644 --- a/Kernel/Sources/SMPManager.cxx +++ b/Kernel/Sources/SMPManager.cxx @@ -110,8 +110,8 @@ namespace NewOS fStack->R11 = stack->R11; fStack->R10 = stack->R10; - fStack->R9 = stack->R9; - fStack->R8 = stack->R8; + fStack->R9 = stack->R9; + fStack->R8 = stack->R8; fStack->Rcx = this->fID; } @@ -219,7 +219,7 @@ namespace NewOS if (!fakeThread) { - fakeThread = new HardwareThread(); + fakeThread = new HardwareThread(); } fakeThread->fKind = kInvalidHart; diff --git a/Kernel/Sources/UserHeap.cxx b/Kernel/Sources/UserHeap.cxx index ad3c4aa4..d1de13a6 100644 --- a/Kernel/Sources/UserHeap.cxx +++ b/Kernel/Sources/UserHeap.cxx @@ -37,8 +37,8 @@ namespace NewOS */ class UserHeapManager final { - UserHeapManager() = delete; - + UserHeapManager() = delete; + public: ~UserHeapManager() = default; @@ -47,12 +47,12 @@ namespace NewOS { return s_NumPools; } - + STATIC Ref& Leak() { return s_Pmm; } - + STATIC Boolean& IsEnabled() { return s_PoolsAreEnabled; -- cgit v1.2.3