[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