summaryrefslogtreecommitdiffhomepage
path: root/dev/zka/src
diff options
context:
space:
mode:
Diffstat (limited to 'dev/zka/src')
-rw-r--r--dev/zka/src/ACPIFactoryInterface.cxx2
-rw-r--r--dev/zka/src/BitMapMgr.cxx4
-rw-r--r--dev/zka/src/DriveMgr.cxx2
-rw-r--r--dev/zka/src/HardwareThreadScheduler.cxx6
-rw-r--r--dev/zka/src/Heap.cxx1
-rw-r--r--dev/zka/src/Stop.cxx2
-rw-r--r--dev/zka/src/UserProcessScheduler.cxx60
7 files changed, 35 insertions, 42 deletions
diff --git a/dev/zka/src/ACPIFactoryInterface.cxx b/dev/zka/src/ACPIFactoryInterface.cxx
index 6d7d7c3c..4a04d7b9 100644
--- a/dev/zka/src/ACPIFactoryInterface.cxx
+++ b/dev/zka/src/ACPIFactoryInterface.cxx
@@ -64,7 +64,7 @@ namespace Kernel
if (signature_index == (cAcpiSignatureLength - 1))
{
- kcout << "ACPI: Found the SDT. " << endl;
+ kcout << "ACPI: Found the SDT" << endl;
return ErrorOr<voidPtr>(reinterpret_cast<voidPtr>(xsdt->AddressArr[index]));
}
}
diff --git a/dev/zka/src/BitMapMgr.cxx b/dev/zka/src/BitMapMgr.cxx
index 270783f2..1f4b4860 100644
--- a/dev/zka/src/BitMapMgr.cxx
+++ b/dev/zka/src/BitMapMgr.cxx
@@ -143,8 +143,8 @@ namespace Kernel
return;
}
- kcout << "Magic BitMap Number: " << hex_number(ptr_bit_set[cBitMapMagIdx]) << endl;
- kcout << "Allocated: " << (ptr_bit_set[cBitMapUsedIdx] ? "Yes" : "No") << endl;
+ kcout << "Magic Number: " << hex_number(ptr_bit_set[cBitMapMagIdx]) << endl;
+ kcout << "Is Allocated: " << (ptr_bit_set[cBitMapUsedIdx] ? "Yes" : "No") << endl;
kcout << "Size of BitMap (B): " << number(ptr_bit_set[cBitMapSizeIdx]) << endl;
kcout << "Size of BitMap (KIB): " << number(KIB(ptr_bit_set[cBitMapSizeIdx])) << endl;
kcout << "Size of BitMap (MIB): " << number(MIB(ptr_bit_set[cBitMapSizeIdx])) << endl;
diff --git a/dev/zka/src/DriveMgr.cxx b/dev/zka/src/DriveMgr.cxx
index ecec5cec..d9bf57f2 100644
--- a/dev/zka/src/DriveMgr.cxx
+++ b/dev/zka/src/DriveMgr.cxx
@@ -156,7 +156,7 @@ namespace Kernel
trait.fInit = io_drv_init;
trait.fDriveKind = io_drv_kind;
- kcout << "Constructed drive successfully..\r";
+ kcout << "Constructed drive successfully.\r";
return trait;
}
diff --git a/dev/zka/src/HardwareThreadScheduler.cxx b/dev/zka/src/HardwareThreadScheduler.cxx
index e3bf5a73..50a153f1 100644
--- a/dev/zka/src/HardwareThreadScheduler.cxx
+++ b/dev/zka/src/HardwareThreadScheduler.cxx
@@ -17,7 +17,7 @@
namespace Kernel
{
- HardwareThreadScheduler* cHardwareThreadScheduler = nullptr;
+ HardwareThreadScheduler* kHardwareThreadScheduler = nullptr;
///! A HardwareThread class takes care of it's owned hardware thread.
///! It has a stack for it's core.
@@ -133,8 +133,8 @@ namespace Kernel
/// @brief Shared singleton function
HardwareThreadScheduler& HardwareThreadScheduler::The()
{
- MUST_PASS(cHardwareThreadScheduler);
- return *cHardwareThreadScheduler;
+ MUST_PASS(kHardwareThreadScheduler);
+ return *kHardwareThreadScheduler;
}
/// @brief Get Stack Frame of Core
diff --git a/dev/zka/src/Heap.cxx b/dev/zka/src/Heap.cxx
index 4311257e..63e9286a 100644
--- a/dev/zka/src/Heap.cxx
+++ b/dev/zka/src/Heap.cxx
@@ -15,6 +15,7 @@
Revision History:
10/8/24: FIX: Fix useless long name, alongside a new WR (WriteRead) field.
+ 20/10/24: Fix mm_new_ and mm_delete_ APIs inside Heap.hxx header. (amlal)
------------------------------------------- */
diff --git a/dev/zka/src/Stop.cxx b/dev/zka/src/Stop.cxx
index afbc223b..39e57070 100644
--- a/dev/zka/src/Stop.cxx
+++ b/dev/zka/src/Stop.cxx
@@ -47,7 +47,7 @@ namespace Kernel
switch (id)
{
case RUNTIME_CHECK_PROCESS: {
- CGDrawString("0x00000008 Scheduler error.", start_y, x, panic_text);
+ CGDrawString("0x00000008 Multi-Task error.", start_y, x, panic_text);
break;
}
case RUNTIME_CHECK_ACPI: {
diff --git a/dev/zka/src/UserProcessScheduler.cxx b/dev/zka/src/UserProcessScheduler.cxx
index 7b84f1fb..6802f59d 100644
--- a/dev/zka/src/UserProcessScheduler.cxx
+++ b/dev/zka/src/UserProcessScheduler.cxx
@@ -3,13 +3,13 @@
Copyright ZKA Web Services Co.
FILE: UserProcessScheduler.cxx
- PURPOSE: Low Exception Process scheduler.
+ PURPOSE: EL0/Ring-3 Process scheduler.
------------------------------------------- */
/***********************************************************************************/
/// @file UserProcessScheduler.cxx
-/// @brief User Process scheduler.
+/// @brief User process scheduler.
/***********************************************************************************/
#include <ArchKit/ArchKit.hxx>
@@ -38,8 +38,8 @@ namespace Kernel
/// @brief User Process scheduler global and external reference of thread scheduler.
/***********************************************************************************/
- UserProcessScheduler* cProcessScheduler = nullptr;
- EXTERN HardwareThreadScheduler* cHardwareThreadScheduler;
+ UserProcessScheduler* kProcessScheduler = nullptr;
+ EXTERN HardwareThreadScheduler* kHardwareThreadScheduler;
/// @brief Gets the last exit code.
/// @note Not thread-safe.
@@ -55,15 +55,13 @@ namespace Kernel
Void UserProcess::Crash()
{
- if (*this->Name != 0 &&
- *this->Name > 'A')
+ if (this->Status != ProcessStatusKind::kRunning)
+ return;
+
+ if (*this->Name != 0)
{
kcout << this->Name << ": crashed, error id: " << number(kErrorProcessFault) << endl;
}
- else
- {
- return;
- }
this->Exit(kErrorProcessFault);
}
@@ -373,8 +371,8 @@ namespace Kernel
UserProcessScheduler& UserProcessScheduler::The()
{
- MUST_PASS(cProcessScheduler);
- return *cProcessScheduler;
+ MUST_PASS(kProcessScheduler);
+ return *kProcessScheduler;
}
/***********************************************************************************/
@@ -427,20 +425,21 @@ namespace Kernel
for (; process_index < mTeam.AsArray().Capacity(); ++process_index)
{
- kcout << "Grabbing available process in team...\r";
-
auto& process = mTeam.AsArray()[process_index];
//! check if process needs to be scheduled.
if (UserProcessHelper::CanBeScheduled(process))
{
- kcout << process.Name << ": will be runned.\r";
-
// Set current process header.
this->CurrentProcess() = process;
process.PTime = static_cast<Int32>(process.Affinity);
+ UserProcessScheduler::The().CurrentProcess().Leak().Status = ProcessStatusKind::kFrozen;
+ UserProcessScheduler::The().CurrentProcess() = process;
+
+ kcout << "Switch to '" << process.Name << "'.\r";
+
// tell helper to find a core to schedule on.
if (!UserProcessHelper::Switch(process.Image, &process.StackReserve[process.StackSize - 1], process.StackFrame,
process.ProcessId))
@@ -451,7 +450,8 @@ namespace Kernel
}
else
{
- --process.PTime;
+ if (process.Status == ProcessStatusKind::kRunning)
+ --process.PTime;
}
}
@@ -481,7 +481,7 @@ namespace Kernel
PID& UserProcessHelper::TheCurrentPID()
{
kcout << "UserProcessHelper::TheCurrentPID: Leaking ProcessId...\r";
- return cProcessScheduler->CurrentProcess().Leak().ProcessId;
+ return kProcessScheduler->CurrentProcess().Leak().ProcessId;
}
/// @brief Check if process can be schedulded.
@@ -490,9 +490,7 @@ namespace Kernel
/// @retval false cannot be schedulded.
Bool UserProcessHelper::CanBeScheduled(const UserProcess& process)
{
- kcout << "Checking UserProcess status...\r";
-
- if (process.Status == ProcessStatusKind::kFrozen ||
+ if (process.Status == ProcessStatusKind::kKilled ||
process.Status == ProcessStatusKind::kDead)
return No;
@@ -511,14 +509,14 @@ namespace Kernel
Bool UserProcessHelper::InitializeScheduler()
{
- if (!cProcessScheduler)
+ if (!kProcessScheduler)
{
- cProcessScheduler = new UserProcessScheduler();
+ kProcessScheduler = new UserProcessScheduler();
}
- if (!cHardwareThreadScheduler)
+ if (!kHardwareThreadScheduler)
{
- cHardwareThreadScheduler = new HardwareThreadScheduler();
+ kHardwareThreadScheduler = new HardwareThreadScheduler();
}
return Yes;
@@ -526,21 +524,15 @@ namespace Kernel
/***********************************************************************************/
/**
- * @brief Start the scheduler.
+ * @brief Start scheduling current AP/Hart/Core.
*/
/***********************************************************************************/
-
SizeT UserProcessHelper::StartScheduling()
{
- kcout << "UserProcessScheduler: Trying to schedule user processes...\r";
-
- if (!cProcessScheduler)
+ if (!kProcessScheduler)
return 0;
- kcout << "UserProcessScheduler: Object is valid, scheduling user processes...\r";
-
- SizeT ret = cProcessScheduler->Run();
- return ret;
+ return kProcessScheduler->Run();
}
/***********************************************************************************/