diff options
author | Jan Beulich <jbeulich@novell.com> | 2007-05-02 13:27:11 -0400 |
---|---|---|
committer | Andi Kleen <andi@basil.nowhere.org> | 2007-05-02 13:27:11 -0400 |
commit | b92e9fac400d4ae5bc7a75c568e9844ec53ea329 (patch) | |
tree | 2e5d5194d2532a4d8d4849802e19adcc617013f6 /arch/i386/kernel/e820.c | |
parent | b00742d399513a4100c24cc2accefdc1bb1e0b15 (diff) |
[PATCH] x86: fix amd64-agp aperture validation
Under CONFIG_DISCONTIGMEM, assuming that a !pfn_valid() implies all
subsequent pfn-s are also invalid is wrong. Thus replace this by
explicitly checking against the E820 map.
AK: make e820 on x86-64 not initdata
Signed-off-by: Jan Beulich <jbeulich@novell.com>
Signed-off-by: Andi Kleen <ak@suse.de>
Acked-by: Mark Langsdorf <mark.langsdorf@amd.com>
Diffstat (limited to 'arch/i386/kernel/e820.c')
-rw-r--r-- | arch/i386/kernel/e820.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/arch/i386/kernel/e820.c b/arch/i386/kernel/e820.c index 31f4670ef740..829beec9247e 100644 --- a/arch/i386/kernel/e820.c +++ b/arch/i386/kernel/e820.c | |||
@@ -825,6 +825,26 @@ void __init limit_regions(unsigned long long size) | |||
825 | print_memory_map("limit_regions endfunc"); | 825 | print_memory_map("limit_regions endfunc"); |
826 | } | 826 | } |
827 | 827 | ||
828 | /* | ||
829 | * This function checks if any part of the range <start,end> is mapped | ||
830 | * with type. | ||
831 | */ | ||
832 | int | ||
833 | e820_any_mapped(u64 start, u64 end, unsigned type) | ||
834 | { | ||
835 | int i; | ||
836 | for (i = 0; i < e820.nr_map; i++) { | ||
837 | const struct e820entry *ei = &e820.map[i]; | ||
838 | if (type && ei->type != type) | ||
839 | continue; | ||
840 | if (ei->addr >= end || ei->addr + ei->size <= start) | ||
841 | continue; | ||
842 | return 1; | ||
843 | } | ||
844 | return 0; | ||
845 | } | ||
846 | EXPORT_SYMBOL_GPL(e820_any_mapped); | ||
847 | |||
828 | /* | 848 | /* |
829 | * This function checks if the entire range <start,end> is mapped with type. | 849 | * This function checks if the entire range <start,end> is mapped with type. |
830 | * | 850 | * |