32#ifndef __AA64_SCHED_H__
33#define __AA64_SCHED_H__
44#define THREAD_STATE_READY 1
45#define THREAD_STATE_BLOCKED 3
46#define THREAD_STATE_SLEEP 4
47#define THREAD_STATE_KILLABLE 5
48#define THREAD_STATE_LEFT_IN_KERNEL 6
49#define THREAD_STATE_PENDING_SIGNAL 7
50#define THREAD_STATE_RUNNING 8
56#define THREAD_LEVEL_KERNEL (1 << 0)
57#define THREAD_LEVEL_USER (1 << 1)
58#define THREAD_LEVEL_SUBTHREAD (1 << 2)
59#define THREAD_LEVEL_MAIN_THREAD (1 << 3)
80#define MAX_SIGNAL_ENTRY 10
82typedef struct _gp_context_ {
89typedef struct _signal_frame_ {
96typedef struct _aa64_task_ {
131 bool returnFromSyscall;
142 struct _aa64_task_* next;
143 struct _aa64_task_* prev;
#define AU_ALIGN(x)
Definition aurora.h:42
#define AU_EXTERN
Definition aurora.h:54
#define AU_EXPORT
Definition aurora.h:40
#define signal(signum, handler)
signal – register a signal handler to a specific signal number
Definition signal.h:42
XETime t
Definition main.cpp:53
unsigned int uint32_t
Definition acefiex.h:163
unsigned char uint8_t
Definition acefiex.h:161
COMPILER_DEPENDENT_UINT64 uint64_t
Definition acefiex.h:165
unsigned short int uint16_t
Definition acefiex.h:162
struct drm_crtc struct drm_plane struct drm_plane const struct drm_crtc_funcs const char * name
Definition drm_crtc.h:1242
void * data
Definition kthread.h:30
int x
Definition layout.c:118
void(* entry)(void *)
Definition process.h:101
AA64Thread * AuGetIdleThread()
Definition sched.c:675
uint64_t thread_id
Definition sched.c:80
void AuSchedulerInitialize()
AuSchedulerInitialize – initialize the scheduler.
Definition sched.c:642
AA64Thread * AuThreadFindByIDSleepList(uint64_t id)
AuThreadFindByIDSleepList – finds a thread by its id from the sleep queue.
Definition sched.c:835
void AuThreadAwakeWaiters(AA64Thread *thread)
AuThreadAwakeWaiters – unblock all awaiting threads for the current thread @praram thread – current t...
Definition sched.c:1025
int AuThreadWaitForTermination(int thread_id)
AuThreadWaitForTermination – wait for desired thread termination.
Definition sched.c:982
void AuScheduleThread(AA64Registers *regs)
AuScheduleThread – the core of multi-tasking. It schedules threads next to be runned.
Definition sched.c:463
AA64Thread * AuCreateSubKthread(void(*entry)(uint64_t), uint64_t stack, uint64_t *pml, char *name)
AuCreateSubKthread – create sub kernel thread of parent kthread.
Definition sched.c:270
bool AuSchedValidateLists(void)
AuSchedValidateLists – consistency-check all scheduler lists.
Definition sched.c:927
void AuThreadMakeReady(AA64Thread *thread)
AuThreadMakeReady – make a thread forcefully ready for next.
Definition sched.c:781
uint64_t AuCreateKernelStack(uint64_t *pml)
AuCreateKernelStack – maps kernel stack and return the top of the stack, it only maps 4KiB of stack.
Definition sched.c:608
int AuSchedYieldMs(uint64_t ms)
Definition sched.c:569
void AuSchedUnlock(uint64_t d)
Definition sched.c:101
void AuScheduleNext()
AuScheduleNext – forcefully schedule to idle thread.
Definition sched.c:588
uint64_t AuSchedLock(void)
Definition sched.c:91
void AuThreadWakePoller(AA64Thread *t)
AuThreadWakePoller – wake up a thread that was left in sleep/block while polling.
Definition sched.c:732
void AuEDFRemove(AA64Thread *thread)
AuEDFRemove – drop a thread's EDF reservation.
Definition sched_edf.c:74
AA64Thread * AuEDFPickNext(void)
AuEDFPickNext – earliest absolute deadline among runnable EDF threads Accepts READY and LEFT_IN_KERNE...
Definition sched_edf.c:144
void AuEDFSelfTestStart(void)
Definition sched_edf.c:196
uint64_t AuEDFGetMisses(AA64Thread *thread)
Definition sched_edf.c:160
void AuEDFWaitPeriod(AA64Thread *thread)
AuEDFWaitPeriod – end current job, sleep until next release Must be called by the EDF thread itself (...
Definition sched_edf.c:90
void AuEDFHandleReleases(uint64_t now_us)
AuEDFHandleReleases – wake EDF threads whose release arrived Called once per timer tick from AuSchedu...
Definition sched_edf.c:122
bool AuEDFSetParams(AA64Thread *thread, uint64_t period_us, uint64_t wcet_us)
AuEDFSetParams – admit a thread to the EDF class.
Definition sched_edf.c:45
void AuSoakStart(void)
Definition sched_soak.c:167
Definition x86_64_sched.h:98
uint64_t ss
Definition x86_64_sched.h:102
char ** argvs
Definition x86_64_sched.h:105
uint64_t stackBase
Definition x86_64_sched.h:106
uint64_t argvaddr
Definition x86_64_sched.h:104
uint64_t entrypoint
Definition x86_64_sched.h:99
uint64_t rsp
Definition x86_64_sched.h:100
int num_args
Definition x86_64_sched.h:103
uint64_t cs
Definition x86_64_sched.h:101
void AuHandleSleepThreads()
Definition x86_64_sched.cpp:380
AU_EXTERN AU_EXPORT void AuForceScheduler()
AuForceScheduler – force the scheduler to switch next thread.
Definition x86_64_sched.cpp:621
AU_EXTERN AU_EXPORT void AuUnblockThread(AuThread *t)
Definition x86_64_sched.cpp:541
void AuSchedulerStart()
AuSchedulerStart – start the scheduler.
Definition x86_64_sched.cpp:485
AU_EXTERN AU_EXPORT AuThread * AuThreadFindByIDBlockList(uint16_t id)
Definition x86_64_sched.cpp:609
AU_EXTERN AU_EXPORT AuThread * AuGetCurrentThread()
Definition x86_64_sched.cpp:505
AU_EXTERN AU_EXPORT void AuSleepThread(AuThread *thread, uint64_t ms)
Definition x86_64_sched.cpp:523
AU_EXTERN AU_EXPORT AuThread * AuThreadFindByID(uint16_t id)
Definition x86_64_sched.cpp:596
struct _uentry_ AuUserEntry
AU_EXTERN AU_EXPORT void AuBlockThread(AuThread *thread)
Definition x86_64_sched.cpp:514
void AuThreadMoveToTrash(AuThread *t)
Definition x86_64_sched.cpp:560
void AuThreadCleanTrash(AuThread *t)
Definition x86_64_sched.cpp:587
AU_EXTERN AU_EXPORT uint64_t AuGetSystemTimerTick()
AuGetSystemTimerTick – return the current system timer tick.
Definition x86_64_sched.cpp:634
AU_EXTERN AU_EXPORT AuThread * AuCreateKthread(void(*entry)(uint64_t), uint64_t stack, uint64_t cr3, char *name)
Definition x86_64_sched.cpp:253