|
@@ -19,6 +19,7 @@
|
|
|
#include <linux/swap.h>
|
|
|
#include <linux/proc_fs.h>
|
|
|
#include <linux/bitops.h>
|
|
|
+#include <linux/kexec.h>
|
|
|
|
|
|
#include <asm/a.out.h>
|
|
|
#include <asm/dma.h>
|
|
@@ -595,13 +596,27 @@ find_largest_hole (u64 start, u64 end, void *arg)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+#endif /* CONFIG_VIRTUAL_MEM_MAP */
|
|
|
+
|
|
|
int __init
|
|
|
register_active_ranges(u64 start, u64 end, void *arg)
|
|
|
{
|
|
|
- add_active_range(0, __pa(start) >> PAGE_SHIFT, __pa(end) >> PAGE_SHIFT);
|
|
|
+ int nid = paddr_to_nid(__pa(start));
|
|
|
+
|
|
|
+ if (nid < 0)
|
|
|
+ nid = 0;
|
|
|
+#ifdef CONFIG_KEXEC
|
|
|
+ if (start > crashk_res.start && start < crashk_res.end)
|
|
|
+ start = crashk_res.end;
|
|
|
+ if (end > crashk_res.start && end < crashk_res.end)
|
|
|
+ end = crashk_res.start;
|
|
|
+#endif
|
|
|
+
|
|
|
+ if (start < end)
|
|
|
+ add_active_range(nid, __pa(start) >> PAGE_SHIFT,
|
|
|
+ __pa(end) >> PAGE_SHIFT);
|
|
|
return 0;
|
|
|
}
|
|
|
-#endif /* CONFIG_VIRTUAL_MEM_MAP */
|
|
|
|
|
|
static int __init
|
|
|
count_reserved_pages (u64 start, u64 end, void *arg)
|