[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