diff options
author | Anton Kling <anton@kling.gg> | 2024-02-17 16:45:16 +0100 |
---|---|---|
committer | Anton Kling <anton@kling.gg> | 2024-02-17 16:45:16 +0100 |
commit | 61c443579150a4714c132ecb1ac18779535f91c9 (patch) | |
tree | c1d83ed763b9d16051abd9fd921bb9815e710c70 /kernel | |
parent | 413d09388bf33c658f3e71b18e4b069f18461393 (diff) |
cleanup
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/cpu/syscall.c | 2 | ||||
-rw-r--r-- | kernel/drivers/mouse.c | 11 | ||||
-rw-r--r-- | kernel/drivers/pit.c | 2 | ||||
-rw-r--r-- | kernel/init/kernel.c | 4 | ||||
-rw-r--r-- | kernel/poll.c | 2 | ||||
-rw-r--r-- | kernel/sched/scheduler.c | 74 | ||||
-rw-r--r-- | kernel/sched/scheduler.h | 2 | ||||
-rw-r--r-- | kernel/syscalls/msleep.c | 2 |
8 files changed, 24 insertions, 75 deletions
diff --git a/kernel/cpu/syscall.c b/kernel/cpu/syscall.c index 77e9ac5..1ed5f41 100644 --- a/kernel/cpu/syscall.c +++ b/kernel/cpu/syscall.c @@ -81,7 +81,7 @@ void syscall_wait(int *status) { return; } get_current_task()->halts[WAIT_CHILD_HALT] = 1; - switch_task(1); + switch_task(); if (status) *status = get_current_task()->child_rc; } diff --git a/kernel/drivers/mouse.c b/kernel/drivers/mouse.c index 067f335..821bd1c 100644 --- a/kernel/drivers/mouse.c +++ b/kernel/drivers/mouse.c @@ -6,10 +6,10 @@ #include <interrupts.h> #include <typedefs.h> -u8 mouse_cycle = 0; // unsigned char -u8 mouse_u8[3]; // signed char -u8 mouse_x = 0; // signed char -u8 mouse_y = 0; // signed char +u8 mouse_cycle = 0; +u8 mouse_u8[3]; +u8 mouse_x = 0; +u8 mouse_y = 0; vfs_inode_t *mouse_inode; vfs_fd_t *mouse_fd; @@ -110,13 +110,12 @@ void mouse_write(u8 a_write) { } u8 mouse_read() { - // Get's response from mouse mouse_wait(0); return inb(0x60); } void install_mouse(void) { - u8 _status; // unsigned char + u8 _status; disable_interrupts(); // Enable the auxiliary mouse device mouse_wait(1); diff --git a/kernel/drivers/pit.c b/kernel/drivers/pit.c index 509f3f5..108529d 100644 --- a/kernel/drivers/pit.c +++ b/kernel/drivers/pit.c @@ -48,7 +48,7 @@ void int_clock(reg_t regs) { pit_counter = 0; clock_num_ms_ticks++; } - switch_task(1); + switch_task(); } void pit_install(void) { diff --git a/kernel/init/kernel.c b/kernel/init/kernel.c index 4a14216..45cb9db 100644 --- a/kernel/init/kernel.c +++ b/kernel/init/kernel.c @@ -107,7 +107,7 @@ void kernel_main(u32 kernel_end, unsigned long magic, unsigned long addr, } } for (;;) { - asm("sti"); - switch_task(0); + get_current_task()->sleep_until = pit_num_ms() + 100000000; + switch_task(); } } diff --git a/kernel/poll.c b/kernel/poll.c index 5181417..7e9c8e8 100644 --- a/kernel/poll.c +++ b/kernel/poll.c @@ -24,7 +24,7 @@ int poll(struct pollfd *fds, size_t nfds, int timeout) { disconnect_locks[i] = create_disconnect_fdhalt(f); } - switch_task(1); + switch_task(); for (size_t i = 0; i < nfds; i++) { if (fds[i].fd < 0) diff --git a/kernel/sched/scheduler.c b/kernel/sched/scheduler.c index 9ed6552..8cb5af7 100644 --- a/kernel/sched/scheduler.c +++ b/kernel/sched/scheduler.c @@ -5,6 +5,7 @@ #include <elf.h> #include <errno.h> #include <fs/vfs.h> +#include <interrupts.h> // FIXME: Use the process_t struct instead or keep this contained in it. TCB *current_task_TCB; @@ -184,8 +185,6 @@ void tasking_init(void) { current_task = ready_queue = create_process(NULL, 0, 0); current_task_TCB = current_task->tcb; current_task->tcb->CR3 = current_task->cr3->physical_address; - // // Switch to itself to update the internal values - // switch_task(0); } int i = 0; @@ -240,8 +239,7 @@ void exit(int status) { tmp = tmp->next; } current_task->dead = 1; - // This function will enable interrupts - switch_task(1); + switch_task(); } u32 setup_stack(u32 stack_pointer, int argc, char **argv) { @@ -308,40 +306,6 @@ int exec(const char *filename, char **argv) { ASSERT_NOT_REACHED; return 0; } -/* -int fork(void) { - process_t *parent_task = (process_t *)current_task; - - process_t *new_task = create_process(parent_task); - - process_t *tmp_task = (process_t *)ready_queue; - for (; tmp_task->next;) - tmp_task = tmp_task->next; - - tmp_task->next = new_task; - - u32 eip = read_eip(); - - if (current_task != parent_task) { - return 0; - } - - new_task->child_rc = -1; - new_task->parent = current_task; - current_task->child = new_task; - - new_task->eip = eip; - asm("\ - mov %%esp, %0;\ - mov %%ebp, %1;" - : "=r"(new_task->esp), "=r"(new_task->ebp)); - asm("\ - mov %%esp, %0;" - : "=r"(new_task->tcb->ESP)); - asm("sti"); - return new_task->pid; -} -*/ process_t *internal_fork(process_t *parent); int fork(void) { @@ -378,7 +342,15 @@ int is_halted(process_t *process) { extern PageDirectory *active_directory; process_t *next_task(process_t *c) { + process_t *s = c; + int loop = 0; for (;;) { + if (s == c) { + if (1 == loop) { + return s; + } + loop = 1; + } c = c->next; if (!c) c = ready_queue; @@ -393,24 +365,6 @@ process_t *next_task(process_t *c) { return c; } -int task_save_state() { - asm("mov %%esp, %0" : "=r"(current_task->esp)); - asm("mov %%ebp, %0" : "=r"(current_task->ebp)); - - u32 eip = read_eip(); - - if (0x1 == eip) { - // Should the returned value from read_eip be equal to one it - // means that we have just switched over to this task after we - // saved the state(since the switch_task() function changes the - // eax register to 1). - return 0; - } - - current_task->eip = eip; - return 1; -} - int kill(pid_t pid, int sig) { process_t *p = current_task; p = p->next; @@ -429,15 +383,11 @@ int kill(pid_t pid, int sig) { return 0; } -void jump_signal_handler(void *func, u32 esp); - -void none_save_switch() { -} - -void switch_task(int save) { +void switch_task() { if (!current_task) { return; } + disable_interrupts(); current_task = next_task((process_t *)current_task); active_directory = current_task->cr3; diff --git a/kernel/sched/scheduler.h b/kernel/sched/scheduler.h index 03f4710..0580ba0 100644 --- a/kernel/sched/scheduler.h +++ b/kernel/sched/scheduler.h @@ -15,7 +15,7 @@ int fork(void); int exec(const char *filename, char **argv); -void switch_task(int save); +void switch_task(void); void tasking_init(void); void exit(int status); diff --git a/kernel/syscalls/msleep.c b/kernel/syscalls/msleep.c index 47cc785..a752d94 100644 --- a/kernel/syscalls/msleep.c +++ b/kernel/syscalls/msleep.c @@ -5,5 +5,5 @@ void syscall_msleep(u32 ms) { get_current_task()->sleep_until = pit_num_ms() + ms; - switch_task(1); + switch_task(); } |