kernel-5.15/revert-mm-meminit-only-set-page-reserved-in-the-memblock-re.patch
Evgenii Shatokhin 80c29b9ae6 Partially revert mainline commit 92923ca to fix a regression
The following commit seems to cause problems with hibernation on 32-bit
systems:

  commit 92923ca3aacef63c92dc297a75ad0c6dfe4eab37
  Author: Nathan Zimmer <nzimmer@sgi.com>
  Date:   Tue Jun 30 14:56:48 2015 -0700

      mm: meminit: only set page reserved in the memblock region

Without this commit, it takes less than 10-15 seconds on our test system
(https://linux-hardware.org/index.php?probe=e6a06c64c7) from
"systemctl hibernate" command till the system powers off. With the
mainline kernels 4.2-4.7, the system resumes OK.

With this commit, it takes more than 2 minutes for that system to
hibernate and it usually hangs on resume.

Let us revert the main parts of this commit in the 32-bit kernels for
now.
2017-03-09 15:02:52 +03:00

47 lines
1.6 KiB
Diff

The following commit seems to cause problems with hibernation on 32-bit
systems:
commit 92923ca3aacef63c92dc297a75ad0c6dfe4eab37
Author: Nathan Zimmer <nzimmer@sgi.com>
Date: Tue Jun 30 14:56:48 2015 -0700
mm: meminit: only set page reserved in the memblock region
Without this commit, it takes less than 10-15 seconds on our test system
(https://linux-hardware.org/index.php?probe=e6a06c64c7) from
"systemctl hibernate" command till the system powers off. With the mainline
kernels 4.2-4.7, the system resumes OK.
With this commit, it takes more than 2 minutes for that system to hibernate
and it usually hangs on resume.
Let us revert the main parts of this commit in the 32-bit kernels for now.
Signed-off-by: Evgenii Shatokhin <eugene.shatokhin@rosalab.ru>
diff --git a/mm/nobootmem.c b/mm/nobootmem.c
index 487dad6..cfd91fa 100644
--- a/mm/nobootmem.c
+++ b/mm/nobootmem.c
@@ -134,9 +134,6 @@ static unsigned long __init free_low_memory_core_early(void)
memblock_clear_hotplug(0, -1);
- for_each_reserved_mem_region(i, &start, &end)
- reserve_bootmem_region(start, end);
-
/*
* We need to use NUMA_NO_NODE instead of NODE_DATA(0)->node_id
* because in some case like Node0 doesn't have RAM installed
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index f3e0c69..ca32c26 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -1168,6 +1168,7 @@ static void __meminit __init_single_page(struct page *page, unsigned long pfn,
init_page_count(page);
page_mapcount_reset(page);
page_cpupid_reset_last(page);
+ SetPageReserved(page);
INIT_LIST_HEAD(&page->lru);
#ifdef WANT_PAGE_VIRTUAL