11#include <sys/syscall.h>
13#include <sys/kassert.h>
14#include <sys/kconfig.h>
15#include <sys/kdebug.h>
19#include <sys/spinlock.h>
20#include <sys/thread.h>
22#include <machine/trap.h>
23#include <machine/pmap.h>
103 memset(thr, 0,
sizeof(*thr));
156 memset(thr, 0,
sizeof(*thr));
256 __sync_fetch_and_add(&thr->
refCount, 1);
268 if (__sync_fetch_and_sub(&thr->
refCount, 1) == 1) {
330 const char *states[] = {
360 for (
int i = 0; i <
MAX_CPUS; i++) {
388 kprintf(
"Current Thread State:\n");
void Thread_SetupUThread(Thread *thr, uintptr_t rip, uintptr_t arg)
void Thread_SetupKThread(Thread *thr, void(*f)(), uintptr_t arg1, uintptr_t arg2, uintptr_t arg3)
TaskStateSegment64 TSS[MAX_CPUS]
void ThreadKThreadEntry(TrapFrame *tf)
void Thread_InitArch(Thread *thr)
#define __NO_LOCK_ANALYSIS
#define SCHED_STATE_RUNNING
Process * Process_Create(Process *parent, const char *title)
void Process_Dump(Process *proc)
void Process_Retain(Process *proc)
void Process_Release(Process *proc)
int kprintf(const char *fmt,...)
#define REGISTER_DBGCMD(_NAME, _DESC, _FUNC)
Thread * Thread_KThreadCreate(void(*f)(void *), void *arg)
Thread * Thread_Create(Process *proc)
Thread * Thread_UThreadCreate(Thread *oldThr, uint64_t rip, uint64_t arg)
void Thread_Release(Thread *thr)
static void Debug_Threads(int argc, const char *argv[])
ThreadQueue runnableQueue
static void Thread_Destroy(Thread *thr)
static void Debug_ThreadInfo(int argc, const char *argv[])
Thread * curProc[MAX_CPUS]
void Thread_Dump(Thread *thr)
uint64_t Thread_Wait(Thread *thr, uint64_t tid)
Thread * Thread_Lookup(Process *proc, uint64_t tid)
void Thread_Retain(Thread *thr)
void PAlloc_Release(void *pg)
void Slab_Free(Slab *slab, void *obj)
void * PAlloc_AllocPage()
void * Slab_Alloc(Slab *slab) __attribute__((malloc))
void Slab_Init(Slab *slab, const char *name, uintptr_t objsz, uintptr_t align)
#define MEM_USERSPACE_STKLEN
bool PMap_AllocMap(AS *as, uint64_t virt, uint64_t len, uint64_t flags)
#define TAILQ_FOREACH(var, head, field)
#define TAILQ_INSERT_TAIL(head, elm, field)
#define TAILQ_FIRST(head)
#define TAILQ_REMOVE(head, elm, field)
void Spinlock_Unlock(Spinlock *lock) __UNLOCK_EX(*lock)
#define SPINLOCK_TYPE_NORMAL
#define SPINLOCK_TYPE_RECURSIVE
void Spinlock_Lock(Spinlock *lock) __LOCK_EX(*lock)
void Spinlock_Init(Spinlock *lock, const char *name, uint64_t type)
void * memset(void *dst, int c, size_t len)
#define SYSCALL_PACK(_errcode, _val)
void Trap_Pop(TrapFrame *tf)