|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH v2 8/8] lib/uksched: Minor refinements
- Schedulers implementations should set scheduler reference on threads
- uk_sched_start is public
- initialize reentrant field on threads if newlib enabled
- remove redundant config dependencies on ukschedcoop lib
Signed-off-by: Costin Lupu <costin.lupu@xxxxxxxxx>
---
lib/uksched/include/uk/sched.h | 14 ++++++--------
lib/uksched/include/uk/thread.h | 4 ++--
lib/uksched/thread.c | 6 ++++--
lib/ukschedcoop/Config.uk | 2 --
lib/ukschedcoop/schedcoop.c | 1 +
5 files changed, 13 insertions(+), 14 deletions(-)
diff --git a/lib/uksched/include/uk/sched.h b/lib/uksched/include/uk/sched.h
index 5800c07..9e04bfa 100644
--- a/lib/uksched/include/uk/sched.h
+++ b/lib/uksched/include/uk/sched.h
@@ -112,7 +112,6 @@ static inline int uk_sched_thread_add(struct uk_sched *s,
{
UK_ASSERT(s);
UK_ASSERT(t);
- t->sched = s;
return s->thread_add(s, t, attr);
}
@@ -122,7 +121,6 @@ static inline void uk_sched_thread_remove(struct uk_sched
*s,
UK_ASSERT(s);
UK_ASSERT(t);
s->thread_remove(s, t);
- t->sched = NULL;
}
static inline int uk_sched_thread_set_prio(struct uk_sched *s,
@@ -184,12 +182,6 @@ static inline struct uk_thread *uk_sched_get_idle(struct
uk_sched *s)
return &s->idle;
}
-/*
- * Public scheduler functions
- */
-
-void uk_sched_start(struct uk_sched *sched) __noreturn;
-
#define uk_sched_init(s, yield_func, \
thread_add_func, thread_remove_func, \
thread_set_prio_func, thread_get_prio_func, \
@@ -205,6 +197,12 @@ void uk_sched_start(struct uk_sched *sched) __noreturn;
uk_sched_register((s)); \
} while (0)
+/*
+ * Public scheduler functions
+ */
+
+void uk_sched_start(struct uk_sched *sched) __noreturn;
+
/*
* Internal thread scheduling functions
diff --git a/lib/uksched/include/uk/thread.h b/lib/uksched/include/uk/thread.h
index 4c4e037..7f3c2fd 100644
--- a/lib/uksched/include/uk/thread.h
+++ b/lib/uksched/include/uk/thread.h
@@ -29,7 +29,7 @@
#define __UK_THREAD_H__
#include <stdint.h>
-#ifdef CONFIG_HAVE_LIBC
+#ifdef CONFIG_LIBNEWLIBC
#include <sys/reent.h>
#endif
#include <uk/arch/lcpu.h>
@@ -56,7 +56,7 @@ struct uk_thread {
struct uk_waitq waiting_threads;
struct uk_sched *sched;
void *sched_info;
-#ifdef CONFIG_HAVE_LIBC
+#ifdef CONFIG_LIBNEWLIBC
struct _reent reent;
#endif
};
diff --git a/lib/uksched/thread.c b/lib/uksched/thread.c
index bf1e0d3..d9d340c 100644
--- a/lib/uksched/thread.c
+++ b/lib/uksched/thread.c
@@ -29,6 +29,7 @@
* Thread definitions
* Ported from Mini-OS
*/
+#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <uk/plat/config.h>
@@ -89,10 +90,11 @@ int uk_thread_init(struct uk_thread *thread,
thread->flags = 0;
thread->wakeup_time = 0LL;
uk_waitq_init(&thread->waiting_threads);
+ thread->sched = NULL;
thread->sched_info = NULL;
-#ifdef CONFIG_HAVE_LIBC
- //TODO _REENT_INIT_PTR(&thread->reent);
+#ifdef CONFIG_LIBNEWLIBC
+ _REENT_INIT_PTR(&thread->reent);
#endif
uk_pr_info("Thread \"%s\": pointer: %p, stack: %p\n",
diff --git a/lib/ukschedcoop/Config.uk b/lib/ukschedcoop/Config.uk
index b4277a1..8a50725 100644
--- a/lib/ukschedcoop/Config.uk
+++ b/lib/ukschedcoop/Config.uk
@@ -1,6 +1,4 @@
config LIBUKSCHEDCOOP
bool "ukschedcoop: Cooperative Round-Robin scheduler"
default n
- select LIBNOLIBC if !HAVE_LIBC
- select LIBUKDEBUG
select LIBUKSCHED
diff --git a/lib/ukschedcoop/schedcoop.c b/lib/ukschedcoop/schedcoop.c
index 3536ea6..3d42626 100644
--- a/lib/ukschedcoop/schedcoop.c
+++ b/lib/ukschedcoop/schedcoop.c
@@ -148,6 +148,7 @@ static int schedcoop_thread_add(struct uk_sched *s, struct
uk_thread *t,
}
set_runnable(t);
+ t->sched = s;
flags = ukplat_lcpu_save_irqf();
UK_TAILQ_INSERT_TAIL(&prv->thread_list, t, thread_list);
--
2.11.0
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |