Kernel: Sleep now actually sleeps and allows idling

This commit is contained in:
Bananymous
2023-02-19 17:53:29 +02:00
parent 66a4b69a29
commit 1bd8b0fe5c
10 changed files with 101 additions and 72 deletions

View File

@@ -126,7 +126,9 @@ namespace IDT
dprintln("no handler for irq 0x{2H}\n", irq);
}
InterruptController::get().eoi(irq);
// NOTE: Scheduler sends PIT eoi's
if (irq != PIT_IRQ)
InterruptController::get().eoi(irq);
}
static void flush_idt()

View File

@@ -8,20 +8,18 @@ exit_thread_trampoline:
movq 8(%rsp), %rdi
ret
# void start_thread(uint64_t arg0, uint64_t arg1, uint64_t arg2, uint64_t arg3, uint64_t rsp, uint64_t rbp, uint64_t rip)
# void start_thread(uint64_t arg0, uint64_t arg1, uint64_t arg2, uint64_t arg3, uint64_t rsp, uint64_t rip)
.global start_thread
start_thread:
movq 8(%rsp), %rcx
movq %r8, %rsp
movq %r9, %rbp
movq $0, %rbp
pushq $exit_thread_trampoline
sti
jmp *%rcx
jmp *%r9
# void continue_thread(uint64_t rsp, uint64_t rbp, uint64_t rip)
# void continue_thread(uint64_t rsp, uint64_t rip)
.global continue_thread
continue_thread:
movq %rdi, %rsp
movq %rsi, %rbp
movq $0, %rax
jmp *%rdx
jmp *%rsi