summaryrefslogtreecommitdiff
path: root/stage3/interrupts.c
diff options
context:
space:
mode:
authorLizzy Fleckenstein <lizzy@vlhl.dev>2024-01-09 22:00:10 +0100
committerLizzy Fleckenstein <lizzy@vlhl.dev>2024-01-09 22:00:10 +0100
commit0d9286a860ff888dbb35fa6b92703496af3abecf (patch)
treea40596ae85efee3ee8b33fb9241200932f933290 /stage3/interrupts.c
parentd8d31c16138a4d6dc1ff3d33b3172c151c221767 (diff)
downloadcuddles-0d9286a860ff888dbb35fa6b92703496af3abecf.tar.xz
refactor heap code and add heap debugging
Diffstat (limited to 'stage3/interrupts.c')
-rw-r--r--stage3/interrupts.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/stage3/interrupts.c b/stage3/interrupts.c
index 9c7bcc8..a13bd98 100644
--- a/stage3/interrupts.c
+++ b/stage3/interrupts.c
@@ -9,10 +9,14 @@
#include "string.h"
#include "debug.h"
+bool in_isr = false;
+
extern u64 idt_entries[256]; // isr.asm
void interrupt_handler(interrupt_frame *frame)
{
+ in_isr = true;
+
if (frame->which < 32) {
debug_exception(frame);
} else if (frame->which-32 < 16) {
@@ -43,6 +47,16 @@ void interrupt_handler(interrupt_frame *frame)
ack_irq(irq);
}
+
+ in_isr = false;
+}
+
+void interrupts_unsafe(const char *func)
+{
+ if (in_isr) {
+ print(str_intro((char *) func));
+ panic(S(" called in ISR\n"));
+ }
}
typedef struct {