Proc vcore list only has available vcores
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 15 May 2014 00:09:11 +0000 (17:09 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 15 May 2014 00:09:11 +0000 (17:09 -0700)
Previously, you could see up to vcore 8 on an 8 core machine, even
though you could never get that last vcore.  This commit keeps the list
of vcores in sync with which vcores are available.

Right now, the rules for max_vcores is that it is set at process
creation and never changed.  The ksched could offer a process less than
the number of CG cores in the system, via the max_vcores() function.

kern/src/process.c

index e4aa091..8fc1c9e 100644 (file)
@@ -275,10 +275,8 @@ static void proc_init_procinfo(struct proc* p)
        p->procinfo->num_vcores = 0;
        p->procinfo->is_mcp = FALSE;
        p->procinfo->coremap_seqctr = SEQCTR_INITIALIZER;
-       /* For now, we'll go up to the max num_cpus (at runtime).  In the future,
-        * there may be cases where we can have more vcores than num_cpus, but for
-        * now we'll leave it like this. */
-       for (int i = 0; i < num_cpus; i++) {
+       /* It's a bug in the kernel if we let them ask for more than max */
+       for (int i = 0; i < p->procinfo->max_vcores; i++) {
                TAILQ_INSERT_TAIL(&p->inactive_vcs, &p->procinfo->vcoremap[i], list);
        }
 }