[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[tyndur-devel] [PATCH] kernel2: Bei einer Exception nur den Prozess beenden
* kernel2: Bei einer Exception im Usermodus wird nur der aktuelle
Prozess beendet. Bei einer Exception im Kernelmodus wird weiterhin das
System angehalten.
Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
---
src/kernel2/src/interrupts/im.c | 18 ++++++++++++------
1 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/src/kernel2/src/interrupts/im.c b/src/kernel2/src/interrupts/im.c
index 9fae56b..bd774be 100644
--- a/src/kernel2/src/interrupts/im.c
+++ b/src/kernel2/src/interrupts/im.c
@@ -124,14 +124,20 @@ static void handle_exception(interrupt_stack_frame_t* isf, uint8_t int_num)
}
}
- // Hier werden alle Prozessoren zum halten gebracht
- if (cpu_count > 1) {
- apic_ipi_broadcast(0xF0, true);
+ // Wenn die Exception im Kernel passiert ist, geben wir auf
+ if ((isf->cs & 0x03) == 0) {
+ // Hier werden alle Prozessoren zum halten gebracht
+ if (cpu_count > 1) {
+ apic_ipi_broadcast(0xF0, true);
+ }
+
+ // Aber da das ohne APIC nicht so funktioniert, wird das noch
+ // abgefangen.
+ asm("cli; hlt");
}
- // Aber da das ohne APIC nicht so funktioniert, wird das noch
- // abgefangen.
- asm("cli; hlt");
+ // Ansonsten wird nur der aktuelle Task beendet
+ syscall_pm_exit_process();
}
/**
--
1.6.0.2