summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--dev/kernel/src/IPEFDylibObject.cc4
-rw-r--r--dev/kernel/src/KernelTaskScheduler.cc15
-rw-r--r--dev/kernel/src/UserProcessScheduler.cc10
3 files changed, 21 insertions, 8 deletions
diff --git a/dev/kernel/src/IPEFDylibObject.cc b/dev/kernel/src/IPEFDylibObject.cc
index a24fba72..91f8c88a 100644
--- a/dev/kernel/src/IPEFDylibObject.cc
+++ b/dev/kernel/src/IPEFDylibObject.cc
@@ -90,6 +90,10 @@ EXTERN_C IDylibRef rtl_init_dylib_pef(USER_PROCESS& process) {
EXTERN_C Void rtl_fini_dylib_pef(USER_PROCESS& process, IDylibRef dll_obj, BOOL* successful) {
MUST_PASS(successful);
+ if (!successful) {
+ return;
+ }
+
// sanity check (will also trigger a bug check if this fails)
if (dll_obj == nullptr) {
*successful = false;
diff --git a/dev/kernel/src/KernelTaskScheduler.cc b/dev/kernel/src/KernelTaskScheduler.cc
index 1997c175..8bbe5601 100644
--- a/dev/kernel/src/KernelTaskScheduler.cc
+++ b/dev/kernel/src/KernelTaskScheduler.cc
@@ -15,4 +15,17 @@
/// @author Amlal El Mahrouss (amlal@nekernel.org)
/***********************************************************************************/
-namespace Kernel {} // namespace Kernel \ No newline at end of file
+namespace Kernel {
+EXTERN_C Void hal_switch_kernel_task(HAL::StackFramePtr frame, ProcessID kid);
+
+Bool KernelTaskHelper::Switch(HAL::StackFramePtr frame_ptr, ProcessID new_kid) {
+ NE_UNUSED(frame_ptr);
+ NE_UNUSED(new_kid);
+
+ return NO;
+}
+
+Bool KernelTaskHelper::CanBeScheduled(const KERNEL_TASK& task) {
+ return task.Kid > 0 && task.Image.HasCode();
+}
+} // namespace Kernel \ No newline at end of file
diff --git a/dev/kernel/src/UserProcessScheduler.cc b/dev/kernel/src/UserProcessScheduler.cc
index 2306d3e4..ac25c3d8 100644
--- a/dev/kernel/src/UserProcessScheduler.cc
+++ b/dev/kernel/src/UserProcessScheduler.cc
@@ -581,17 +581,13 @@ ErrorOr<ProcessID> UserProcessHelper::TheCurrentPID() {
/// @retval true can be schedulded.
/// @retval false cannot be schedulded.
Bool UserProcessHelper::CanBeScheduled(const USER_PROCESS& process) {
+ if (process.Affinity == AffinityKind::kRealTime) return Yes;
+
if (process.Status != ProcessStatusKind::kRunning) return No;
if (process.Affinity == AffinityKind::kInvalid) return No;
if (process.StackSize > kSchedMaxStackSz) return No;
if (!process.Name[0]) return No;
-
- // real time processes shouldn't wait that much.
- if (process.Affinity == AffinityKind::kRealTime) return Yes;
-
- if (process.Signal.SignalID == sig_generate_unique<SIGTRAP>()) {
- return No;
- }
+ if (process.Signal.SignalID == sig_generate_unique<SIGTRAP>()) return No;
return process.PTime < 1;
}