[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