- Timestamp:
- 2025-02-28T23:38:26Z (5 months ago)
- Branches:
- master
- Children:
- 8300c72
- Parents:
- 4285f384
- Location:
- kernel/generic
- Files:
-
- 1 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/arch.h
r4285f384 rf35749e 1 1 /* 2 * Copyright (c) 2025 Jiri Svoboda 2 3 * Copyright (c) 2001-2004 Jakub Jermar 3 4 * All rights reserved. … … 106 107 extern void calibrate_delay_loop(void); 107 108 108 extern void reboot(void);109 109 extern void arch_reboot(void); 110 110 extern void *arch_construct_function(fncptr_t *, void *, void *); -
kernel/generic/include/main/main.h
r4285f384 rf35749e 1 1 /* 2 * Copyright (c) 2025 Jiri Svoboda 2 3 * Copyright (c) 2006 Martin Decky 3 4 * All rights reserved. … … 36 37 #define KERN_MAIN_H_ 37 38 39 #include <proc/task.h> 38 40 #include <typedefs.h> 39 41 … … 42 44 /* Address of the end of kernel. */ 43 45 extern uint8_t kdata_end[]; 46 extern task_t *kernel_task; 44 47 45 48 extern void main_bsp(void); -
kernel/generic/include/proc/task.h
r4285f384 rf35749e 1 1 /* 2 * Copyright (c) 2025 Jiri Svoboda 2 3 * Copyright (c) 2010 Jakub Jermar 3 4 * All rights reserved. … … 142 143 143 144 extern void task_init(void); 144 extern void task_done( void);145 extern void task_done(task_t *); 145 146 extern task_t *task_create(as_t *, const char *); 146 147 extern void task_hold(task_t *); -
kernel/generic/src/console/cmd.c
r4285f384 rf35749e 1 1 /* 2 * Copyright (c) 2025 Jiri Svoboda 2 3 * Copyright (c) 2005 Jakub Jermar 3 4 * All rights reserved. … … 60 61 #include <arch/mm/tlb.h> 61 62 #include <mm/frame.h> 63 #include <main/shutdown.h> 62 64 #include <main/version.h> 63 65 #include <mm/slab.h> -
kernel/generic/src/main/main.c
r4285f384 rf35749e 1 1 /* 2 * Copyright (c) 2025 Jiri Svoboda 2 3 * Copyright (c) 2001-2004 Jakub Jermar 3 4 * All rights reserved. … … 110 111 CHECK_INT_TYPE(64); 111 112 113 task_t *kernel_task; 114 112 115 /** Global configuration structure. */ 113 116 config_t config = { … … 273 276 panic("Cannot create kernel task."); 274 277 278 kernel_task = kernel; 279 275 280 /* 276 281 * Create the first thread. -
kernel/generic/src/main/shutdown.c
r4285f384 rf35749e 1 1 /* 2 * Copyright (c) 2025 Jiri Svoboda 2 3 * Copyright (c) 2007 Martin Decky 3 4 * All rights reserved. … … 37 38 38 39 #include <arch.h> 39 #include < proc/task.h>40 #include <errno.h> 40 41 #include <halt.h> 41 42 #include <log.h> 43 #include <main/main.h> 44 #include <main/shutdown.h> 45 #include <proc/task.h> 46 #include <proc/thread.h> 47 48 static thread_t *reboot_thrd = NULL; 49 SPINLOCK_INITIALIZE(reboot_lock); 42 50 43 51 void reboot(void) 44 52 { 45 task_done( );53 task_done(kernel_task); 46 54 47 55 #ifdef CONFIG_DEBUG … … 53 61 } 54 62 63 /** Thread procedure for rebooting the system. 64 * 65 * @param arg Argument (unused) 66 */ 67 static void reboot_thrd_proc(void *arg) 68 { 69 (void)arg; 70 71 reboot(); 72 } 73 74 /** Reboot the system. 75 * 76 * @return EOK if reboot started successfully. EBUSY if reboot already 77 * started, ENOMEM if out of memory. 78 */ 79 sys_errno_t sys_reboot(void) 80 { 81 thread_t *thread; 82 83 thread = thread_create(reboot_thrd_proc, NULL, kernel_task, 84 THREAD_FLAG_NONE, "reboot"); 85 if (thread == NULL) 86 return ENOMEM; 87 88 spinlock_lock(&reboot_lock); 89 90 if (reboot_thrd != NULL) { 91 spinlock_unlock(&reboot_lock); 92 thread_put(thread); 93 return EBUSY; 94 } 95 96 reboot_thrd = thread; 97 98 spinlock_unlock(&reboot_lock); 99 100 thread_start(thread); 101 thread_detach(thread); 102 103 return EOK; 104 } 105 55 106 /** @} 56 107 */ -
kernel/generic/src/proc/task.c
r4285f384 rf35749e 1 1 /* 2 * Copyright (c) 2025 Jiri Svoboda 2 3 * Copyright (c) 2010 Jakub Jermar 3 * Copyright (c) 2018 Jiri Svoboda4 4 * All rights reserved. 5 5 * … … 104 104 * 105 105 */ 106 void task_done( void)106 void task_done(task_t *cur_task) 107 107 { 108 108 size_t tasks_left; … … 112 112 task_t *task_0 = ipc_box_0->task; 113 113 ipc_box_0 = NULL; 114 114 115 /* 115 116 * The first task is held by kinit(), we need to release it or … … 129 130 task = task_first(); 130 131 while (task != NULL) { 131 if (task != TASK) {132 if (task != cur_task) { 132 133 tasks_left++; 133 134 #ifdef CONFIG_DEBUG -
kernel/generic/src/proc/thread.c
r4285f384 rf35749e 1 1 /* 2 * Copyright (c) 2025 Jiri Svoboda 2 3 * Copyright (c) 2010 Jakub Jermar 3 * Copyright (c) 2018 Jiri Svoboda4 4 * All rights reserved. 5 5 * … … 338 338 irq_spinlock_unlock(&thread->task->lock, false); 339 339 340 assert((atomic_get_unordered(&thread->state) == Exiting) || (atomic_get_unordered(&thread->state) == Lingering)); 340 assert((atomic_get_unordered(&thread->state) == Entering) || 341 (atomic_get_unordered(&thread->state) == Exiting) || 342 (atomic_get_unordered(&thread->state) == Lingering)); 341 343 342 344 /* Clear cpu->fpu_owner if set to this thread. */ -
kernel/generic/src/syscall/syscall.c
r4285f384 rf35749e 1 1 /* 2 * Copyright (c) 2025 Jiri Svoboda 2 3 * Copyright (c) 2005 Martin Decky 3 4 * All rights reserved. … … 40 41 #include <proc/task.h> 41 42 #include <proc/program.h> 43 #include <main/shutdown.h> 42 44 #include <mm/as.h> 43 45 #include <mm/page.h> … … 59 61 /* System management syscalls. */ 60 62 [SYS_KIO] = (syshandler_t) sys_kio, 63 [SYS_REBOOT] = (syshandler_t) sys_reboot, 61 64 62 65 /* Thread and task related syscalls. */
Note:
See TracChangeset
for help on using the changeset viewer.