Fixed DISABLE_SMT to report the right max_vcores
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 27 Apr 2010 02:27:49 +0000 (19:27 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:35:45 +0000 (17:35 -0700)
kern/arch/i686/smp_boot.c
kern/src/process.c
tests/mhello.c

index 0fd7919..4a1dd73 100644 (file)
@@ -160,7 +160,11 @@ void smp_boot(void)
        // mapping pulled out from under them.  Now, if a core loses, it will spin
        // on the trampoline (which we must be careful to not deallocate)
        __spin_lock(get_smp_bootlock());
-       cprintf("Num_Cpus Detected: %d\n", num_cpus);
+       printk("Number of Cores Detected: %d\n", num_cpus);
+#ifdef __CONFIG_DISABLE_SMT__
+       assert(!(num_cpus % 2));
+       printk("Using only %d Idlecores (SMT Disabled)\n", num_cpus >> 1);
+#endif /* __CONFIG_DISABLE_SMT__ */
        smp_remap_coreids();
 
        // Remove the mapping of the page used by the trampoline
index 60302e1..54a1d5d 100644 (file)
@@ -195,9 +195,9 @@ void proc_init(void)
 #ifdef __CONFIG_DISABLE_SMT__
        /* assumes core0 is the only management core (NIC and monitor functionality
         * are run there too.  it just adds the odd cores to the idlecoremap */
-       assert(!(num_cpus & 0x1));
+       assert(!(num_cpus % 2));
        // TODO: consider checking x86 for machines that actually hyperthread
-       num_idlecores = num_cpus / 2;
+       num_idlecores = num_cpus >> 1;
        for (int i = 0; i < num_idlecores; i++)
                idlecoremap[i] = (i * 2) + 1;
 #else
@@ -233,7 +233,11 @@ proc_init_procinfo(struct proc* p)
        p->procinfo->ppid = p->ppid;
        p->procinfo->tsc_freq = system_timing.tsc_freq;
        // TODO: maybe do something smarter here
+#ifdef __CONFIG_DISABLE_SMT__
+       p->procinfo->max_vcores = num_cpus >> 1;
+#else
        p->procinfo->max_vcores = MAX(1,num_cpus-num_mgmtcores);
+#endif /* __CONFIG_DISABLE_SMT__ */
 }
 
 #ifdef __CONFIG_EXPER_TRADPROC__
index c07a5e9..55edd22 100644 (file)
@@ -57,8 +57,8 @@ int main(int argc, char** argv)
                printf("Multi-Goodbye, world, from PID: %d!\n", sys_getpid());
                //retval = sys_resource_req(RES_CORES, 2, 0);
                printf("Requesting %d vcores\n",max_vcores());
-               //retval = vcore_request(max_vcores());
-               retval = vcore_request(5);
+               retval = vcore_request(max_vcores());
+               //retval = vcore_request(5);
                printf("This is vcore0, right after vcore_request, retval=%d\n", retval);
        }