Loading arch/i386/kernel/e820.c +52 −0 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ #include <linux/module.h> #include <linux/mm.h> #include <linux/efi.h> #include <linux/pfn.h> #include <asm/pgtable.h> #include <asm/page.h> Loading Loading @@ -539,3 +540,54 @@ int __init copy_e820_map(struct e820entry * biosmap, int nr_map) return 0; } /* * Callback for efi_memory_walk. */ static int __init efi_find_max_pfn(unsigned long start, unsigned long end, void *arg) { unsigned long *max_pfn = arg, pfn; if (start < end) { pfn = PFN_UP(end -1); if (pfn > *max_pfn) *max_pfn = pfn; } return 0; } static int __init efi_memory_present_wrapper(unsigned long start, unsigned long end, void *arg) { memory_present(0, PFN_UP(start), PFN_DOWN(end)); return 0; } /* * Find the highest page frame number we have available */ void __init find_max_pfn(void) { int i; max_pfn = 0; if (efi_enabled) { efi_memmap_walk(efi_find_max_pfn, &max_pfn); efi_memmap_walk(efi_memory_present_wrapper, NULL); return; } for (i = 0; i < e820.nr_map; i++) { unsigned long start, end; /* RAM? */ if (e820.map[i].type != E820_RAM) continue; start = PFN_UP(e820.map[i].addr); end = PFN_DOWN(e820.map[i].addr + e820.map[i].size); if (start >= end) continue; if (end > max_pfn) max_pfn = end; memory_present(0, start, end); } } arch/i386/kernel/setup.c +0 −55 Original line number Diff line number Diff line Loading @@ -63,9 +63,6 @@ #include <setup_arch.h> #include <bios_ebda.h> /* Forward Declaration. */ void __init find_max_pfn(void); /* This value is set up by the early boot code to point to the value immediately after the boot time page tables. It contains a *physical* address, and must not be in the .bss segment! */ Loading Loading @@ -387,29 +384,6 @@ static int __init parse_reservetop(char *arg) } early_param("reservetop", parse_reservetop); /* * Callback for efi_memory_walk. */ static int __init efi_find_max_pfn(unsigned long start, unsigned long end, void *arg) { unsigned long *max_pfn = arg, pfn; if (start < end) { pfn = PFN_UP(end -1); if (pfn > *max_pfn) *max_pfn = pfn; } return 0; } static int __init efi_memory_present_wrapper(unsigned long start, unsigned long end, void *arg) { memory_present(0, PFN_UP(start), PFN_DOWN(end)); return 0; } /* * This function checks if the entire range <start,end> is mapped with type. * Loading Loading @@ -442,35 +416,6 @@ e820_all_mapped(unsigned long s, unsigned long e, unsigned type) return 0; } /* * Find the highest page frame number we have available */ void __init find_max_pfn(void) { int i; max_pfn = 0; if (efi_enabled) { efi_memmap_walk(efi_find_max_pfn, &max_pfn); efi_memmap_walk(efi_memory_present_wrapper, NULL); return; } for (i = 0; i < e820.nr_map; i++) { unsigned long start, end; /* RAM? */ if (e820.map[i].type != E820_RAM) continue; start = PFN_UP(e820.map[i].addr); end = PFN_DOWN(e820.map[i].addr + e820.map[i].size); if (start >= end) continue; if (end > max_pfn) max_pfn = end; memory_present(0, start, end); } } /* * Determine low and high memory ranges: */ Loading include/asm-i386/e820.h +1 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ extern struct e820map e820; extern int e820_all_mapped(unsigned long start, unsigned long end, unsigned type); extern void find_max_pfn(void); #endif/*!__ASSEMBLY__*/ Loading Loading
arch/i386/kernel/e820.c +52 −0 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ #include <linux/module.h> #include <linux/mm.h> #include <linux/efi.h> #include <linux/pfn.h> #include <asm/pgtable.h> #include <asm/page.h> Loading Loading @@ -539,3 +540,54 @@ int __init copy_e820_map(struct e820entry * biosmap, int nr_map) return 0; } /* * Callback for efi_memory_walk. */ static int __init efi_find_max_pfn(unsigned long start, unsigned long end, void *arg) { unsigned long *max_pfn = arg, pfn; if (start < end) { pfn = PFN_UP(end -1); if (pfn > *max_pfn) *max_pfn = pfn; } return 0; } static int __init efi_memory_present_wrapper(unsigned long start, unsigned long end, void *arg) { memory_present(0, PFN_UP(start), PFN_DOWN(end)); return 0; } /* * Find the highest page frame number we have available */ void __init find_max_pfn(void) { int i; max_pfn = 0; if (efi_enabled) { efi_memmap_walk(efi_find_max_pfn, &max_pfn); efi_memmap_walk(efi_memory_present_wrapper, NULL); return; } for (i = 0; i < e820.nr_map; i++) { unsigned long start, end; /* RAM? */ if (e820.map[i].type != E820_RAM) continue; start = PFN_UP(e820.map[i].addr); end = PFN_DOWN(e820.map[i].addr + e820.map[i].size); if (start >= end) continue; if (end > max_pfn) max_pfn = end; memory_present(0, start, end); } }
arch/i386/kernel/setup.c +0 −55 Original line number Diff line number Diff line Loading @@ -63,9 +63,6 @@ #include <setup_arch.h> #include <bios_ebda.h> /* Forward Declaration. */ void __init find_max_pfn(void); /* This value is set up by the early boot code to point to the value immediately after the boot time page tables. It contains a *physical* address, and must not be in the .bss segment! */ Loading Loading @@ -387,29 +384,6 @@ static int __init parse_reservetop(char *arg) } early_param("reservetop", parse_reservetop); /* * Callback for efi_memory_walk. */ static int __init efi_find_max_pfn(unsigned long start, unsigned long end, void *arg) { unsigned long *max_pfn = arg, pfn; if (start < end) { pfn = PFN_UP(end -1); if (pfn > *max_pfn) *max_pfn = pfn; } return 0; } static int __init efi_memory_present_wrapper(unsigned long start, unsigned long end, void *arg) { memory_present(0, PFN_UP(start), PFN_DOWN(end)); return 0; } /* * This function checks if the entire range <start,end> is mapped with type. * Loading Loading @@ -442,35 +416,6 @@ e820_all_mapped(unsigned long s, unsigned long e, unsigned type) return 0; } /* * Find the highest page frame number we have available */ void __init find_max_pfn(void) { int i; max_pfn = 0; if (efi_enabled) { efi_memmap_walk(efi_find_max_pfn, &max_pfn); efi_memmap_walk(efi_memory_present_wrapper, NULL); return; } for (i = 0; i < e820.nr_map; i++) { unsigned long start, end; /* RAM? */ if (e820.map[i].type != E820_RAM) continue; start = PFN_UP(e820.map[i].addr); end = PFN_DOWN(e820.map[i].addr + e820.map[i].size); if (start >= end) continue; if (end > max_pfn) max_pfn = end; memory_present(0, start, end); } } /* * Determine low and high memory ranges: */ Loading
include/asm-i386/e820.h +1 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ extern struct e820map e820; extern int e820_all_mapped(unsigned long start, unsigned long end, unsigned type); extern void find_max_pfn(void); #endif/*!__ASSEMBLY__*/ Loading