[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[tyndur-devel] [PATCH 8/8] kernel2: Panic, wenn aktiver Task nicht PM_STATUS_RUNNING hat



+ kernel2: Wenn der aktive Task nicht den richtigen Status hat, gibt es
  jetzt einen Panic.

Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
---
 src/kernel2/src/interrupts/im.c |   14 ++++++++++++++
 1 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/src/kernel2/src/interrupts/im.c b/src/kernel2/src/interrupts/im.c
index 23cec59..9923b7a 100644
--- a/src/kernel2/src/interrupts/im.c
+++ b/src/kernel2/src/interrupts/im.c
@@ -153,6 +153,9 @@ interrupt_stack_frame_t* im_handler(interrupt_stack_frame_t* isf)
     uint8_t int_num = isf->interrupt_number;
     interrupt_stack_frame_t* new_isf = isf;
     uintptr_t isf_addr = (uintptr_t) isf;
+#ifndef CONFIG_RELEASE_VERSION
+    uint32_t eax = isf->eax;
+#endif
 
     if ((isf_addr < (uintptr_t) thread->kernel_stack_bottom) ||
         (isf_addr >=
@@ -209,7 +212,18 @@ interrupt_stack_frame_t* im_handler(interrupt_stack_frame_t* isf)
     im_send_interrupts();
 
     thread = current_thread;
+
     if (thread != old_thread) {
+
+#ifndef CONFIG_RELEASE_VERSION
+        if (thread->status != PM_STATUS_RUNNING) {
+            panic("Aktiver Task hat nicht PM_STATUS_RUNNING: "
+                "PID %d, int %x, eax = %d\n",
+                thread->process->pid, int_num, eax);
+        }
+#endif
+
+        /* FIXME Was bei einem exit-Syscall? */
         old_thread->kernel_stack = isf;
         new_isf = im_prepare_current_thread();
     }
-- 
1.6.0.2