aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/e820_64.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/e820_64.c')
-rw-r--r--arch/x86/kernel/e820_64.c19
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
733int __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}