[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


  • To: minios-devel@xxxxxxxxxxxxx
  • From: Costin Lupu <costin.lupu@xxxxxxxxx>
  • Date: Fri, 22 Mar 2019 16:16:29 +0200
  • Cc: Florian.Schmidt@xxxxxxxxx
  • Delivery-date: Fri, 22 Mar 2019 14:16:48 +0000
  • Ironport-phdr: 9a23:HQgPixA/6altg1QKQj6lUyQJP3N1i/DPJgcQr6AfoPdwSPT6rsbcNUDSrc9gkEXOFd2Cra4d06yJ6uu9BiQp2tWoiDg6aptCVhsI2409vjcLJ4q7M3D9N+PgdCcgHc5PBxdP9nC/NlVJSo6lPwWB6nK94iQPFRrhKAF7Ovr6GpLIj8Swyuu+54Dfbx9HiTagfb9+Nhe7oRjeusQWg4ZpN7o8xAbOrnZUYepd2HlmJUiUnxby58ew+IBs/iFNsP8/9MBOTLv3cb0gQbNXEDopPWY15Nb2tRbYVguA+mEcUmQNnRVWBQXO8Qz3UY3wsiv+sep9xTWaMMjrRr06RTiu86FmQwLuhSwaNTA27XvXh9RwgqxFvRyvqR9xzYnWb4GbL/dyYr/RcMkGSWdbQspdSypMCZ68YYsVCOoBOP5Vopf6p1sVsRu+BA+sD/7pxD9Vnn/2wLAx3uM9HgHBxwwgA9MOsHLOoNXxKacSSf21wbLUwjXYdf9WwSr955PSfhA7pvGBRLR9etfSx0k3Dw7Jk1qdpZH/Mz6W1ukBqXaX4/RiWO61hWMrsxx9rzeyyss2iYTEhpgZxk7K+Ch32oo5ONK1RFB9bNW5CpVfrTuaOJFzQs46RmFovzs1xaMetJ6geSgK1IwnxxnCa/yba4SI4gzsVOKWITpgmnJlfaiwhxe28US61uL8TdO40E5XriVeiNXMrHcN2wTS6siBVPR94l+s1SuA2gzO8O1JIkA5mbDFJ5I/wLM8jJQevVzGHiDsmUX2iKGWdl8j+uit8+nofrLmpoSAN491jAHyKKAumtGnAeQlKQUBQ3Ob9f6k1L3+5kL1Wq9KjvounqnDrJ/aPdgbprK+AwJN14Yj6hC/Dzah0NQDhHUIMUxKeAyZgIjtIFzOJPH4Deyjg1S3ijtqyO7JPrv7DpXKNHjDn6/rfaxh5E5E1Aoz0ddf6opUBLEFJ/LzQE7xu8beDhMjLgK73+bnCNB81owDRWKCGamZP73Ovl+M/O0gOPOAa5EIuGW1F/9w4v/ojHgi3FMQY6St9Z8Wc2yjWORrJQOee3W/rM0GFDIhuREiTeqirECaTHYHbHGpQ6M6oDUmEJ+OBpyFXp2nxqaGinToVqZKb3xLXwjfWUzjcJ+JDq8B
  • Ironport-sdr: IrCyJxOxPJpY/93SrYhQ2un1a02SglKFZ0v0O6tBb6BcjQp8qiz0Qwing0yXypPpgKXN24EdQE RmyqoQ3m00lw==
  • List-id: Mini-os development list <minios-devel.lists.xenproject.org>

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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.