diff options
| author | Amlal EL Mahrouss <amlal@softwarelabs.com> | 2024-06-12 18:09:07 +0200 |
|---|---|---|
| committer | Amlal EL Mahrouss <amlal@softwarelabs.com> | 2024-06-12 18:09:07 +0200 |
| commit | 4b58295fb04c2430817301352fadce33178f94d4 (patch) | |
| tree | fb16edeb9d81ee475200bbbf9a5125822ea2a589 /Kernel/Sources | |
| parent | 6a3b080067ff47f84c400987982cfa44927fe7e0 (diff) | |
MHR-30: initial commit.
Signed-off-by: Amlal EL Mahrouss <amlal@softwarelabs.com>
Diffstat (limited to 'Kernel/Sources')
| -rw-r--r-- | Kernel/Sources/KeMain.cxx (renamed from Kernel/Sources/AppMain.cxx) | 29 | ||||
| -rw-r--r-- | Kernel/Sources/ProcessScheduler.cxx | 3 | ||||
| -rw-r--r-- | Kernel/Sources/SMPManager.cxx | 15 |
3 files changed, 31 insertions, 16 deletions
diff --git a/Kernel/Sources/AppMain.cxx b/Kernel/Sources/KeMain.cxx index 55b7f403..f4f9f44c 100644 --- a/Kernel/Sources/AppMain.cxx +++ b/Kernel/Sources/KeMain.cxx @@ -2,7 +2,7 @@ Copyright Zeta Electronics Corporation - File: AppMain.cxx + File: KeMain.cxx Purpose: Kernel main loop. ------------------------------------------- */ @@ -182,29 +182,29 @@ namespace NewOS::Detail /// @brief System loader entrypoint. /// @param void no parameters. /// @return void no return value. - STATIC NewOS::Void AppSystem(NewOS::Void) + STATIC NewOS::Void SystemLauncher_Main(NewOS::Void) { - NewOS::PEFLoader wndServer("/System/WindowServer"); + NewOS::PEFLoader lockScreen("/System/LockScreen"); - if (!wndServer.IsLoaded()) + if (!lockScreen.IsLoaded()) { NewOS::ke_stop(RUNTIME_CHECK_FAILED); } - NewOS::Utils::execute_from_image(wndServer, + NewOS::Utils::execute_from_image(lockScreen, NewOS::ProcessHeader::kAppKind); - NewOS::PEFLoader launchServer("/System/Launcher"); + NewOS::PEFLoader stageBoard("/System/StageBoard"); - if (!launchServer.IsLoaded()) + if (!stageBoard.IsLoaded()) { NewOS::ke_stop(RUNTIME_CHECK_FAILED); } - NewOS::Utils::execute_from_image(launchServer, + NewOS::Utils::execute_from_image(stageBoard, NewOS::ProcessHeader::kAppKind); - NewOS::kcout << "System: done, sleeping..."; + NewOS::kcout << "SystemLauncher: done, sleeping..."; while (true) {} } @@ -213,13 +213,16 @@ namespace NewOS::Detail /// @brief Application entrypoint. /// @param Void /// @return Void -EXTERN_C NewOS::Void AppMain(NewOS::Void) +EXTERN_C NewOS::Void KeMain(NewOS::Void) { /// Now run kernel loop, until no process are running. NewOS::Detail::FilesystemWizard wizard; // automatic. - auto cLoaderName = "System"; - NewOS::execute_from_image(NewOS::Detail::AppSystem, cLoaderName); + auto cLoaderName = "SystemLauncher"; + NewOS::execute_from_image(NewOS::Detail::SystemLauncher_Main, cLoaderName); - while (NewOS::ProcessScheduler::The().Leak().Run() > 0) {} + while (true) + { + NewOS::ProcessScheduler::The().Leak().Run(); + } } diff --git a/Kernel/Sources/ProcessScheduler.cxx b/Kernel/Sources/ProcessScheduler.cxx index 1a49af22..08a7971e 100644 --- a/Kernel/Sources/ProcessScheduler.cxx +++ b/Kernel/Sources/ProcessScheduler.cxx @@ -215,9 +215,6 @@ namespace NewOS if (!mTeam.AsArray().Count() > kSchedProcessLimitPerTeam) return -kErrorOutOfTeamSlot; - if (process.Leak().Ring != (Int32)ProcessSelector::kRingKernel) - return -1; - kcout << "ProcessScheduler::Add(Ref<ProcessHeader>& process)\r"; /// Create heap according to type of process. diff --git a/Kernel/Sources/SMPManager.cxx b/Kernel/Sources/SMPManager.cxx index b2c3f488..f0b680ce 100644 --- a/Kernel/Sources/SMPManager.cxx +++ b/Kernel/Sources/SMPManager.cxx @@ -99,6 +99,21 @@ namespace NewOS fStack->Rsp = stack->Rsp; fStack->Fs = stack->Fs; fStack->Gs = stack->Gs; + + // save global registers. + + fStack->R15 = stack->R15; + fStack->R14 = stack->R14; + + fStack->R13 = stack->R13; + fStack->R12 = stack->R12; + fStack->R11 = stack->R11; + + fStack->R10 = stack->R10; + fStack->R9 = stack->R9; + fStack->R8 = stack->R8; + + fStack->Exception = this->fID; } rt_do_context_switch(fStack); |
