diff options
Diffstat (limited to 'arch/x86/kernel/e820_64.c')
-rw-r--r-- | arch/x86/kernel/e820_64.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/arch/x86/kernel/e820_64.c b/arch/x86/kernel/e820_64.c index 57616865d8a0..1ca228b06a20 100644 --- a/arch/x86/kernel/e820_64.c +++ b/arch/x86/kernel/e820_64.c | |||
@@ -729,3 +729,22 @@ __init void e820_setup_gap(void) | |||
729 | printk(KERN_INFO "Allocating PCI resources starting at %lx (gap: %lx:%lx)\n", | 729 | printk(KERN_INFO "Allocating PCI resources starting at %lx (gap: %lx:%lx)\n", |
730 | pci_mem_start, gapstart, gapsize); | 730 | pci_mem_start, gapstart, gapsize); |
731 | } | 731 | } |
732 | |||
733 | int __init arch_get_ram_range(int slot, u64 *addr, u64 *size) | ||
734 | { | ||
735 | int i; | ||
736 | |||
737 | if (slot < 0 || slot >= e820.nr_map) | ||
738 | return -1; | ||
739 | for (i = slot; i < e820.nr_map; i++) { | ||
740 | if (e820.map[i].type != E820_RAM) | ||
741 | continue; | ||
742 | break; | ||
743 | } | ||
744 | if (i == e820.nr_map || e820.map[i].addr > (max_pfn << PAGE_SHIFT)) | ||
745 | return -1; | ||
746 | *addr = e820.map[i].addr; | ||
747 | *size = min_t(u64, e820.map[i].size + e820.map[i].addr, | ||
748 | max_pfn << PAGE_SHIFT) - *addr; | ||
749 | return i + 1; | ||
750 | } | ||