Fixed DISABLE_SMT to report the right max_vcores
[akaros.git] / kern / arch / i686 / smp_boot.c
index 7a290ca..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());
        // 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
        smp_remap_coreids();
 
        // Remove the mapping of the page used by the trampoline
@@ -301,6 +305,9 @@ void smp_percpu_init(void)
 {
        uint32_t coreid = core_id();
 
 {
        uint32_t coreid = core_id();
 
+       /* Ensure the FPU units are initialized */
+       asm volatile ("fninit");
+
        /* core 0 sets up via the global gdt symbol */
        if (!coreid)
                per_cpu_info[0].gdt = gdt;
        /* core 0 sets up via the global gdt symbol */
        if (!coreid)
                per_cpu_info[0].gdt = gdt;
@@ -317,6 +324,6 @@ void smp_percpu_init(void)
        /* set a per-core timer interrupt to go off and call local_schedule every
         * TIMER_uSEC microseconds.  The handler is registered independently of
         * EXPER_TRADPROC, in line with what sparc does. */
        /* set a per-core timer interrupt to go off and call local_schedule every
         * TIMER_uSEC microseconds.  The handler is registered independently of
         * EXPER_TRADPROC, in line with what sparc does. */
-       lapic_set_timer(TIMER_uSEC, TRUE);
+       set_core_timer(TIMER_uSEC);
 #endif
 }
 #endif
 }