[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH v4 02/12] 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> Reviewed-by: Florian Schmidt <florian.schmidt@xxxxxxxxx> --- lib/uksched/exportsyms.uk | 1 + lib/uksched/include/uk/sched.h | 2 ++ lib/uksched/sched.c | 18 ++++++++++++++++++ lib/ukschedcoop/schedcoop.c | 26 ++++---------------------- 4 files changed, 25 insertions(+), 22 deletions(-) diff --git a/lib/uksched/exportsyms.uk b/lib/uksched/exportsyms.uk index 9dc133ca..45a9694a 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 bbfe4423..d2fc8df3 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 12780ec8..c3be2060 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_pr_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 6f51eceb..3e3a92f5 100644 --- a/lib/ukschedcoop/schedcoop.c +++ b/lib/ukschedcoop/schedcoop.c @@ -194,26 +194,16 @@ struct uk_sched *uk_schedcoop_init(struct uk_alloc *a) uk_pr_info("Initializing cooperative scheduler\n"); - sched = uk_malloc(a, sizeof(struct uk_sched)); - if (sched == NULL) { - uk_pr_warn("Could not allocate memory for scheduler.\n"); - 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_pr_warn("Could not allocate memory for scheduler private data.\n"); - 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); @@ -223,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 |