summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2024-02-17 16:45:16 +0100
committerAnton Kling <anton@kling.gg>2024-02-17 16:45:16 +0100
commit61c443579150a4714c132ecb1ac18779535f91c9 (patch)
treec1d83ed763b9d16051abd9fd921bb9815e710c70
parent413d09388bf33c658f3e71b18e4b069f18461393 (diff)
cleanup
-rw-r--r--kernel/cpu/syscall.c2
-rw-r--r--kernel/drivers/mouse.c11
-rw-r--r--kernel/drivers/pit.c2
-rw-r--r--kernel/init/kernel.c4
-rw-r--r--kernel/poll.c2
-rw-r--r--kernel/sched/scheduler.c74
-rw-r--r--kernel/sched/scheduler.h2
-rw-r--r--kernel/syscalls/msleep.c2
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();
}