mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 11:50:43 +09:00
x86: Exclude E820_RESERVED regions and memory holes above 4 GB from direct mapping.
commit 1bbbbe779a upstream.
On systems with very large memory (1 TB in our case), BIOS may report a
reserved region or a hole in the E820 map, even above the 4 GB range. Exclude
these from the direct mapping.
[ hpa: this should be done not just for > 4 GB but for everything above the legacy
region (1 MB), at the very least. That, however, turns out to require significant
restructuring. That work is well underway, but is not suitable for rc/stable. ]
Signed-off-by: Jacob Shin <jacob.shin@amd.com>
Link: http://lkml.kernel.org/r/1319145326-13902-1-git-send-email-jacob.shin@amd.com
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
2f3dc85d23
commit
bd7bca8d19
@@ -937,8 +937,21 @@ void __init setup_arch(char **cmdline_p)
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
if (max_pfn > max_low_pfn) {
|
||||
max_pfn_mapped = init_memory_mapping(1UL<<32,
|
||||
max_pfn<<PAGE_SHIFT);
|
||||
int i;
|
||||
for (i = 0; i < e820.nr_map; i++) {
|
||||
struct e820entry *ei = &e820.map[i];
|
||||
|
||||
if (ei->addr + ei->size <= 1UL << 32)
|
||||
continue;
|
||||
|
||||
if (ei->type == E820_RESERVED)
|
||||
continue;
|
||||
|
||||
max_pfn_mapped = init_memory_mapping(
|
||||
ei->addr < 1UL << 32 ? 1UL << 32 : ei->addr,
|
||||
ei->addr + ei->size);
|
||||
}
|
||||
|
||||
/* can we preseve max_low_pfn ?*/
|
||||
max_low_pfn = max_pfn;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user