23#ifndef _MINIOS_SCHED_SCHED_H_
24#define _MINIOS_SCHED_SCHED_H_
33#define THREAD_STACK_SIZE 16384
42#define SCHED_MAX_THREADS (MAX_CPUS + 8)
44#define USER_STACK_TOP 0x7FFFFFFFE000ULL
45#define USER_STACK_PAGES 16
59#define MMAP_BASE 0x70000000000ULL
60#define MMAP_MAX_REGIONS 64
62#define MMAP_REGION_ANON 0
63#define MMAP_REGION_FILE 1
79#define THREAD_GROUP_MAX 4
251#define PTRACE_STOP_SYSCALL_ENTRY 1
252#define PTRACE_STOP_SYSCALL_EXIT 2
253#define PTRACE_STOP_EXEC 3
254#define PTRACE_STOP_SINGLESTEP 4
258#define THREAD_FDT(t) ((t)->tg ? (t)->tg->fd_table : (t)->fd_table)
259#define THREAD_BRK_PTR(t) ((t)->tg ? &(t)->tg->brk : &(t)->brk)
260#define THREAD_BRK_BASE_PTR(t) ((t)->tg ? &(t)->tg->brk_base : &(t)->brk_base)
261#define THREAD_MMAP_PTR(t) ((t)->tg ? &(t)->tg->mmap_next : &(t)->mmap_next)
262#define THREAD_MMAPR(t) ((t)->tg ? (t)->tg->mmap_regions : (t)->mmap_regions)
263#define THREAD_CWD(t) ((t)->tg ? (t)->tg->cwd : (t)->cwd)
264#define THREAD_PML4(t) ((t)->tg ? (t)->tg->pml4_phys : (t)->pml4_phys)
366void sched_exit_current(
int code);
387struct thread *sched_fork(
void);
494extern volatile uint64_t sched_tick_count;
bool sched_has_user_threads(void)
Definition sched.c:320
void sched_activate_task(struct thread *t)
Definition sched.c:667
void sched_ptrace_stop(int reason)
Definition sched.c:382
void sched_wake_tid(uint32_t tid)
Definition sched.c:404
void sched_signal_thread(struct thread *t, int sig)
Definition sched.c:338
void sched_stop_current(int stop_signal)
Definition sched.c:364
struct thread * sched_create_user_task(uint64_t entry_rip)
Definition sched.c:557
void sched_tick(void)
Definition sched.c:481
struct thread * sched_create_thread(thread_func_t func, void *arg)
Definition sched.c:167
void sched_yield(void)
Definition sched.c:536
struct thread_group thread_group_t
#define SCHED_MAX_THREADS
Definition sched.h:42
thread_group_t thread_group_pool[THREAD_GROUP_MAX]
struct thread * sched_current(void)
Definition sched.c:277
struct thread * sched_next(void)
Definition sched.c:296
thread_state_t
Definition sched.h:47
@ THREAD_DEAD
Definition sched.h:50
@ THREAD_WAITING
Definition sched.h:51
@ THREAD_BLOCKED
Definition sched.h:52
@ THREAD_FUTEX_WAIT
Definition sched.h:53
@ THREAD_STOPPED
Definition sched.h:54
@ THREAD_RUNNABLE
Definition sched.h:48
@ THREAD_RUNNING
Definition sched.h:49
#define THREAD_GROUP_MAX
Definition sched.h:79
void sched_init(void)
Definition sched.c:104
void(* thread_func_t)(void *arg)
Definition sched.h:57
void sched_init_cpu(uint32_t cpu_id)
spinlock_t thread_pool_lock
void sched_work_steal(void)
Definition sched_balance.c:85
void sched_balance_enqueue(struct thread *t)
Definition sched_balance.c:42
struct mini_sigaction mini_sigaction_t
uint64_t virt_addr
Definition sched.h:66
uint32_t file_inode
Definition sched.h:72
int lazy
Definition sched.h:70
uint64_t file_offset
Definition sched.h:73
uint64_t len
Definition sched.h:67
uint64_t file_size
Definition sched.h:74
int region_type
Definition sched.h:69
vfs_ops_t * file_ops
Definition sched.h:75
int prot
Definition sched.h:68
uint64_t pml4_phys
Definition sched.h:91
uint64_t brk_base
Definition sched.h:87
int in_use
Definition sched.h:82
spinlock_t lock
Definition sched.h:84
char cwd[VFS_PATH_MAX]
Definition sched.h:90
uint64_t brk
Definition sched.h:86
uint64_t mmap_next
Definition sched.h:88
mmap_region_t * mmap_regions
Definition sched.h:89
vfs_file_t * fd_table
Definition sched.h:85
int ref_count
Definition sched.h:83
volatile uint32_t * futex_uaddr
Definition sched.h:197
uint32_t pgid
Definition sched.h:118
uint32_t cmdline_len
Definition sched.h:208
uint64_t syscall_restart_args[6]
Definition sched.h:165
uint32_t tid
Definition sched.h:97
uint64_t signal_trampoline_va
Definition sched.h:170
uint64_t saved_user_rsi
Definition sched.h:138
uint64_t brk
Definition sched.h:144
struct thread_group * tg
Definition sched.h:188
int64_t ptrace_syscall_ret
Definition sched.h:231
uint64_t saved_user_rfl
Definition sched.h:124
uint64_t itimer_real_interval_ticks
Definition sched.h:160
uint32_t ptrace_tracer_tid
Definition sched.h:229
uint8_t signal_ctx_restart_pending
Definition sched.h:179
struct task_cpu_context ctx
Definition sched.h:99
uint32_t pid
Definition sched.h:116
thread_state_t state
Definition sched.h:98
uint64_t signal_ctx_restart_nr
Definition sched.h:177
uint8_t syscall_restart_pending
Definition sched.h:167
uint64_t itimer_real_deadline_ticks
Definition sched.h:159
uint64_t brk_base
Definition sched.h:145
uint32_t tgid
Definition sched.h:189
uint32_t _tg_pad
Definition sched.h:190
uint64_t syscall_restart_nr
Definition sched.h:164
uint64_t signal_ctx_restart_args[6]
Definition sched.h:178
uint64_t mmap_next
Definition sched.h:151
uint64_t saved_user_r15
Definition sched.h:133
volatile uint32_t * clear_tid_addr
Definition sched.h:200
mmap_region_t * mmap_regions
Definition sched.h:152
uint32_t pending_signals
Definition sched.h:155
struct task_cpu_context * ptrace_trap_ctx
Definition sched.h:245
int exit_code
Definition sched.h:113
uint8_t _signal_ctx_pad[7]
Definition sched.h:180
char cmdline[128]
Definition sched.h:207
uint64_t pml4_phys
Definition sched.h:194
uint64_t user_stack_phys_base
Definition sched.h:104
uint8_t _restart_pad[6]
Definition sched.h:169
uint64_t saved_user_rdx
Definition sched.h:139
char comm[16]
Definition sched.h:206
uint8_t itimer_real_active
Definition sched.h:161
uint8_t stop_signal
Definition sched.h:215
uint64_t signal_ctx_rsp
Definition sched.h:175
struct thread * next
Definition sched.h:101
uint64_t signal_ctx_restart_rip
Definition sched.h:176
uint64_t saved_user_r12
Definition sched.h:130
uint8_t ptrace_stop_reason
Definition sched.h:228
uint32_t sid
Definition sched.h:119
uint8_t ptrace_trace_syscalls
Definition sched.h:227
uint8_t syscall_last_signal
Definition sched.h:168
uint64_t utime_ticks
Definition sched.h:209
uint64_t saved_user_rsp
Definition sched.h:122
char cwd[VFS_PATH_MAX]
Definition sched.h:185
uint32_t parent_tid
Definition sched.h:112
uint64_t ptrace_syscall_nr
Definition sched.h:230
uint64_t user_stack_virt_top
Definition sched.h:105
uint64_t saved_user_rbp
Definition sched.h:128
uint64_t saved_user_rip
Definition sched.h:123
vfs_file_t * fd_table
Definition sched.h:109
uint8_t user_stack_pages
Definition sched.h:106
uint64_t syscall_restart_saved_rip
Definition sched.h:166
uint64_t signal_ctx_rip
Definition sched.h:174
uint8_t ptrace_traced
Definition sched.h:226
uint64_t saved_user_rdi
Definition sched.h:137
uint8_t * stack_base
Definition sched.h:100
mini_sigaction_t signal_actions[32]
Definition sched.h:156
uint64_t saved_user_r14
Definition sched.h:132
uint32_t ppid
Definition sched.h:117
uint64_t saved_user_r13
Definition sched.h:131
uint64_t saved_user_rbx
Definition sched.h:129
unsigned int uint32_t
Definition types.h:34
signed long int int64_t
Definition types.h:36
unsigned long int uint64_t
Definition types.h:37
unsigned char uint8_t
Definition types.h:28
#define VFS_PATH_MAX
Definition vfs.h:32
struct vfs_file vfs_file_t