diff options
Diffstat (limited to 'arch/x86/mm/init.c')
| -rw-r--r-- | arch/x86/mm/init.c | 23 | 
1 files changed, 23 insertions, 0 deletions
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c index a298914058f..6cabf6570d6 100644 --- a/arch/x86/mm/init.c +++ b/arch/x86/mm/init.c @@ -3,6 +3,7 @@  #include <linux/ioport.h>  #include <linux/swap.h>  #include <linux/memblock.h> +#include <linux/bootmem.h>	/* for max_low_pfn */  #include <asm/cacheflush.h>  #include <asm/e820.h> @@ -15,6 +16,7 @@  #include <asm/tlbflush.h>  #include <asm/tlb.h>  #include <asm/proto.h> +#include <asm/dma.h>		/* for MAX_DMA_PFN */  unsigned long __initdata pgt_buf_start;  unsigned long __meminitdata pgt_buf_end; @@ -392,3 +394,24 @@ void free_initrd_mem(unsigned long start, unsigned long end)  	free_init_pages("initrd memory", start, PAGE_ALIGN(end));  }  #endif + +void __init zone_sizes_init(void) +{ +	unsigned long max_zone_pfns[MAX_NR_ZONES]; + +	memset(max_zone_pfns, 0, sizeof(max_zone_pfns)); + +#ifdef CONFIG_ZONE_DMA +	max_zone_pfns[ZONE_DMA]		= MAX_DMA_PFN; +#endif +#ifdef CONFIG_ZONE_DMA32 +	max_zone_pfns[ZONE_DMA32]	= MAX_DMA32_PFN; +#endif +	max_zone_pfns[ZONE_NORMAL]	= max_low_pfn; +#ifdef CONFIG_HIGHMEM +	max_zone_pfns[ZONE_HIGHMEM]	= max_pfn; +#endif + +	free_area_init_nodes(max_zone_pfns); +} +  |