diff options
author | kib <kib@FreeBSD.org> | 2015-04-15 06:59:53 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2015-04-15 06:59:53 +0000 |
commit | dcb9c46825addcba6c75a61e50bc71107b17f28d (patch) | |
tree | dc886b46ddb8778cef7c2492be71ff8d3a90bc26 /sys/i386/include/pmap.h | |
parent | 57545f1ca451f45fa9e72cfa938b983da7d593bb (diff) | |
download | FreeBSD-src-dcb9c46825addcba6c75a61e50bc71107b17f28d.zip FreeBSD-src-dcb9c46825addcba6c75a61e50bc71107b17f28d.tar.gz |
MFC r281272:
Explain that vm_page_array is mapped to describe the memory, not the
memory itself. Provide the formula to calculate the number of
required page tables. Correct the size of the struct vm_page for
non-PAE case.
Diffstat (limited to 'sys/i386/include/pmap.h')
-rw-r--r-- | sys/i386/include/pmap.h | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/sys/i386/include/pmap.h b/sys/i386/include/pmap.h index 05656cd..2c9a409 100644 --- a/sys/i386/include/pmap.h +++ b/sys/i386/include/pmap.h @@ -122,13 +122,18 @@ */ #define VADDR(pdi, pti) ((vm_offset_t)(((pdi)<<PDRSHIFT)|((pti)<<PAGE_SHIFT))) -/* Initial number of kernel page tables. */ +/* + * The initial number of kernel page table pages that are constructed + * by locore must be sufficient to map vm_page_array. That number can + * be calculated as follows: + * max_phys / PAGE_SIZE * sizeof(struct vm_page) / NBPDR + * PAE: max_phys 16G, sizeof(vm_page) 76, NBPDR 2M, 152 page table pages. + * Non-PAE: max_phys 4G, sizeof(vm_page) 68, NBPDR 4M, 18 page table pages. + */ #ifndef NKPT #ifdef PAE -/* 152 page tables needed to map 16G (76B "struct vm_page", 2M page tables). */ #define NKPT 240 #else -/* 18 page tables needed to map 4G (72B "struct vm_page", 4M page tables). */ #define NKPT 30 #endif #endif |