Refactor to move prov stuff to coreprov.c (4/4)
authorKevin Klues <klueska@cs.berkeley.edu>
Mon, 28 Sep 2015 22:09:54 +0000 (15:09 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 24 Nov 2015 19:48:50 +0000 (14:48 -0500)
This is the final commit of this series. It moves the functionality
to initialize the proc_alloc_me and prov_not_alloc_me lists out of
schedule.c and into coreprov.c.

At first it was unclear if we wanted to do the initialization of these
lists here, or wait until we do initialization in our corealloc.c file
(because these lists are used in the coreallocation process as well).
However, these list only exist because provisioning exits, so it
probably makes sense to initialize them here. Anyway, the lists are only
accessed by the core allocation logic upon branching to determine that a
core is provisioned in the first place.

Signed-off-by: Kevin Klues <klueska@cs.berkeley.edu>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/include/corerequest.h
kern/src/coreprov.c
kern/src/schedule.c

index 7df8a32..6ade7cf 100644 (file)
@@ -24,6 +24,9 @@ struct core_request_data {
        struct sched_pcore_tailq  prov_not_alloc_me;  /* maybe alloc to others */
 };
 
+/* Initialize any data associated with provisiong cores to a process. */
+void coreprov_proc_init(struct proc *p);
+
 /* Provision a core to proc p. This code assumes that the scheduler that uses
  * it holds a lock for the duration of the call. */
 void __provision_core(struct proc *p, struct sched_pcore *spc);
index 7f7c8db..6134a1a 100644 (file)
@@ -8,6 +8,13 @@
 #include <env.h>
 #include <schedule.h>
 
+/* Initialize any data associated with provisiong cores to a process. */
+void coreprov_proc_init(struct proc *p)
+{
+       TAILQ_INIT(&p->ksched_data.crd.prov_alloc_me);
+       TAILQ_INIT(&p->ksched_data.crd.prov_not_alloc_me);
+}
+
 /* Provision a core to proc p. This code assumes that the scheduler that uses
  * it holds a lock for the duration of the call. */
 void __provision_core(struct proc *p, struct sched_pcore *spc)
index 6161a9c..0382dbe 100644 (file)
@@ -116,7 +116,6 @@ static void __ksched_tick(struct alarm_waiter *waiter)
 void schedule_init(void)
 {
        spin_lock(&sched_lock);
-       /* init provisioning stuff */
        all_pcores = kmalloc(sizeof(struct sched_pcore) * num_cores, 0);
        memset(all_pcores, 0, sizeof(struct sched_pcore) * num_cores);
        assert(!core_id());             /* want the alarm on core0 for now */
@@ -190,8 +189,7 @@ void __sched_proc_register(struct proc *p)
        /* one ref for the proc's existence, cradle-to-grave */
        proc_incref(p, 1);      /* need at least this OR the 'one for existing' */
        spin_lock(&sched_lock);
-       TAILQ_INIT(&p->ksched_data.crd.prov_alloc_me);
-       TAILQ_INIT(&p->ksched_data.crd.prov_not_alloc_me);
+       coreprov_proc_init(p);
        add_to_list(p, &unrunnable_scps);
        spin_unlock(&sched_lock);
 }