summaryrefslogtreecommitdiffhomepage
path: root/dev/zka/src/UserProcessScheduler.cc
diff options
context:
space:
mode:
Diffstat (limited to 'dev/zka/src/UserProcessScheduler.cc')
-rw-r--r--dev/zka/src/UserProcessScheduler.cc31
1 files changed, 13 insertions, 18 deletions
diff --git a/dev/zka/src/UserProcessScheduler.cc b/dev/zka/src/UserProcessScheduler.cc
index 05c2b35e..844afa5d 100644
--- a/dev/zka/src/UserProcessScheduler.cc
+++ b/dev/zka/src/UserProcessScheduler.cc
@@ -113,7 +113,7 @@ namespace Kernel
{
#ifdef __ZKA_AMD64__
auto pd = hal_read_cr3();
- hal_write_cr3(reinterpret_cast<VoidPtr>(this->MemoryPD));
+ hal_write_cr3(reinterpret_cast<VoidPtr>(this->VMRegister));
auto ptr = mm_new_heap(sz, Yes, Yes);
@@ -174,7 +174,7 @@ namespace Kernel
{
#ifdef __ZKA_AMD64__
auto pd = hal_read_cr3();
- hal_write_cr3(reinterpret_cast<VoidPtr>(this->MemoryPD));
+ hal_write_cr3(reinterpret_cast<VoidPtr>(this->VMRegister));
auto ret = mm_delete_heap(entry->MemoryEntry);
@@ -250,7 +250,7 @@ namespace Kernel
{
#ifdef __ZKA_AMD64__
auto pd = hal_read_cr3();
- hal_write_cr3(reinterpret_cast<VoidPtr>(this->MemoryPD));
+ hal_write_cr3(reinterpret_cast<VoidPtr>(this->VMRegister));
#endif
MUST_PASS(mm_delete_heap(memory_list->MemoryEntry));
@@ -269,7 +269,7 @@ namespace Kernel
}
//! Free the memory's page directory.
- HAL::mm_free_bitmap(reinterpret_cast<VoidPtr>(this->MemoryPD));
+ HAL::mm_free_bitmap(reinterpret_cast<VoidPtr>(this->VMRegister));
//! Delete image if not done already.
if (this->Image && mm_is_valid_heap(this->Image))
@@ -310,14 +310,12 @@ namespace Kernel
SizeT UserProcessScheduler::Add(UserProcess process)
{
if (mTeam.mProcessAmount > kSchedProcessLimitPerTeam)
- return 0;
+ return -kErrorInvalidData;
#ifdef __ZKA_AMD64__
- process.MemoryPD = reinterpret_cast<UIntPtr>(HAL::mm_alloc_bitmap(Yes, Yes, sizeof(PDE), Yes));
+ process.VMRegister = reinterpret_cast<UIntPtr>(HAL::mm_alloc_bitmap(Yes, Yes, sizeof(PDE), Yes));
#endif // __ZKA_AMD64__
- process.Status = ProcessStatusKind::kStarting;
-
process.StackFrame = (HAL::StackFramePtr)mm_new_heap(sizeof(HAL::StackFrame), Yes, Yes);
if (!process.StackFrame)
@@ -347,22 +345,18 @@ namespace Kernel
if (!process.StackReserve)
{
- mm_delete_heap(process.StackFrame);
- process.StackFrame = nullptr;
+ process.Crash();
return -kErrorProcessFault;
}
++mTeam.mProcessAmount;
process.ProcessId = mTeam.mProcessAmount;
- process.Status = ProcessStatusKind::kRunning;
-
- // avoid the pitfalls of moving process.
- auto ret_pid = process.ProcessId;
+ process.Status = ProcessStatusKind::kStarting;
- mTeam.AsArray()[process.ProcessId] = move(process);
+ mTeam.AsArray()[process.ProcessId] = process;
- return ret_pid;
+ return process.ProcessId;
}
/***********************************************************************************/
@@ -384,7 +378,7 @@ namespace Kernel
/***********************************************************************************/
- Bool UserProcessScheduler::Remove(ProcessID process_id)
+ const Bool UserProcessScheduler::Remove(ProcessID process_id)
{
// check if process is within range.
if (process_id > mTeam.AsArray().Count())
@@ -408,6 +402,7 @@ namespace Kernel
const Bool UserProcessScheduler::HasMP()
{
+ MUST_PASS(kHandoverHeader);
return kHandoverHeader->f_HardwareTables.f_MultiProcessingEnabled;
}
@@ -447,7 +442,7 @@ namespace Kernel
this->CurrentProcess() = process;
// tell helper to find a core to schedule on.
- if (!UserProcessHelper::Switch(process.Image, &process.StackReserve[process.StackSize - 1], process.StackFrame,
+ if (!UserProcessHelper::Switch(process.Image, &process.StackReserve[process.StackSize], process.StackFrame,
process.ProcessId))
{
process.Crash();