|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH 2/8] lib/uksched: Add function for allocating scheduler common info
We introduce uk_sched_create function which allocates the memory
needed for schedulers data. It also initializes data that is
common to all schedulers.
Signed-off-by: Costin Lupu <costin.lupu@xxxxxxxxx>
---
lib/uksched/exportsyms.uk | 1 +
lib/uksched/include/uk/sched.h | 2 ++
lib/uksched/sched.c | 18 ++++++++++++++++++
lib/ukschedcoop/schedcoop.c | 27 ++++-----------------------
4 files changed, 25 insertions(+), 23 deletions(-)
diff --git a/lib/uksched/exportsyms.uk b/lib/uksched/exportsyms.uk
index 9dc133c..45a9694 100644
--- a/lib/uksched/exportsyms.uk
+++ b/lib/uksched/exportsyms.uk
@@ -2,6 +2,7 @@ uk_sched_default_init
uk_sched_register
uk_sched_get_default
uk_sched_set_default
+uk_sched_create
uk_sched_start
uk_sched_idle_init
uk_sched_thread_create
diff --git a/lib/uksched/include/uk/sched.h b/lib/uksched/include/uk/sched.h
index bbfe442..d2fc8df 100644
--- a/lib/uksched/include/uk/sched.h
+++ b/lib/uksched/include/uk/sched.h
@@ -114,6 +114,8 @@ static inline void uk_sched_thread_remove(struct uk_sched
*s,
* Internal scheduler functions
*/
+struct uk_sched *uk_sched_create(struct uk_alloc *a, size_t prv_size);
+
void uk_sched_idle_init(struct uk_sched *sched,
void *stack, void (*function)(void *));
diff --git a/lib/uksched/sched.c b/lib/uksched/sched.c
index 07e7aef..8276e15 100644
--- a/lib/uksched/sched.c
+++ b/lib/uksched/sched.c
@@ -109,6 +109,24 @@ int uk_sched_set_default(struct uk_sched *s)
return 0;
}
+struct uk_sched *uk_sched_create(struct uk_alloc *a, size_t prv_size)
+{
+ struct uk_sched *sched = NULL;
+
+ UK_ASSERT(a != NULL);
+
+ sched = uk_malloc(a, sizeof(struct uk_sched) + prv_size);
+ if (sched == NULL) {
+ uk_printd(DLVL_WARN, "Could not allocate scheduler.");
+ return NULL;
+ }
+
+ sched->allocator = a;
+ sched->prv = (void *) sched + sizeof(struct uk_sched);
+
+ return sched;
+}
+
void uk_sched_start(struct uk_sched *sched)
{
UK_ASSERT(sched != NULL);
diff --git a/lib/ukschedcoop/schedcoop.c b/lib/ukschedcoop/schedcoop.c
index dd22209..d78ca54 100644
--- a/lib/ukschedcoop/schedcoop.c
+++ b/lib/ukschedcoop/schedcoop.c
@@ -194,27 +194,16 @@ struct uk_sched *uk_schedcoop_init(struct uk_alloc *a)
uk_printd(DLVL_INFO, "Initializing cooperative scheduler\n");
- sched = uk_malloc(a, sizeof(struct uk_sched));
- if (sched == NULL) {
- uk_printd(DLVL_WARN, "Could not allocate memory for
scheduler.");
- goto out_err;
- }
-
- sched->allocator = a;
+ sched = uk_sched_create(a, sizeof(struct schedcoop_private));
+ if (sched == NULL)
+ return NULL;
ukplat_ctx_callbacks_init(&sched->plat_ctx_cbs, ukplat_ctx_sw);
- prv = uk_malloc(a, sizeof(struct schedcoop_private));
- if (prv == NULL) {
- uk_printd(DLVL_WARN,
- "Could not allocate memory for scheduler
private data.");
- goto out_err;
- }
-
+ prv = sched->prv;
UK_TAILQ_INIT(&prv->exited_threads);
UK_TAILQ_INIT(&prv->thread_list);
prv->threads_started = 0;
- sched->prv = prv;
uk_sched_idle_init(sched, NULL, idle_thread_fn);
@@ -224,12 +213,4 @@ struct uk_sched *uk_schedcoop_init(struct uk_alloc *a)
schedcoop_thread_remove);
return sched;
-
-out_err:
- if (prv)
- uk_free(a, prv);
- if (sched)
- uk_free(a, sched);
-
- return NULL;
}
--
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 |