summaryrefslogtreecommitdiff
path: root/i386/i386at/model_dep.c
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2012-03-18 20:31:22 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2020-03-28 17:01:53 +0100
commit0b3504b6db86c531e8b53b8e9aa9030db6e72357 (patch)
treebbdcc8907f2e1700721de715220e28773518c657 /i386/i386at/model_dep.c
parente3460f05cbe141073e62c24afe5e3a8f99c05ed4 (diff)
pmap.h: Add 64bit variant
* i386/intel/pmap.h (L4SHIFT, L4MASK, lin2l4num): New macros (PDPNUM, PDPMASK, set_pmap): Add 64bit variant. Make PAE use the 64bit mask too. (pmap): Add l4base, user_l4base, user_pdpbase fields. * i386/intel/pmap.c (pmap_bootstrap): Clear the whole PDP. Enable write bit in PDP. Set user pagetable to NULL. Initialize l4base. (pmap_clear_bootstrap_pagetable): Add 4th-level support. (pmap_ceate): Clear the whole PDP. Enable write bit in PDP. Initialize l4base, user_pdpbase, user_l4base. (pmap_destroy): Clear l4base, user_pdpbase, user_l4base. * i386/i386at/model_dep.c (i386at_init): Load l4base on 64bits.
Diffstat (limited to 'i386/i386at/model_dep.c')
-rw-r--r--i386/i386at/model_dep.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/i386/i386at/model_dep.c b/i386/i386at/model_dep.c
index 61ed4748..02adec17 100644
--- a/i386/i386at/model_dep.c
+++ b/i386/i386at/model_dep.c
@@ -452,14 +452,18 @@ i386at_init(void)
#endif /* PAE */
#endif /* MACH_PV_PAGETABLES */
#if PAE
- set_cr3((unsigned)_kvtophys(kernel_pmap->pdpbase));
+#ifdef __x86_64__
+ set_cr3((unsigned long)_kvtophys(kernel_pmap->l4base));
+#else
+ set_cr3((unsigned long)_kvtophys(kernel_pmap->pdpbase));
+#endif
#ifndef MACH_HYP
if (!CPU_HAS_FEATURE(CPU_FEATURE_PAE))
panic("CPU doesn't have support for PAE.");
set_cr4(get_cr4() | CR4_PAE);
#endif /* MACH_HYP */
#else
- set_cr3((unsigned)_kvtophys(kernel_page_dir));
+ set_cr3((unsigned long)_kvtophys(kernel_page_dir));
#endif /* PAE */
#ifndef MACH_HYP
/* Turn paging on.
@@ -527,7 +531,7 @@ i386at_init(void)
/*
* C boot entrypoint - called by boot_entry in boothdr.S.
- * Running in 32-bit flat mode, but without paging yet.
+ * Running in flat mode, but without paging yet.
*/
void c_boot_entry(vm_offset_t bi)
{