[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[tyndur-devel] [PATCH 6/8] kernel2: Taskswitch zum Interrupthandler
* kernel2: Wenn ein IRQ an den Userspace zugestellt wird, auch zum
passenden Task wechseln, damit er gleich ausgeführt wird.
Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
---
src/kernel2/src/interrupts/im.c | 8 ++++++--
1 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/kernel2/src/interrupts/im.c b/src/kernel2/src/interrupts/im.c
index e4ac8e4..23cec59 100644
--- a/src/kernel2/src/interrupts/im.c
+++ b/src/kernel2/src/interrupts/im.c
@@ -287,6 +287,7 @@ void im_send_interrupts(void)
{
uint32_t intr;
pm_thread_t* old_thread = current_thread;
+ pm_thread_t* new_thread = old_thread;
for (intr = 0; intr < IM_NUM_INTERRUPTS; intr++)
{
@@ -298,8 +299,8 @@ void im_send_interrupts(void)
// Dieses Wechseln des Tasks ist wichtig: IRQs werden nur
// angenommen, wenn der Task sie sich selbst schickt
- // TODO schedule_to_task(intr_handling_task[intr], esp);
- current_thread = list_get_element_at(intr_handling_task[intr]->threads, 0);
+ current_thread = new_thread =
+ list_get_element_at(intr_handling_task[intr]->threads, 0);
if (!fastrpc_irq(intr_handling_task[intr], 0, 0,
sizeof(intr), (char*) &intr, intr - IM_IRQ_BASE))
@@ -311,4 +312,7 @@ void im_send_interrupts(void)
}
current_thread = old_thread;
+ if (new_thread!= old_thread) {
+ pm_scheduler_try_switch(new_thread);
+ }
}
--
1.6.0.2