|
@@ -96,26 +96,6 @@ void show_mem(void)
|
|
|
/* physical address where the bootmem map is located */
|
|
|
unsigned long bootmap_start;
|
|
|
|
|
|
-/**
|
|
|
- * find_max_pfn - adjust the maximum page number callback
|
|
|
- * @start: start of range
|
|
|
- * @end: end of range
|
|
|
- * @arg: address of pointer to global max_pfn variable
|
|
|
- *
|
|
|
- * Passed as a callback function to efi_memmap_walk() to determine the highest
|
|
|
- * available page frame number in the system.
|
|
|
- */
|
|
|
-int
|
|
|
-find_max_pfn (unsigned long start, unsigned long end, void *arg)
|
|
|
-{
|
|
|
- unsigned long *max_pfnp = arg, pfn;
|
|
|
-
|
|
|
- pfn = (PAGE_ALIGN(end - 1) - PAGE_OFFSET) >> PAGE_SHIFT;
|
|
|
- if (pfn > *max_pfnp)
|
|
|
- *max_pfnp = pfn;
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* find_bootmap_location - callback to find a memory area for the bootmap
|
|
|
* @start: start of region
|
|
@@ -177,9 +157,10 @@ find_memory (void)
|
|
|
reserve_memory();
|
|
|
|
|
|
/* first find highest page frame number */
|
|
|
- max_pfn = 0;
|
|
|
- efi_memmap_walk(find_max_pfn, &max_pfn);
|
|
|
-
|
|
|
+ min_low_pfn = ~0UL;
|
|
|
+ max_low_pfn = 0;
|
|
|
+ efi_memmap_walk(find_max_min_low_pfn, NULL);
|
|
|
+ max_pfn = max_low_pfn;
|
|
|
/* how many bytes to cover all the pages */
|
|
|
bootmap_size = bootmem_bootmap_pages(max_pfn) << PAGE_SHIFT;
|
|
|
|
|
@@ -189,7 +170,8 @@ find_memory (void)
|
|
|
if (bootmap_start == ~0UL)
|
|
|
panic("Cannot find %ld bytes for bootmap\n", bootmap_size);
|
|
|
|
|
|
- bootmap_size = init_bootmem(bootmap_start >> PAGE_SHIFT, max_pfn);
|
|
|
+ bootmap_size = init_bootmem_node(NODE_DATA(0),
|
|
|
+ (bootmap_start >> PAGE_SHIFT), 0, max_pfn);
|
|
|
|
|
|
/* Free all available memory, then mark bootmem-map as being in use. */
|
|
|
efi_memmap_walk(filter_rsvd_memory, free_bootmem);
|