cpu: add irq depth counting

Add a way of checking if a cpu is in the middle of handling an irq and
how deep it is into it. This will allow for future code to conditionally
run only in/outside interrupts.
This commit is contained in:
Matheus
2026-10-06 10:58:37 -03:00
parent 6c65a90a5f
commit 011309d43d
3 changed files with 18 additions and 1 deletions
+4
View File
@@ -147,6 +147,8 @@ void arch_nmi_isr(context_t *ctx) {
uint64_t old_gsbase = rdmsr(MSR_GSBASE);
wrmsr(MSR_GSBASE, *(uint64_t *)(ctx + 1));
__atomic_fetch_add(&current_cpu()->irq_depth, 1, __ATOMIC_RELAXED);
bool handled = false;
#ifdef ENABLE_PROFILING
@@ -157,6 +159,8 @@ void arch_nmi_isr(context_t *ctx) {
if (!handled)
_panic("Unhandled NMI", ctx);
__atomic_fetch_sub(&current_cpu()->irq_depth, 1, __ATOMIC_RELAXED);
// restore the old gsbase
wrmsr(MSR_GSBASE, old_gsbase);
}