mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-18 14:56:19 +07:00
[PATCH] i386: Move find_max_pfn function to e820.c
Move more code from setup.c into e820.c Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Andi Kleen <ak@suse.de>
This commit is contained in:
parent
8e3342f736
commit
b2dff6a88c
@ -8,6 +8,7 @@
|
|||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/efi.h>
|
#include <linux/efi.h>
|
||||||
|
#include <linux/pfn.h>
|
||||||
|
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
@ -539,3 +540,54 @@ int __init copy_e820_map(struct e820entry * biosmap, int nr_map)
|
|||||||
return 0;
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
#include <setup_arch.h>
|
#include <setup_arch.h>
|
||||||
#include <bios_ebda.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
|
/* 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*
|
immediately after the boot time page tables. It contains a *physical*
|
||||||
address, and must not be in the .bss segment! */
|
address, and must not be in the .bss segment! */
|
||||||
@ -387,29 +384,6 @@ static int __init parse_reservetop(char *arg)
|
|||||||
}
|
}
|
||||||
early_param("reservetop", parse_reservetop);
|
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.
|
* This function checks if the entire range <start,end> is mapped with type.
|
||||||
*
|
*
|
||||||
@ -442,35 +416,6 @@ e820_all_mapped(unsigned long s, unsigned long e, unsigned type)
|
|||||||
return 0;
|
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:
|
* Determine low and high memory ranges:
|
||||||
*/
|
*/
|
||||||
|
@ -38,6 +38,7 @@ extern struct e820map e820;
|
|||||||
|
|
||||||
extern int e820_all_mapped(unsigned long start, unsigned long end,
|
extern int e820_all_mapped(unsigned long start, unsigned long end,
|
||||||
unsigned type);
|
unsigned type);
|
||||||
|
extern void find_max_pfn(void);
|
||||||
|
|
||||||
#endif/*!__ASSEMBLY__*/
|
#endif/*!__ASSEMBLY__*/
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user