#include #include #include static object_type_t thread_type = { .ob_name = "thread", .ob_size = sizeof(thread_t), }; kern_status_t thread_object_type_init(void) { return object_type_register(&thread_type); } thread_t *thread_alloc(void) { object_t *thread_obj = object_create(&thread_type); if (!thread_obj) { return NULL; } thread_t *t = object_data(thread_obj); memset(t, 0x00, sizeof *t); return t; } void thread_free(thread_t *thr) { } thread_t *current_thread(void) { cpu_data_t *cpu = get_this_cpu(); if (!cpu) { return NULL; } thread_t *out = cpu->c_current_thread; put_cpu(cpu); return out; } bool need_resched(void) { return (current_thread()->tr_flags & THREAD_F_NEED_RESCHED) != 0; }