• Joonsoo Kim's avatar
    mm/CMA: fix boot regression due to physical address of high_memory · 6b101e2a
    Joonsoo Kim authored
    high_memory isn't direct mapped memory so retrieving it's physical address
    isn't appropriate.  But, it would be useful to check physical address of
    highmem boundary so it's justfiable to get physical address from it.  In
    x86, there is a validation check if CONFIG_DEBUG_VIRTUAL and it triggers
    following boot failure reported by Ingo.
    
      ...
      BUG: Int 6: CR2 00f06f53
      ...
      Call Trace:
        dump_stack+0x41/0x52
        early_idt_handler+0x6b/0x6b
        cma_declare_contiguous+0x33/0x212
        dma_contiguous_reserve_area+0x31/0x4e
        dma_contiguous_reserve+0x11d/0x125
        setup_arch+0x7b5/0xb63
        start_kernel+0xb8/0x3e6
        i386_start_kernel+0x79/0x7d
    
    To fix boot regression, this patch implements workaround to avoid
    validation check in x86 when retrieving physical address of high_memory.
    __pa_nodebug() used by this patch is implemented only in x86 so there is
    no choice but to use dirty #ifdef.
    
    [akpm@linux-foundation.org: tweak comment]
    Signed-off-by: default avatarJoonsoo Kim <iamjoonsoo.kim@lge.com>
    Reported-by: default avatarIngo Molnar <mingo@kernel.org>
    Tested-by: default avatarIngo Molnar <mingo@kernel.org>
    Cc: Marek Szyprowski <m.szyprowski@samsung.com>
    Cc: Russell King <rmk@arm.linux.org.uk>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    6b101e2a
cma.c 11.4 KB