diff --git a/kernel/include/scheduler.hpp b/kernel/include/scheduler.hpp index d4a6b402..ad5bb54b 100644 --- a/kernel/include/scheduler.hpp +++ b/kernel/include/scheduler.hpp @@ -36,6 +36,11 @@ void sbrk(size_t inc); void tick(); void reschedule(); +/*! + * \brief Indicates a fault in the current process + */ +void fault(); + void sleep_ms(size_t time); void sleep_ms(pid_t pid, size_t time); diff --git a/kernel/src/interrupts.cpp b/kernel/src/interrupts.cpp index ff556afb..6fd3f5c3 100644 --- a/kernel/src/interrupts.cpp +++ b/kernel/src/interrupts.cpp @@ -246,9 +246,7 @@ void _fault_handler(interrupt::fault_regs regs){ double_printf("cr2=%h\n", get_cr2()); double_printf("cr3=%h\n", get_cr3()); - //TODO Improve that with kind of blue screen - - asm volatile("hlt" : : ); + scheduler::fault(); } void _irq_handler(interrupt::syscall_regs* regs){ diff --git a/kernel/src/scheduler.cpp b/kernel/src/scheduler.cpp index 3b473ec6..5d486353 100644 --- a/kernel/src/scheduler.cpp +++ b/kernel/src/scheduler.cpp @@ -966,3 +966,9 @@ void scheduler::frequency_updated(uint64_t old_frequency, uint64_t new_frequency } } } + +void scheduler::fault(){ + logging::logf(logging::log_level::DEBUG, "Fault in %u kill it\n", current_pid); + + kill_current_process(); +}