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

[tyndur-devel] [PATCH] kernel2: IRQs nach pm_scheduler_yield abarbeiten



! kernel2: Zwei Tasks, die im Kernel hin- und heryielden, können IRQs
  blockieren, die nötig sind, damit die Tasks weiterlaufen. Kurzzeitig
  IRQs erlauben löst den Deadlock.

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

diff --git a/src/kernel2/src/tasks/scheduler.c b/src/kernel2/src/tasks/scheduler.c
index 43c8180..de95d83 100644
--- a/src/kernel2/src/tasks/scheduler.c
+++ b/src/kernel2/src/tasks/scheduler.c
@@ -231,6 +231,11 @@ void pm_scheduler_push(pm_thread_t* thread)
 void pm_scheduler_yield(void)
 {
     asm volatile("int $0x30;" : : "a" (SYSCALL_PM_SLEEP));
+
+    // Es kann passieren, dass zwei Tasks im Kernel hin- und heryielden und
+    // auf irgendetwas warten, was von einem IRQ abhängt. Deshalb müssen wir
+    // dem IRQ eine Chance geben, anzukommen.
+    asm volatile("sti; nop; cli");
 }
 
 /**
-- 
1.6.0.2