|
@@ -2540,9 +2540,16 @@ void __init mem_init(void)
|
|
{
|
|
{
|
|
high_memory = __va(last_valid_pfn << PAGE_SHIFT);
|
|
high_memory = __va(last_valid_pfn << PAGE_SHIFT);
|
|
|
|
|
|
- register_page_bootmem_info();
|
|
|
|
free_all_bootmem();
|
|
free_all_bootmem();
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * 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();
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Set up the zero page, mark it reserved, so that page count
|
|
* Set up the zero page, mark it reserved, so that page count
|
|
* is not manipulated when freeing the page from user ptes.
|
|
* is not manipulated when freeing the page from user ptes.
|