Removed lapic_set_id and lapic_set_logid functions
[akaros.git] / kern / arch / x86 / smp_boot.c
index 9d5405b..05df791 100644 (file)
@@ -261,8 +261,6 @@ uintptr_t smp_main(void)
 
        apiconline();
 
-       // set a default logical id for now
-       lapic_set_logid(lapic_get_id());
 
        return my_stack_top; // will be loaded in smp_entry.S
 }
@@ -276,17 +274,22 @@ void __arch_pcpu_init(uint32_t coreid)
 {
        uintptr_t *my_stack_bot;
        struct per_cpu_info *pcpui = &per_cpu_info[coreid];
+       uint32_t eax, edx;
 
        /* Flushes any potentially old mappings from smp_boot() (note the page table
         * removal) */
        tlbflush();
-       /* Ensure the FPU units are initialized */
-       asm volatile ("fninit");
 
        /* Enable SSE instructions.  We might have to do more, like masking certain
         * flags or exceptions in the MXCSR, or at least handle the SIMD exceptions.
         * We don't do it for FP yet either, so YMMV. */
-       lcr4(rcr4() | CR4_OSFXSR | CR4_OSXMME);
+       lcr4(rcr4() | CR4_OSFXSR | CR4_OSXMME | CR4_OSXSAVE);
+
+       // Set xcr0 to the Akaros-wide default
+       lxcr0(x86_default_xcr0);
+
+       // Initialize fpu and extended state by restoring our default XSAVE area.
+       init_fp_state();
 
        /* core 0 sets up via the global gdt symbol */
        if (!coreid) {