• Laura Abbott's avatar
    mm: Don't offset memmap for flatmem · a1c34a3b
    Laura Abbott authored
    Srinivas Kandagatla reported bad page messages when trying to remove the
    bottom 2MB on an ARM based IFC6410 board
    
      BUG: Bad page state in process swapper  pfn:fffa8
      page:ef7fb500 count:0 mapcount:0 mapping:  (null) index:0x0
      flags: 0x96640253(locked|error|dirty|active|arch_1|reclaim|mlocked)
      page dumped because: PAGE_FLAGS_CHECK_AT_FREE flag(s) set
      bad because of flags:
      flags: 0x200041(locked|active|mlocked)
      Modules linked in:
      CPU: 0 PID: 0 Comm: swapper Not tainted 3.19.0-rc3-00007-g412f9ba-dirty #816
      Hardware name: Qualcomm (Flattened Device Tree)
        unwind_backtrace
        show_stack
        dump_stack
        bad_page
        free_pages_prepare
        free_hot_cold_page
        __free_pages
        free_highmem_page
        mem_init
        start_kernel
      Disabling lock debugging due to kernel taint
    
    Removing the lower 2MB made the start of the lowmem zone to no longer be
    page block aligned.  IFC6410 uses CONFIG_FLATMEM where alloc_node_mem_map
    allocates memory for the mem_map.  alloc_node_mem_map will offset for
    unaligned nodes with the assumption the pfn/page translation functions
    will account for the offset.  The functions for CONFIG_FLATMEM do not
    offset however, resulting in overrunning the memmap array.  Just use the
    allocated memmap without any offset when running with CONFIG_FLATMEM to
    avoid the overrun.
    Signed-off-by: default avatarLaura Abbott <laura@labbott.name>
    Signed-off-by: default avatarLaura Abbott <lauraa@codeaurora.org>
    Reported-by: default avatarSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
    Tested-by: default avatarSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
    Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Tested-by: default avatarBjorn Andersson <bjorn.andersson@sonymobile.com>
    Cc: Santosh Shilimkar <ssantosh@kernel.org>
    Cc: Russell King <rmk@arm.linux.org.uk>
    Cc: Kevin Hilman <khilman@linaro.org>
    Cc: Arnd Bergman <arnd@arndb.de>
    Cc: Stephen Boyd <sboyd@codeaurora.org>
    Cc: Andy Gross <agross@codeaurora.org>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    a1c34a3b
page_alloc.c 194 KB