Add flags that VMs need. But many other things do as well.
[akaros.git] / kern / arch / x86 / pmap64.c
index 7820da1..775f228 100644 (file)
@@ -440,9 +440,9 @@ void vm_init(void)
        map_segment(boot_pgdir, IOAPIC_BASE, PGSIZE, IOAPIC_PBASE,
                    PTE_PCD | PTE_PWT | PTE_W | PTE_G, max_jumbo_shift);
        /* VPT mapping: recursive PTE inserted at the VPT spot */
-       boot_pgdir[PDX(VPT)] = PADDR(boot_pgdir) | PTE_W | PTE_P | PTE_G;
+       boot_pgdir[PDX(VPT)] = PADDR(boot_pgdir) | PTE_W | PTE_P;
        /* same for UVPT, accessible by userspace (RO). */
-       boot_pgdir[PDX(UVPT)] = PADDR(boot_pgdir) | PTE_U | PTE_P | PTE_G;
+       boot_pgdir[PDX(UVPT)] = PADDR(boot_pgdir) | PTE_U | PTE_P;
        /* set up core0s now (mostly for debugging) */
        setup_default_mtrrs(0);
        /* Our current gdt_pd (gdt64desc) is pointing to a physical address for the
@@ -451,6 +451,11 @@ void vm_init(void)
        gdt_pd = (pseudodesc_t) {sizeof(segdesc_t) * SEG_COUNT - 1,
                                 (uintptr_t)gdt};
        asm volatile("lgdt %0" : : "m"(gdt_pd));
+       /* LAPIC is mapped, if we're using that.  if we're using rdtscp or some
+        * other non-LAPIC method, we can (probably) start using it right away.  we
+        * may get 0 back on other cores, if smp_boot hasn't completed, though
+        * that's no different than before this is TRUE. */
+       core_id_ready = TRUE;
 }
 
 void x86_cleanup_bootmem(void)