diff options
author | Anton Kling <anton@kling.gg> | 2024-02-07 11:43:39 +0100 |
---|---|---|
committer | Anton Kling <anton@kling.gg> | 2024-02-07 22:25:47 +0100 |
commit | 08c446612959fb190c7d6f604c69031007c3bc23 (patch) | |
tree | f78718190c5c86c5a5882a5260470402277b345d | |
parent | 44508f1c962060b68527fa020969ec04d3e250c6 (diff) |
Remove sti and cli inline assembly
-rw-r--r-- | kernel/cpu/gdt.c | 3 | ||||
-rw-r--r-- | kernel/cpu/idt.c | 13 | ||||
-rw-r--r-- | kernel/cpu/syscall.c | 5 | ||||
-rw-r--r-- | kernel/drivers/mouse.c | 3 | ||||
-rw-r--r-- | kernel/init/kernel.c | 5 | ||||
-rw-r--r-- | kernel/kubsan.c | 3 |
6 files changed, 12 insertions, 20 deletions
diff --git a/kernel/cpu/gdt.c b/kernel/cpu/gdt.c index 553512f..2f9f90b 100644 --- a/kernel/cpu/gdt.c +++ b/kernel/cpu/gdt.c @@ -1,4 +1,5 @@ #include "gdt.h" +#include <interrupts.h> extern void flush_tss(void); extern void load_gdt(void *); @@ -66,7 +67,7 @@ void gdt_init() { gdtr.offset = (u32)&gdt_entries; gdtr.size = sizeof(gdt_entries) - 1; - asm("cli"); + disable_interrupts(); load_gdt(&gdtr); flush_tss(); } diff --git a/kernel/cpu/idt.c b/kernel/cpu/idt.c index f4d025a..d381990 100644 --- a/kernel/cpu/idt.c +++ b/kernel/cpu/idt.c @@ -82,22 +82,9 @@ __attribute__((interrupt)) void page_fault(registers_t *regs) { asm volatile("mov %%cr2, %0" : "=r"(cr2)); kprintf("CR2: %x\n", cr2); if (0xFFFFDEAD == cr2) { - /* - process_t *current = get_current_task(); - if (!current) { - kprintf("WHYYYYYY!\n"); - for (;;) - asm("cli"); - } - current->useresp = regs->esp;*/ - // active_directory = current->cr3; -// get_current_task()->esp = get_current_task()->saved_esp; -// get_current_task()->ebp = get_current_task()->saved_ebp; -// get_current_task()->eip = get_current_task()->saved_eip; for (;;) { switch_task(0); } - // jump_process(current); return; } klog("Page Fault", LOG_ERROR); diff --git a/kernel/cpu/syscall.c b/kernel/cpu/syscall.c index 5e51d53..072351d 100644 --- a/kernel/cpu/syscall.c +++ b/kernel/cpu/syscall.c @@ -11,6 +11,7 @@ #include <string.h> #include <syscalls.h> #include <typedefs.h> +#include <interrupts.h> #pragma GCC diagnostic ignored "-Wpedantic" @@ -69,7 +70,7 @@ void syscall_exit(int status) { } void syscall_wait(int *status) { - asm("cli"); + disable_interrupts(); if (!get_current_task()->child) { if (status) *status = -1; @@ -105,7 +106,7 @@ int syscall_brk(void *addr) { } void *syscall_sbrk(uintptr_t increment) { - asm("cli"); + disable_interrupts(); void *rc = get_current_task()->data_segment_end; void *n = (void *)((uintptr_t)(get_current_task()->data_segment_end) + increment); diff --git a/kernel/drivers/mouse.c b/kernel/drivers/mouse.c index 78280c1..884b024 100644 --- a/kernel/drivers/mouse.c +++ b/kernel/drivers/mouse.c @@ -4,6 +4,7 @@ #include <fs/fifo.h> #include <fs/vfs.h> #include <typedefs.h> +#include <interrupts.h> u8 mouse_cycle = 0; // unsigned char u8 mouse_u8[3]; // signed char @@ -116,7 +117,7 @@ u8 mouse_read() { void install_mouse(void) { u8 _status; // unsigned char - asm("cli"); + disable_interrupts(); // Enable the auxiliary mouse device mouse_wait(1); outb(0x64, 0xA8); diff --git a/kernel/init/kernel.c b/kernel/init/kernel.c index 67aab12..e829ce3 100644 --- a/kernel/init/kernel.c +++ b/kernel/init/kernel.c @@ -16,6 +16,7 @@ #include <fs/ext2.h> #include <fs/shm.h> #include <fs/vfs.h> +#include <interrupts.h> #include <log.h> #include <mmu.h> #include <multiboot.h> @@ -44,7 +45,7 @@ void kernel_main(u32 kernel_end, unsigned long magic, unsigned long addr, data_end = 0xc0400000; inital_esp = inital_stack; - asm("cli"); + disable_interrupts(); kprintf("If you see this then the serial driver works :D.\n"); assert(magic == MULTIBOOT_BOOTLOADER_MAGIC); @@ -106,7 +107,7 @@ void kernel_main(u32 kernel_end, unsigned long magic, unsigned long addr, } } for (;;) { - asm("sti"); + enable_interrupts(); switch_task(0); } } diff --git a/kernel/kubsan.c b/kernel/kubsan.c index 8c01b87..87b2932 100644 --- a/kernel/kubsan.c +++ b/kernel/kubsan.c @@ -1,11 +1,12 @@ #include <kubsan.h> #include <log.h> #include <stdio.h> +#include <interrupts.h> void ubsan_log(const char *cause, struct source_location source) { kprintf("%s: %s : %d\n", cause, source.file_name, source.line); dump_backtrace(5); - asm("cli"); + disable_interrupts(); asm volatile("1: jmp 1b"); asm("hlt"); for (;;) |