PatchworkOS
Loading...
Searching...
No Matches
thread.c File Reference
#include <kernel/sched/thread.h>
#include <kernel/cpu/gdt.h>
#include <kernel/cpu/smp.h>
#include <kernel/init/init.h>
#include <kernel/log/log.h>
#include <kernel/log/panic.h>
#include <kernel/mem/vmm.h>
#include <kernel/sched/sched.h>
#include <kernel/sched/timer.h>
#include <kernel/sched/wait.h>
#include <kernel/sync/lock.h>
#include <stdlib.h>
#include <string.h>
#include <sys/list.h>
#include <sys/math.h>

Go to the source code of this file.

Functions

static uintptr_t thread_id_to_offset (tid_t tid, uint64_t maxPages)
 
static uint64_t thread_init (thread_t *thread, process_t *process)
 
thread_tthread_new (process_t *process)
 Creates a new thread structure.
 
void thread_free (thread_t *thread)
 Frees a thread structure.
 
void thread_save (thread_t *thread, const interrupt_frame_t *frame)
 Save state to a thread.
 
void thread_load (thread_t *thread, interrupt_frame_t *frame)
 Load state from a thread.
 
void thread_get_interrupt_frame (thread_t *thread, interrupt_frame_t *frame)
 Retrieve the interrupt frame from a thread.
 
bool thread_is_note_pending (thread_t *thread)
 Check if a thread has a note pending.
 
uint64_t thread_send_note (thread_t *thread, const void *buffer, uint64_t count)
 Send a note to a thread.
 
 SYSCALL_DEFINE (SYS_ERRNO, errno_t)
 
 SYSCALL_DEFINE (SYS_GETTID, tid_t)
 
thread_tthread_get_boot (void)
 Retrieves the boot thread.
 
uint64_t thread_handle_page_fault (const interrupt_frame_t *frame)
 Handles a page fault that occurred in the currently running thread.
 
uint64_t thread_copy_from_user (thread_t *thread, void *dest, const void *userSrc, uint64_t length)
 Safely copy data from user space.
 
uint64_t thread_copy_to_user (thread_t *thread, void *dest, const void *userSrc, uint64_t length)
 Safely copy data to user space.
 
uint64_t thread_copy_from_user_terminated (thread_t *thread, const void *userArray, const void *terminator, uint8_t objectSize, uint64_t maxCount, void **outArray, uint64_t *outCount)
 Safely copy a null-terminated array of objects from user space.
 
uint64_t thread_copy_from_user_pathname (thread_t *thread, pathname_t *pathname, const char *userPath)
 Safely copy a string from user space and use it to initialize a pathname.
 
uint64_t thread_load_atomic_from_user (thread_t *thread, atomic_uint64_t *userObj, uint64_t *outValue)
 Atomically load a 64-bit value from a user-space atomic variable.
 

Variables

static thread_t bootThread
 
static bool bootThreadInitalized = false
 

Function Documentation

◆ SYSCALL_DEFINE() [1/2]

SYSCALL_DEFINE ( SYS_ERRNO  ,
errno_t   
)

Definition at line 149 of file thread.c.

References errno.

◆ SYSCALL_DEFINE() [2/2]

SYSCALL_DEFINE ( SYS_GETTID  ,
tid_t   
)

Definition at line 154 of file thread.c.

References thread_t::id, and sched_thread().

◆ thread_id_to_offset()

static uintptr_t thread_id_to_offset ( tid_t  tid,
uint64_t  maxPages 
)
static

Definition at line 22 of file thread.c.

References maxPages, PAGE_SIZE, and STACK_POINTER_GUARD_PAGES.

Referenced by thread_init().

◆ thread_init()

Variable Documentation

◆ bootThread

◆ bootThreadInitalized

bool bootThreadInitalized = false
static

Definition at line 20 of file thread.c.

Referenced by thread_get_boot().