• Zhenhua Huang's avatar
    mm: fix page_owner initializing issue for arm32 · 7fb7ab6d
    Zhenhua Huang authored
    Page owner of pages used by page owner itself used is missing on arm32
    targets.  The reason is dummy_handle and failure_handle is not initialized
    correctly.  Buddy allocator is used to initialize these two handles.
    However, buddy allocator is not ready when page owner calls it.  This
    change fixed that by initializing page owner after buddy initialization.
    
    The working flow before and after this change are:
    original logic:
     1. allocated memory for page_ext(using memblock).
     2. invoke the init callback of page_ext_ops like page_owner(using buddy
        allocator).
     3. initialize buddy.
    
    after this change:
     1. allocated memory for page_ext(using memblock).
     2. initialize buddy.
     3. invoke the init callback of page_ext_ops like page_owner(using buddy
        allocator).
    
    with the change, failure/dummy_handle can get its correct value and page
    owner output for example has the one for page owner itself:
    
      Page allocated via order 2, mask 0x6202c0(GFP_USER|__GFP_NOWARN), pid 1006, ts 67278156558 ns
      PFN 543776 type Unmovable Block 531 type Unmovable Flags 0x0()
        init_page_owner+0x28/0x2f8
        invoke_init_callbacks_flatmem+0x24/0x34
        start_kernel+0x33c/0x5d8
    
    Link: https://lkml.kernel.org/r/1603104925-5888-1-git-send-email-zhenhuah@codeaurora.orgSigned-off-by: default avatarZhenhua Huang <zhenhuah@codeaurora.org>
    Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    7fb7ab6d
main.c 37.3 KB