|
@@ -193,37 +193,6 @@ unsigned long __init e820_end_of_ram(void)
|
|
|
return end_pfn;
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * Find the hole size in the range.
|
|
|
- */
|
|
|
-unsigned long __init e820_hole_size(unsigned long start, unsigned long end)
|
|
|
-{
|
|
|
- unsigned long ram = 0;
|
|
|
- int i;
|
|
|
-
|
|
|
- for (i = 0; i < e820.nr_map; i++) {
|
|
|
- struct e820entry *ei = &e820.map[i];
|
|
|
- unsigned long last, addr;
|
|
|
-
|
|
|
- if (ei->type != E820_RAM ||
|
|
|
- ei->addr+ei->size <= start ||
|
|
|
- ei->addr >= end)
|
|
|
- continue;
|
|
|
-
|
|
|
- addr = round_up(ei->addr, PAGE_SIZE);
|
|
|
- if (addr < start)
|
|
|
- addr = start;
|
|
|
-
|
|
|
- last = round_down(ei->addr + ei->size, PAGE_SIZE);
|
|
|
- if (last >= end)
|
|
|
- last = end;
|
|
|
-
|
|
|
- if (last > addr)
|
|
|
- ram += last - addr;
|
|
|
- }
|
|
|
- return ((end - start) - ram);
|
|
|
-}
|
|
|
-
|
|
|
/*
|
|
|
* Mark e820 reserved areas as busy for the resource manager.
|
|
|
*/
|
|
@@ -364,6 +333,29 @@ void __init add_memory_region(unsigned long start, unsigned long size, int type)
|
|
|
e820.nr_map++;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * Find the hole size (in bytes) in the memory range.
|
|
|
+ * @start: starting address of the memory range to scan
|
|
|
+ * @end: ending address of the memory range to scan
|
|
|
+ */
|
|
|
+unsigned long __init e820_hole_size(unsigned long start, unsigned long end)
|
|
|
+{
|
|
|
+ unsigned long start_pfn = start >> PAGE_SHIFT;
|
|
|
+ unsigned long end_pfn = end >> PAGE_SHIFT;
|
|
|
+ unsigned long ei_startpfn;
|
|
|
+ unsigned long ei_endpfn;
|
|
|
+ unsigned long ram = 0;
|
|
|
+ int i;
|
|
|
+
|
|
|
+ for (i = 0; i < e820.nr_map; i++) {
|
|
|
+ if (e820_find_active_region(&e820.map[i],
|
|
|
+ start_pfn, end_pfn,
|
|
|
+ &ei_startpfn, &ei_endpfn))
|
|
|
+ ram += ei_endpfn - ei_startpfn;
|
|
|
+ }
|
|
|
+ return end - start - (ram << PAGE_SHIFT);
|
|
|
+}
|
|
|
+
|
|
|
void __init e820_print_map(char *who)
|
|
|
{
|
|
|
int i;
|