The patch titled Date: kernel/power: allow hibernation with page_poison sanity checking-fix has been added to the -mm tree. Its filename is kernel-power-allow-hibernation-with-page_poison-sanity-checking-fix.patch This patch should soon appear at https://ozlabs.org/~akpm/mmots/broken-out/kernel-power-allow-hibernation-with-page_poison-sanity-checking-fix.patch and later at https://ozlabs.org/~akpm/mmotm/broken-out/kernel-power-allow-hibernation-with-page_poison-sanity-checking-fix.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Vlastimil Babka <vbabka@xxxxxxx> Date: kernel/power: allow hibernation with page_poison sanity checking-fix Adapt to __kernel_unpoison_pages fixup. Split out clear_or_poison_free_page() per David Hildenbrand. Link: https://lkml.kernel.org/r/7811e5ec-c7ae-09a9-7f90-45e14956c4c4@xxxxxxx Signed-off-by: Vlastimil Babka <vbabka@xxxxxxx> Acked-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> Cc: David Hildenbrand <david@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- include/linux/mm.h | 1 + kernel/power/snapshot.c | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 8 deletions(-) --- a/include/linux/mm.h~kernel-power-allow-hibernation-with-page_poison-sanity-checking-fix +++ a/include/linux/mm.h @@ -2871,6 +2871,7 @@ static inline bool page_poisoning_enable #else static inline bool page_poisoning_enabled(void) { return false; } static inline bool page_poisoning_enabled_static(void) { return false; } +static inline void __kernel_poison_pages(struct page *page, int nunmpages) { } static inline void kernel_poison_pages(struct page *page, int numpages) { } static inline void kernel_unpoison_pages(struct page *page, int numpages) { } #endif --- a/kernel/power/snapshot.c~kernel-power-allow-hibernation-with-page_poison-sanity-checking-fix +++ a/kernel/power/snapshot.c @@ -1178,6 +1178,14 @@ void free_basic_memory_bitmaps(void) pr_debug("Basic memory bitmaps freed\n"); } +static void clear_or_poison_free_page(struct page *page) +{ + if (page_poisoning_enabled_static()) + __kernel_poison_pages(page, 1); + else if (want_init_on_free()) + clear_highpage(page); +} + void clear_or_poison_free_pages(void) { struct memory_bitmap *bm = free_pages_map; @@ -1190,14 +1198,8 @@ void clear_or_poison_free_pages(void) memory_bm_position_reset(bm); pfn = memory_bm_next_pfn(bm); while (pfn != BM_END_OF_MAP) { - if (pfn_valid(pfn)) { - struct page *page = pfn_to_page(pfn); - if (page_poisoning_enabled_static()) - kernel_poison_pages(page, 1); - else if (want_init_on_free()) - clear_highpage(page); - - } + if (pfn_valid(pfn)) + clear_or_poison_free_page(pfn_to_page(pfn)); pfn = memory_bm_next_pfn(bm); } _ Patches currently in -mm which might be from vbabka@xxxxxxx are mm-slub-use-kmem_cache_debug_flags-in-deactivate_slab.patch mm-page_alloc-do-not-rely-on-the-order-of-page_poison-and-init_on_alloc-free-parameters.patch mm-page_poison-use-static-key-more-efficiently.patch kernel-power-allow-hibernation-with-page_poison-sanity-checking.patch kernel-power-allow-hibernation-with-page_poison-sanity-checking-fix.patch mm-page_poison-remove-config_page_poisoning_no_sanity.patch mm-page_poison-remove-config_page_poisoning_zero.patch