Changeset f35749e in mainline for kernel


Ignore:
Timestamp:
2025-02-28T23:38:26Z (5 months ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
8300c72
Parents:
4285f384
Message:

System restart via shutdown -r

Location:
kernel/generic
Files:
1 added
9 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/include/arch.h

    r4285f384 rf35749e  
    11/*
     2 * Copyright (c) 2025 Jiri Svoboda
    23 * Copyright (c) 2001-2004 Jakub Jermar
    34 * All rights reserved.
     
    106107extern void calibrate_delay_loop(void);
    107108
    108 extern void reboot(void);
    109109extern void arch_reboot(void);
    110110extern void *arch_construct_function(fncptr_t *, void *, void *);
  • kernel/generic/include/main/main.h

    r4285f384 rf35749e  
    11/*
     2 * Copyright (c) 2025 Jiri Svoboda
    23 * Copyright (c) 2006 Martin Decky
    34 * All rights reserved.
     
    3637#define KERN_MAIN_H_
    3738
     39#include <proc/task.h>
    3840#include <typedefs.h>
    3941
     
    4244/* Address of the end of kernel. */
    4345extern uint8_t kdata_end[];
     46extern task_t *kernel_task;
    4447
    4548extern void main_bsp(void);
  • kernel/generic/include/proc/task.h

    r4285f384 rf35749e  
    11/*
     2 * Copyright (c) 2025 Jiri Svoboda
    23 * Copyright (c) 2010 Jakub Jermar
    34 * All rights reserved.
     
    142143
    143144extern void task_init(void);
    144 extern void task_done(void);
     145extern void task_done(task_t *);
    145146extern task_t *task_create(as_t *, const char *);
    146147extern void task_hold(task_t *);
  • kernel/generic/src/console/cmd.c

    r4285f384 rf35749e  
    11/*
     2 * Copyright (c) 2025 Jiri Svoboda
    23 * Copyright (c) 2005 Jakub Jermar
    34 * All rights reserved.
     
    6061#include <arch/mm/tlb.h>
    6162#include <mm/frame.h>
     63#include <main/shutdown.h>
    6264#include <main/version.h>
    6365#include <mm/slab.h>
  • kernel/generic/src/main/main.c

    r4285f384 rf35749e  
    11/*
     2 * Copyright (c) 2025 Jiri Svoboda
    23 * Copyright (c) 2001-2004 Jakub Jermar
    34 * All rights reserved.
     
    110111CHECK_INT_TYPE(64);
    111112
     113task_t *kernel_task;
     114
    112115/** Global configuration structure. */
    113116config_t config = {
     
    273276                panic("Cannot create kernel task.");
    274277
     278        kernel_task = kernel;
     279
    275280        /*
    276281         * Create the first thread.
  • kernel/generic/src/main/shutdown.c

    r4285f384 rf35749e  
    11/*
     2 * Copyright (c) 2025 Jiri Svoboda
    23 * Copyright (c) 2007 Martin Decky
    34 * All rights reserved.
     
    3738
    3839#include <arch.h>
    39 #include <proc/task.h>
     40#include <errno.h>
    4041#include <halt.h>
    4142#include <log.h>
     43#include <main/main.h>
     44#include <main/shutdown.h>
     45#include <proc/task.h>
     46#include <proc/thread.h>
     47
     48static thread_t *reboot_thrd = NULL;
     49SPINLOCK_INITIALIZE(reboot_lock);
    4250
    4351void reboot(void)
    4452{
    45         task_done();
     53        task_done(kernel_task);
    4654
    4755#ifdef CONFIG_DEBUG
     
    5361}
    5462
     63/** Thread procedure for rebooting the system.
     64 *
     65 * @param arg Argument (unused)
     66 */
     67static 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 */
     79sys_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
    55106/** @}
    56107 */
  • kernel/generic/src/proc/task.c

    r4285f384 rf35749e  
    11/*
     2 * Copyright (c) 2025 Jiri Svoboda
    23 * Copyright (c) 2010 Jakub Jermar
    3  * Copyright (c) 2018 Jiri Svoboda
    44 * All rights reserved.
    55 *
     
    104104 *
    105105 */
    106 void task_done(void)
     106void task_done(task_t *cur_task)
    107107{
    108108        size_t tasks_left;
     
    112112                task_t *task_0 = ipc_box_0->task;
    113113                ipc_box_0 = NULL;
     114
    114115                /*
    115116                 * The first task is held by kinit(), we need to release it or
     
    129130                task = task_first();
    130131                while (task != NULL) {
    131                         if (task != TASK) {
     132                        if (task != cur_task) {
    132133                                tasks_left++;
    133134#ifdef CONFIG_DEBUG
  • kernel/generic/src/proc/thread.c

    r4285f384 rf35749e  
    11/*
     2 * Copyright (c) 2025 Jiri Svoboda
    23 * Copyright (c) 2010 Jakub Jermar
    3  * Copyright (c) 2018 Jiri Svoboda
    44 * All rights reserved.
    55 *
     
    338338        irq_spinlock_unlock(&thread->task->lock, false);
    339339
    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));
    341343
    342344        /* Clear cpu->fpu_owner if set to this thread. */
  • kernel/generic/src/syscall/syscall.c

    r4285f384 rf35749e  
    11/*
     2 * Copyright (c) 2025 Jiri Svoboda
    23 * Copyright (c) 2005 Martin Decky
    34 * All rights reserved.
     
    4041#include <proc/task.h>
    4142#include <proc/program.h>
     43#include <main/shutdown.h>
    4244#include <mm/as.h>
    4345#include <mm/page.h>
     
    5961        /* System management syscalls. */
    6062        [SYS_KIO] = (syshandler_t) sys_kio,
     63        [SYS_REBOOT] = (syshandler_t) sys_reboot,
    6164
    6265        /* Thread and task related syscalls. */
Note: See TracChangeset for help on using the changeset viewer.