On Thu, Nov 12, 2020 at 3:42 PM Vlastimil Babka <vbabka@xxxxxxx> wrote: > > On 11/11/20 4:42 PM, David Hildenbrand wrote: > ... > >> @@ -1152,12 +1152,18 @@ void clear_free_pages(void) > >> if (WARN_ON(!(free_pages_map))) > >> return; > >> > >> - if (IS_ENABLED(CONFIG_PAGE_POISONING_ZERO) || want_init_on_free()) { > >> + if (page_poisoning_enabled() || want_init_on_free()) { > >> memory_bm_position_reset(bm); > >> pfn = memory_bm_next_pfn(bm); > >> while (pfn != BM_END_OF_MAP) { > >> - if (pfn_valid(pfn)) > >> - clear_highpage(pfn_to_page(pfn)); > >> + if (pfn_valid(pfn)) { > >> + struct page *page = pfn_to_page(pfn); > > > > ^ empty line missing. And at least I prefer to declare all variables in > > the function header. > > > > I'd even suggest to move this into a separate function like > > > > clear_or_poison_free_page(struct page *page) > > > > > > Ok, fixup below. > > ----8<---- > From cae1e8ccfa57c28ed1b2f5f8a47319b86cbdcfbf Mon Sep 17 00:00:00 2001 > From: Vlastimil Babka <vbabka@xxxxxxx> > Date: Thu, 12 Nov 2020 15:33:07 +0100 > Subject: [PATCH] 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. > > Signed-off-by: Vlastimil Babka <vbabka@xxxxxxx> Still Acked-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> > --- > include/linux/mm.h | 1 + > kernel/power/snapshot.c | 18 ++++++++++-------- > 2 files changed, 11 insertions(+), 8 deletions(-) > > diff --git a/include/linux/mm.h b/include/linux/mm.h > index 861b9392b5dc..d4cfb06a611e 100644 > --- a/include/linux/mm.h > +++ b/include/linux/mm.h > @@ -2896,6 +2896,7 @@ static inline void kernel_unpoison_pages(struct page *page, int numpages) > #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 > diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c > index 6b1c84afa891..a3491b29c5cc 100644 > --- a/kernel/power/snapshot.c > +++ b/kernel/power/snapshot.c > @@ -1144,6 +1144,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; > @@ -1156,14 +1164,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); > } > -- > 2.29.1 > >