aboutsummaryrefslogtreecommitdiff
path: root/i386/intel
diff options
context:
space:
mode:
authorLuca Dariz <luca@orpolo.org>2023-02-12 18:28:18 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2023-02-12 19:20:31 +0100
commit6a46db9fe035c26ab549bc0b681469fc650141d6 (patch)
tree18168863abbfbb4e1850c995269a20b86e748d31 /i386/intel
parenteef53f7a1309e52012babc62da81a2ac750a7e9f (diff)
downloadgnumach-6a46db9fe035c26ab549bc0b681469fc650141d6.tar.gz
gnumach-6a46db9fe035c26ab549bc0b681469fc650141d6.tar.bz2
gnumach-6a46db9fe035c26ab549bc0b681469fc650141d6.zip
move kernel virtual address space to upper addresses
* i386/i386/vm_param.h: adjust constants to the new kernel map - the boothdr.S code already sets up a temporary map to higher addresses, so we can use INIT_VM_MIN_KERNEL_ADDRESS as in xen - increase the kernel map size to accomodate for bigger structures and more memory - adjust kernel max address and directmap limit * i386/i386at/biosmem.c: enable directmap check also on x86_64 * i386/include/mach/i386/vm_param.h: increase user virtual memory limit as it's not conflicting with the kernel's anymore * i386/intel/pmap.h: adjust lin2pdenum_cont() and INTEL_PTE_PFN to the new kernel map * x86_64/Makefrag.am: change KERNEL_MAP_BASE to be above 4G, and according to mcmodel=kernel. This will allow to use the full memory address space. Message-Id: <20230212172818.1511405-10-luca@orpolo.org>
Diffstat (limited to 'i386/intel')
-rw-r--r--i386/intel/pmap.h12
1 files changed, 10 insertions, 2 deletions
diff --git a/i386/intel/pmap.h b/i386/intel/pmap.h
index 34c7cc89..78d27bc8 100644
--- a/i386/intel/pmap.h
+++ b/i386/intel/pmap.h
@@ -77,10 +77,10 @@ typedef phys_addr_t pt_entry_t;
#define PDPNUM_KERNEL (((VM_MAX_KERNEL_ADDRESS - VM_MIN_KERNEL_ADDRESS) >> PDPSHIFT) + 1)
#define PDPNUM_USER (((VM_MAX_USER_ADDRESS - VM_MIN_USER_ADDRESS) >> PDPSHIFT) + 1)
#define PDPMASK 0x1ff /* mask for page directory pointer index */
-#else
+#else /* __x86_64__ */
#define PDPNUM 4 /* number of page directory pointers */
#define PDPMASK 3 /* mask for page directory pointer index */
-#endif
+#endif /* __x86_64__ */
#define PDPSHIFT 30 /* page directory pointer */
#define PDESHIFT 21 /* page descriptor shift */
#define PDEMASK 0x1ff /* mask for page descriptor index */
@@ -109,7 +109,11 @@ typedef phys_addr_t pt_entry_t;
#if PAE
/* Special version assuming contiguous page directories. Making it
include the page directory pointer table index too. */
+#ifdef __x86_64__
+#define lin2pdenum_cont(a) (((a) >> PDESHIFT) & 0x3ff)
+#else
#define lin2pdenum_cont(a) (((a) >> PDESHIFT) & 0x7ff)
+#endif
#else
#define lin2pdenum_cont(a) lin2pdenum(a)
#endif
@@ -155,7 +159,11 @@ typedef phys_addr_t pt_entry_t;
#endif /* MACH_PV_PAGETABLES */
#define INTEL_PTE_WIRED 0x00000200
#ifdef PAE
+#ifdef __x86_64__
+#define INTEL_PTE_PFN 0xfffffffffffff000ULL
+#else /* __x86_64__ */
#define INTEL_PTE_PFN 0x00007ffffffff000ULL
+#endif/* __x86_64__ */
#else
#define INTEL_PTE_PFN 0xfffff000
#endif