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

[tyndur-devel] [PATCH 2.5/3] kernel2: pm_scheduler_get



+ kernel2: Neue Funktion pm_scheduler_get, um einen bestimmten Task aus
  der Scheduling-Queue zu holen

Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
---
 src/kernel2/include/tasks.h       |    3 +++
 src/kernel2/src/tasks/scheduler.c |   19 +++++++++++++++++++
 2 files changed, 22 insertions(+), 0 deletions(-)

diff --git a/src/kernel2/include/tasks.h b/src/kernel2/include/tasks.h
index 37d9714..55e6614 100644
--- a/src/kernel2/include/tasks.h
+++ b/src/kernel2/include/tasks.h
@@ -184,6 +184,9 @@ void pm_scheduler_refresh(void);
 /// Einen Thread zum ausfuehren holen
 pm_thread_t* pm_scheduler_pop(void);
 
+/// Einen bestimmten Thread zum Ausfuehren holen
+void pm_scheduler_get(pm_thread_t* thread);
+
 /// Einen ausgefuerten Thread wieder zurueck an den Scheduler geben
 void pm_scheduler_push(pm_thread_t* thread);
 
diff --git a/src/kernel2/src/tasks/scheduler.c b/src/kernel2/src/tasks/scheduler.c
index 975412a..1b85450 100644
--- a/src/kernel2/src/tasks/scheduler.c
+++ b/src/kernel2/src/tasks/scheduler.c
@@ -38,6 +38,7 @@
 #include <stdlib.h>
 #include <collections.h>
 
+#include "kernel.h"
 #include "tasks.h"
 #include "lock.h"
 
@@ -180,6 +181,24 @@ pm_thread_t* pm_scheduler_pop()
 }
 
 /**
+ * Holt einen bestimmten Thread zum Ausfuehren
+ */
+void pm_scheduler_get(pm_thread_t* thread)
+{
+    int i;
+    pm_thread_t* p;
+
+    // Falls der Thread in der Liste der zu schedulenden Tasks ist, muessen wir
+    // ihn rausloeschen. Ansonsten brauchen wir nichts zu machen.
+    for (i = 0; (p = list_get_element_at(threads_scheduled, i)); i++) {
+        if (p == thread) {
+            list_remove(threads_scheduled, i);
+            return;
+        }
+    }
+}
+
+/**
  * Einen ausgefuerten Thread wieder zurueck an den Scheduler geben
  *
  * @param thread Pointer auf eine Thread-Struktur
-- 
1.6.0.2