|
@@ -1173,12 +1173,18 @@ void __init mem_init(void)
|
|
|
|
|
|
/* clear_bss() already clear the empty_zero_page */
|
|
/* clear_bss() already clear the empty_zero_page */
|
|
|
|
|
|
- register_page_bootmem_info();
|
|
|
|
-
|
|
|
|
/* this will put all memory onto the freelists */
|
|
/* this will put all memory onto the freelists */
|
|
free_all_bootmem();
|
|
free_all_bootmem();
|
|
after_bootmem = 1;
|
|
after_bootmem = 1;
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Must be done after boot memory is put on freelist, because here we
|
|
|
|
+ * might set fields in deferred struct pages that have not yet been
|
|
|
|
+ * initialized, and free_all_bootmem() initializes all the reserved
|
|
|
|
+ * deferred pages for us.
|
|
|
|
+ */
|
|
|
|
+ register_page_bootmem_info();
|
|
|
|
+
|
|
/* Register memory areas for /proc/kcore */
|
|
/* Register memory areas for /proc/kcore */
|
|
kclist_add(&kcore_vsyscall, (void *)VSYSCALL_ADDR,
|
|
kclist_add(&kcore_vsyscall, (void *)VSYSCALL_ADDR,
|
|
PAGE_SIZE, KCORE_OTHER);
|
|
PAGE_SIZE, KCORE_OTHER);
|