summaryrefslogtreecommitdiff
path: root/kernel/src/cpu/irq.c
diff options
context:
space:
mode:
authorAleksa Vuckovic <aleksa@vuckovic.cc>2023-02-26 07:29:26 +0100
committerAleksa Vuckovic <aleksa@vuckovic.cc>2023-02-26 07:39:55 +0100
commita362a43899040a3848427c4d1f3bd1d3e53f46ec (patch)
tree3255f10f358ab2dba1555a45a91950d185d397f7 /kernel/src/cpu/irq.c
parent40eecaecc552945f72a2b90f4122bf929960671c (diff)
passing rsp from isr_stub, fixing panic()
Diffstat (limited to 'kernel/src/cpu/irq.c')
-rw-r--r--kernel/src/cpu/irq.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/kernel/src/cpu/irq.c b/kernel/src/cpu/irq.c
index a7288c0..7480eef 100644
--- a/kernel/src/cpu/irq.c
+++ b/kernel/src/cpu/irq.c
@@ -47,14 +47,15 @@ const char *const exception_name[] = {
"Reserved",
};
-void exception(uint64_t number, uint64_t error) {
+void exception(uint64_t number, uint64_t rsp, uint64_t error)
+{
switch (number) {
case 0xe:
printf("%s, error: 0x%x\n", exception_name[14], error);
- page_fault(error);
+ page_fault(rsp, error);
break;
default:
- panic("%s, error: 0x%x\n", exception_name[number], error);
+ panic(rsp, "%s, error: 0x%x\n", exception_name[number], error);
}
}
@@ -72,11 +73,11 @@ void eoi(uint64_t number)
}
}
-void interrupt(uint64_t number)
+void interrupt(uint64_t number, uint64_t rsp)
{
switch (number) {
case 0x20:
- timer_handler();
+ timer_handler(rsp);
eoi(number);
break;
case 0x21:
@@ -89,11 +90,11 @@ void interrupt(uint64_t number)
}
}
-void isr_def_handler(uint64_t number, uint64_t error)
+void isr_def_handler(uint64_t number, uint64_t rsp, uint64_t error)
{
if (number < 0x20) {
- exception(number, error);
+ exception(number, rsp, error);
} else {
- interrupt(number);
+ interrupt(number, rsp);
}
}