diff options
author | Luca Dariz <luca@orpolo.org> | 2023-02-12 18:28:18 +0100 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2023-02-12 19:20:31 +0100 |
commit | 6a46db9fe035c26ab549bc0b681469fc650141d6 (patch) | |
tree | 18168863abbfbb4e1850c995269a20b86e748d31 /i386/intel | |
parent | eef53f7a1309e52012babc62da81a2ac750a7e9f (diff) | |
download | gnumach-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.h | 12 |
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 |