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

Re: [Minios-devel] [UNIKRAFT PATCH 2/8] lib/uksched: Add function for allocating scheduler common info



This patch needs slight changes to cleanly apply to staging, related to 1c6eca07 ("plat/*: Replace uk_printd() with uk_pr_*() equivalents"). It also should use those macros itself. I pointed out the three locations below (two deletions, one addition) where this is necessary to cleanly apply and be up-to-date with current usage.

Other than that, for the general logic of the patch:

Reviewed-by: Florian Schmidt <florian.schmidt@xxxxxxxxx>

On 9/18/18 5:27 PM, Costin Lupu wrote:
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.");

This now needs to be uk_pr_warn("Could not allocate scheduler.\n");


+               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.");

This now needs to be uk_pr_warn("Could not allocate 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_printd(DLVL_WARN,
-                               "Could not allocate memory for scheduler private 
data.");

This now needs to be 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); @@ -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;
  }


--
Dr. Florian Schmidt
フローリアン・シュミット
Research Scientist,
Systems and Machine Learning Group
NEC Laboratories Europe
Kurfürsten-Anlage 36, D-69115 Heidelberg
Tel.     +49 (0)6221 4342-265
Fax:     +49 (0)6221 4342-155
e-mail:  florian.schmidt@xxxxxxxxx
============================================================
Registered at Amtsgericht Mannheim, Germany, HRB728558

_______________________________________________
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®.