X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/69777bdcab284335651a8002e2896f3862fa423d..32b9a6d76790c73d3d2d36d9081a2581cc65d184:/lunaix-os/arch/i386/exceptions/interrupts.c?ds=sidebyside diff --git a/lunaix-os/arch/i386/exceptions/interrupts.c b/lunaix-os/arch/i386/exceptions/interrupts.c index 8e6fa20..d7eced3 100644 --- a/lunaix-os/arch/i386/exceptions/interrupts.c +++ b/lunaix-os/arch/i386/exceptions/interrupts.c @@ -1,11 +1,11 @@ #include #include -#include -#include +#include +#include "sys/x86_isa.h" -#include +#include "sys/x86_isa.h" -#include +#include #include #include #include @@ -14,30 +14,30 @@ LOG_MODULE("INTR") static inline void -update_thread_context(isr_param* param) +update_thread_context(struct hart_state* state) { if (!current_thread) { return; } - isr_param* ppctx = current_thread->intr_ctx; - param->execp->saved_prev_ctx = ppctx; - current_thread->intr_ctx = param; + struct hart_state* parent = current_thread->hstate; + hart_push_state(parent, state); + current_thread->hstate = state; - if (ppctx) { - param->depth = ppctx->depth + 1; + if (parent) { + state->depth = parent->depth + 1; } } void -intr_handler(isr_param* param) +intr_handler(struct hart_state* state) { - update_thread_context(param); + update_thread_context(state); - volatile struct exec_param* execp = param->execp; + volatile struct exec_param* execp = state->execp; if (execp->vector <= 255) { isr_cb subscriber = isrm_get(execp->vector); - subscriber(param); + subscriber(state); goto done; } @@ -50,7 +50,7 @@ intr_handler(isr_param* param) done: if (execp->vector > IV_BASE_END) { - intc_notify_eoi(0, execp->vector); + isrm_notify_eoi(0, execp->vector); } return;