Nucleus
Barry Fixed scheduler double-schedule bug 6063f66 (3 years, 2 months ago)
diff --git a/include/nucleus/task.h b/include/nucleus/task.h
index 5c3d606..17b5c09 100644
--- a/include/nucleus/task.h
+++ b/include/nucleus/task.h
@@ -39,7 +39,7 @@ struct Task {
enum Priority priority;
enum State state;
uint32_t inCriticalSection;
- uint8_t inSyscall;
+ uint32_t inSyscall;
uintptr_t esi, edi, ebx;
uintptr_t esp, ebp, eip;
@@ -83,8 +83,24 @@ exit_critical_section(void)
__atomic_sub_fetch(¤t->inCriticalSection, 1, __ATOMIC_RELAXED);
}
+/* Enter system call context */
+static inline void
+enter_syscall_context(uint32_t syscall)
+{
+ current->inSyscall = syscall;
+}
+/* Exit system call context */
+static inline uint32_t
+exit_syscall_context(void)
+{
+ uint32_t syscall = current->inSyscall;
+ current->inSyscall = 0;
+ return syscall;
+}
+
void init_tasking(void);
void block_task(enum State reason, ObjectList *list);
+void unblock_task(Task *task);
Task *find_task(pid_t tid);
void schedule(void);
pid_t clone(int flags);