Refactor to move prov stuff to coreprov.c (3/4)
[akaros.git] / kern / src / coreprov.c
index 4444af4..7f7c8db 100644 (file)
@@ -60,3 +60,35 @@ void __unprovision_all_cores(struct proc *p)
        __unprov_pcore_list(&p->ksched_data.crd.prov_alloc_me);
        __unprov_pcore_list(&p->ksched_data.crd.prov_not_alloc_me);
 }
+
+/* Print a list of the cores currently provisioned to p. */
+void print_proc_coreprov(struct proc *p)
+{
+       struct sched_pcore *spc_i;
+
+       if (!p)
+               return;
+       printk("Prov cores alloced to proc %d (%p)\n----------\n", p->pid, p);
+       TAILQ_FOREACH(spc_i, &p->ksched_data.crd.prov_alloc_me, prov_next)
+               printk("Pcore %d\n", spc2pcoreid(spc_i));
+       printk("Prov cores not alloced to proc %d (%p)\n----------\n", p->pid, p);
+       TAILQ_FOREACH(spc_i, &p->ksched_data.crd.prov_not_alloc_me, prov_next)
+               printk("Pcore %d (alloced to %d (%p))\n", spc2pcoreid(spc_i),
+                      spc_i->alloc_proc ? spc_i->alloc_proc->pid : 0,
+                      spc_i->alloc_proc);
+}
+
+/* Print the processes attached to each provisioned core. */
+void print_coreprov_map(void)
+{
+       struct sched_pcore *spc_i;
+       /* Doing this unlocked, which is dangerous, but won't deadlock */
+       printk("Which cores are provisioned to which procs:\n------------------\n");
+       for (int i = 0; i < num_cores; i++) {
+               spc_i = pcoreid2spc(i);
+               printk("Core %02d, prov: %d(%p) alloc: %d(%p)\n", i,
+                      spc_i->prov_proc ? spc_i->prov_proc->pid : 0, spc_i->prov_proc,
+                      spc_i->alloc_proc ? spc_i->alloc_proc->pid : 0,
+                      spc_i->alloc_proc);
+       }
+}