[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Minios-devel] [UNIKRAFT PATCH v3 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 17:15:51 +0200
  • Cc: Florian.Schmidt@xxxxxxxxx
  • Delivery-date: Fri, 22 Mar 2019 15:16:53 +0000
  • Ironport-phdr: 9a23:fnB+TxOAbalzc4ddQx4l6mtUPXoX/o7sNwtQ0KIMzox0Iv3yrarrMEGX3/hxlliBBdydt6sczbWP+P+7EUU7or+5+EgYd5JNUxJXwe43pCcHRPC/NEvgMfTxZDY7FskRHHVs/nW8LFQHUJ2mPw6arXK99yMdFQviPgRpOOv1BpTSj8Oq3Oyu5pHfeQpFiCehbb9oLhi6sArdu8sYjIB/Nqs/1xzFr2dSde9L321oP1WTnxj95se04pFu9jlbtuwi+cBdT6j0Zrw0QrNEAjsoNWA1/9DrugLYTQST/HscU34ZnQRODgPY8Rz1RJbxsi/9tupgxCmXOND9QL4oVTi+6apgVRnlgzoFOTEk6mHaksx+grxGrhyvpBJxxIzbYI+OOfZiYq/QZ88WSHBdUspNUSFKH4Oyb5EID+oEJetVsY79p0ASrRu/AwmnGeXhyiJQhn/rwKY31PguEQbd3Aw8HtIOtm7YrNHoNKcKTOC417XHzS7ZY/NOxDfy85LEcgomofyVW797bMnfyVE3Gg/YgVictJbpMjCV2+gXrWSX8ehtWfihhmI/tg18rSWjyt0vh4TJnI4Z1F7J+CtjzIooKtC0Vkh2asO+HpRKrSGVLY52T9snQ2FvpSk11KULuYW+fCgW0JQnwAPfa+Cff4iI/B3jUOGRLC9mhHJgYr2/hhKy/VK8xe3nTMW0yEtKoTFfntnWsXABzx3T6s6ZRfth5kqtxDmC2x3J5uxHIU04j7TXJ4Ajz7IqmJcfqUHDETX3mEXygq+WbEIk+u2w5uv7ZbXmvYOcN45yig3kNqQuh9S/AfkjPwcSRGiX4/y81KD48kHjWrVKieU6krPFv5DCOcQbuqm5DhdQ0oYi7Ra/DjCm0M8BkXYaMl1FZgyIj4zyNlHKIfD4Fuu/g0+2nDZk2f/GOKftApLXLnjMiL3hZ6py61ZAyAovytBS/5JaCrUGIPLpW0/+rtrYAgUkPQOow+bnDdR92Z4CWW+UBK+WLr/dsVuS6e00OeWDepIV637BLK0g5vjvimR8lVIDcK2B2ZoMdGv+DvlgZUKDbinCmNAEREwNpRY/SqTOlUWfGWpYYG2uXqR64iwjFaqtFsHbW4rrmrvXj3TzJYFfem0TUgPEKnzvbYjRA/o=
  • Ironport-sdr: ynKA3xFbr5yGiHA+7JGjwf6gVmUOGAQ1nwWt44f/ZcQniAqSckqUDqDuNsY3OGRo1xHOHd5ZbI uzJZqFvuaUQw==
  • 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®.