diff options
-rw-r--r-- | xen/arch/x86/mm.c | 5 | ||||
-rw-r--r-- | xen/arch/x86/setup.c | 4 | ||||
-rw-r--r-- | xen/arch/x86/x86_64/mm.c | 4 | ||||
-rw-r--r-- | xen/include/asm-x86/config.h | 22 |
4 files changed, 19 insertions, 16 deletions
diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index 9c289e4221..e043ba10b3 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -146,8 +146,7 @@ unsigned long max_page; unsigned long total_pages; unsigned long __read_mostly pdx_group_valid[BITS_TO_LONGS( - (FRAMETABLE_SIZE / sizeof(*frame_table) + PDX_GROUP_COUNT - 1) - / PDX_GROUP_COUNT)] = { [0] = 1 }; + (FRAMETABLE_NR + PDX_GROUP_COUNT - 1) / PDX_GROUP_COUNT)] = { [0] = 1 }; bool_t __read_mostly machine_to_phys_mapping_valid = 0; @@ -218,7 +217,7 @@ static void __init init_spagetable(void) BUILD_BUG_ON(XEN_VIRT_END > SPAGETABLE_VIRT_START); init_frametable_chunk(spage_table, - mem_hotplug ? (void *)SPAGETABLE_VIRT_END + mem_hotplug ? spage_table + SPAGETABLE_NR : pdx_to_spage(max_pdx - 1) + 1); } diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index f4d3788e06..f9ed5804b2 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -378,8 +378,8 @@ static void __init setup_max_pdx(void) if ( max_pdx > (DIRECTMAP_SIZE >> PAGE_SHIFT) ) max_pdx = DIRECTMAP_SIZE >> PAGE_SHIFT; - if ( max_pdx > FRAMETABLE_SIZE / sizeof(*frame_table) ) - max_pdx = FRAMETABLE_SIZE / sizeof(*frame_table); + if ( max_pdx > FRAMETABLE_NR ) + max_pdx = FRAMETABLE_NR; max_page = pdx_to_pfn(max_pdx - 1) + 1; } diff --git a/xen/arch/x86/x86_64/mm.c b/xen/arch/x86/x86_64/mm.c index 333f57a556..c6e09a4041 100644 --- a/xen/arch/x86/x86_64/mm.c +++ b/xen/arch/x86/x86_64/mm.c @@ -958,7 +958,7 @@ static int extend_frame_table(struct mem_hotadd_info *info) nidx = cidx = pfn_to_pdx(spfn)/PDX_GROUP_COUNT; ASSERT( pfn_to_pdx(epfn) <= (DIRECTMAP_SIZE >> PAGE_SHIFT) && - (pfn_to_pdx(epfn) <= FRAMETABLE_SIZE / sizeof(struct page_info)) ); + pfn_to_pdx(epfn) <= FRAMETABLE_NR ); if ( test_bit(cidx, pdx_group_valid) ) cidx = find_next_zero_bit(pdx_group_valid, eidx, cidx); @@ -1406,7 +1406,7 @@ int mem_hotadd_check(unsigned long spfn, unsigned long epfn) if ( (spfn >= epfn) ) return 0; - if (pfn_to_pdx(epfn) > (FRAMETABLE_SIZE / sizeof(*frame_table))) + if (pfn_to_pdx(epfn) > FRAMETABLE_NR) return 0; if ( (spfn | epfn) & ((1UL << PAGETABLE_ORDER) - 1) ) diff --git a/xen/include/asm-x86/config.h b/xen/include/asm-x86/config.h index ce3a7c00a2..fad918918c 100644 --- a/xen/include/asm-x86/config.h +++ b/xen/include/asm-x86/config.h @@ -152,9 +152,11 @@ extern unsigned char boot_edid_info[128]; * High read-only compatibility machine-to-phys translation table. * 0xffff82c480000000 - 0xffff82c4bfffffff [1GB, 2^30 bytes, PML4:261] * Xen text, static data, bss. - * 0xffff82c4c0000000 - 0xffff82f5ffffffff [197GB, PML4:261] + * 0xffff82c4c0000000 - 0xffff82dffbffffff [109GB - 64MB, PML4:261] * Reserved for future use. - * 0xffff82f600000000 - 0xffff82ffffffffff [40GB, 2^38 bytes, PML4:261] + * 0xffff82dffc000000 - 0xffff82dfffffffff [64MB, 2^26 bytes, PML4:261] + * Super-page information array. + * 0xffff82e000000000 - 0xffff82ffffffffff [128GB, 2^37 bytes, PML4:261] * Page-frame information array. * 0xffff830000000000 - 0xffff87ffffffffff [5TB, 5*2^40 bytes, PML4:262-271] * 1:1 direct mapping of all physical memory. @@ -218,15 +220,17 @@ extern unsigned char boot_edid_info[128]; /* Slot 261: xen text, static data and bss (1GB). */ #define XEN_VIRT_START (HIRO_COMPAT_MPT_VIRT_END) #define XEN_VIRT_END (XEN_VIRT_START + GB(1)) -/* Slot 261: superpage information array (20MB). */ +/* Slot 261: superpage information array (64MB). */ #define SPAGETABLE_VIRT_END FRAMETABLE_VIRT_START -#define SPAGETABLE_SIZE ((DIRECTMAP_SIZE >> SUPERPAGE_SHIFT) * \ - sizeof(struct spage_info)) -#define SPAGETABLE_VIRT_START (SPAGETABLE_VIRT_END - SPAGETABLE_SIZE) -/* Slot 261: page-frame information array (40GB). */ +#define SPAGETABLE_NR (((FRAMETABLE_NR - 1) >> (SUPERPAGE_SHIFT - \ + PAGE_SHIFT)) + 1) +#define SPAGETABLE_SIZE (SPAGETABLE_NR * sizeof(struct spage_info)) +#define SPAGETABLE_VIRT_START ((SPAGETABLE_VIRT_END - SPAGETABLE_SIZE) & \ + (-1UL << SUPERPAGE_SHIFT)) +/* Slot 261: page-frame information array (128GB). */ #define FRAMETABLE_VIRT_END DIRECTMAP_VIRT_START -#define FRAMETABLE_SIZE ((DIRECTMAP_SIZE >> PAGE_SHIFT) * \ - sizeof(struct page_info)) +#define FRAMETABLE_SIZE GB(128) +#define FRAMETABLE_NR (FRAMETABLE_SIZE / sizeof(*frame_table)) #define FRAMETABLE_VIRT_START (FRAMETABLE_VIRT_END - FRAMETABLE_SIZE) /* Slot 262-271: A direct 1:1 mapping of all of physical memory. */ #define DIRECTMAP_VIRT_START (PML4_ADDR(262)) |