Re: [PATCH repost] mm,x86: remove debug_pagealloc_enabled

From: Stanislaw Gruszka
Date: Mon Dec 05 2011 - 10:00:25 EST


On Mon, Dec 05, 2011 at 12:06:56PM +0100, Ingo Molnar wrote:
>
> * Stanislaw Gruszka <sgruszka@xxxxxxxxxx> wrote:
>
> > When (no)bootmem finish operation, it pass pages to buddy allocator.
> > Since debug_pagealloc_enabled is not set, we will do not protect pages,
> > what is not what we want with CONFIG_DEBUG_PAGEALLOC=y.
> >
> > To fix remove debug_pagealloc_enabled. That variable was introduced by
> > commit 12d6f21e "x86: do not PSE on CONFIG_DEBUG_PAGEALLOC=y" to get
> > more CPA (change page attribude) code testing. But currently we have
> > CONFIG_CPA_DEBUG, which test CPA.
> >
> > Signed-off-by: Stanislaw Gruszka <sgruszka@xxxxxxxxxx>
> > Acked-by: Mel Gorman <mgorman@xxxxxxx>
> > ---
> > arch/x86/mm/pageattr.c | 6 ------
> > include/linux/mm.h | 10 ----------
> > init/main.c | 5 -----
> > mm/debug-pagealloc.c | 3 ---
> > 4 files changed, 0 insertions(+), 24 deletions(-)
>
> I'm getting this boot crash with the patch applied:

I'm sorry for breaking the boot. I tried to reproduce problem on my
laptop, but failed. I plan to test patch with your config on some other
machines.

On the meantime can you test attached incremental patch and see if it
workaround the crash? I suspect memblock reuse pages that it passed
already to buddy allocator.

Thanks
Stanislaw
diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
index 29f7c6d..0d0ddcb 100644
--- a/arch/x86/mm/init_32.c
+++ b/arch/x86/mm/init_32.c
@@ -760,6 +760,9 @@ void __init mem_init(void)
#ifdef CONFIG_FLATMEM
BUG_ON(!mem_map);
#endif
+
+ set_highmem_pages_init();
+
/* this will put all low memory onto the freelists */
totalram_pages += free_all_bootmem();

@@ -771,8 +774,6 @@ void __init mem_init(void)
if (page_is_ram(tmp) && PageReserved(pfn_to_page(tmp)))
reservedpages++;

- set_highmem_pages_init();
-
codesize = (unsigned long) &_etext - (unsigned long) &_text;
datasize = (unsigned long) &_edata - (unsigned long) &_etext;
initsize = (unsigned long) &__init_end - (unsigned long) &__init_begin;