Re: [PATCH 3/3] mm, page_alloc: reduce static keys in prep_new_page()

From: David Hildenbrand
Date: Wed Oct 28 2020 - 20:40:15 EST


On 27.10.20 18:41, Vlastimil Babka wrote:
On 10/27/20 2:32 PM, Vlastimil Babka wrote:
So my conclusion:
- We can remove PAGE_POISONING_NO_SANITY because it only makes sense with
PAGE_POISONING_ZERO, and we can use init_on_free instead

Note for this we first have to make sanity checking compatible with
hibernation, but that should be easy as the zeroing variants already
paved the way. The patch below will be added to the next version of
the series:

From 44474ee27c4f5248061ea2e5bbc2aeefc91bcdfc Mon Sep 17 00:00:00 2001
From: Vlastimil Babka <vbabka@xxxxxxx>
Date: Tue, 27 Oct 2020 18:25:17 +0100
Subject: [PATCH] kernel/power: allow hibernation with page_poison sanity
checking

Page poisoning used to be incompatible with hibernation, as the state of
poisoned pages was lost after resume, thus enabling CONFIG_HIBERNATION forces
CONFIG_PAGE_POISONING_NO_SANITY. For the same reason, the poisoning with zeroes
variant CONFIG_PAGE_POISONING_ZERO used to disable hibernation. The latter
restriction was removed by commit 1ad1410f632d ("PM / Hibernate: allow
hibernation with PAGE_POISONING_ZERO") and similarly for init_on_free by commit
18451f9f9e58 ("PM: hibernate: fix crashes with init_on_free=1") by making sure
free pages are cleared after resume.

We can use the same mechanism to instead poison free pages with PAGE_POISON
after resume. This covers both zero and 0xAA patterns. Thus we can remove the
Kconfig restriction that disables page poison sanity checking when hibernation
is enabled.

I haven't fully dived into the details, but the idea it sounds sane to me.


--
Thanks,

David / dhildenb