x86: fix trim mtrr not to setup_memory two times
we could call find_max_pfn() directly instead of setup_memory() to get max_pfn needed for mtrr trimming. otherwise setup_memory() is called two times... that is duplicated... [ mingo@elte.hu: both Thomas and me simulated a double call to setup_bootmem_allocator() and can confirm that it is a real bug which can hang in certain configs. It's not been reported yet but that is probably due to the relatively scarce nature of MTRR-trimming systems. ] Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
923a0cf82f
commit
76c324182b
2 changed files with 4 additions and 6 deletions
|
@ -406,8 +406,6 @@ static unsigned long __init setup_memory(void)
|
||||||
*/
|
*/
|
||||||
min_low_pfn = PFN_UP(init_pg_tables_end);
|
min_low_pfn = PFN_UP(init_pg_tables_end);
|
||||||
|
|
||||||
find_max_pfn();
|
|
||||||
|
|
||||||
max_low_pfn = find_max_low_pfn();
|
max_low_pfn = find_max_low_pfn();
|
||||||
|
|
||||||
#ifdef CONFIG_HIGHMEM
|
#ifdef CONFIG_HIGHMEM
|
||||||
|
@ -764,12 +762,13 @@ void __init setup_arch(char **cmdline_p)
|
||||||
if (efi_enabled)
|
if (efi_enabled)
|
||||||
efi_init();
|
efi_init();
|
||||||
|
|
||||||
max_low_pfn = setup_memory();
|
|
||||||
|
|
||||||
/* update e820 for memory not covered by WB MTRRs */
|
/* update e820 for memory not covered by WB MTRRs */
|
||||||
|
find_max_pfn();
|
||||||
mtrr_bp_init();
|
mtrr_bp_init();
|
||||||
if (mtrr_trim_uncached_memory(max_pfn))
|
if (mtrr_trim_uncached_memory(max_pfn))
|
||||||
max_low_pfn = setup_memory();
|
find_max_pfn();
|
||||||
|
|
||||||
|
max_low_pfn = setup_memory();
|
||||||
|
|
||||||
#ifdef CONFIG_VMI
|
#ifdef CONFIG_VMI
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -324,7 +324,6 @@ unsigned long __init setup_memory(void)
|
||||||
* this space and use it to adjust the boundary between ZONE_NORMAL
|
* this space and use it to adjust the boundary between ZONE_NORMAL
|
||||||
* and ZONE_HIGHMEM.
|
* and ZONE_HIGHMEM.
|
||||||
*/
|
*/
|
||||||
find_max_pfn();
|
|
||||||
get_memcfg_numa();
|
get_memcfg_numa();
|
||||||
|
|
||||||
kva_pages = calculate_numa_remap_pages();
|
kva_pages = calculate_numa_remap_pages();
|
||||||
|
|
Loading…
Reference in a new issue