From 08c446612959fb190c7d6f604c69031007c3bc23 Mon Sep 17 00:00:00 2001 From: Anton Kling Date: Wed, 7 Feb 2024 11:43:39 +0100 Subject: Remove sti and cli inline assembly --- kernel/cpu/gdt.c | 3 ++- kernel/cpu/idt.c | 13 ------------- kernel/cpu/syscall.c | 5 +++-- 3 files changed, 5 insertions(+), 16 deletions(-) (limited to 'kernel/cpu') 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 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 #include #include +#include #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); -- cgit v1.2.3