[PATCH] arm64: mm: move dma_contiguous_reserve() to be after paging_init()

Anders Roxell anders.roxell at linaro.org
Wed Sep 16 11:12:37 EDT 2020


> Recent CMA change "cma: make number of CMA areas dynamic, remove
> CONFIG_CMA_AREAS" breaks the boot of arm64 kernel in linux-next.
> Knic is like:
> 
> Unable to handle kernel paging request at virtual address ffff0000438fff70
> Mem abort info:
>   ESR = 0x96000044
>   EC = 0x25: DABT (current EL), IL = 32 bits
>   SET = 0, FnV = 0
>   EA = 0, S1PTW = 0
> Data abort info:
>   ISV = 0, ISS = 0x00000044
>   CM = 0, WnR = 1
> swapper pgtable: 4k pages, 48-bit VAs, pgdp=0000000041f61000
> [ffff0000438fff70] pgd=0000000000000000, p4d=0000000000000000
> Internal error: Oops: 96000044 [#1] PREEMPT SMP
> Modules linked in:
> CPU: 0 PID: 0 Comm: swapper Not tainted 5.9.0-rc3-00020-ge1bce3d64c48 #2
> Hardware name: linux,dummy-virt (DT)
> pstate: 20000085 (nzCv daIf -PAN -UAO BTYPE=--)
> pc : __memset+0x148/0x188
> lr : memblock_alloc_try_nid+0xbc/0xd4
> sp : ffff800011ab3d10
> x29: ffff800011ab3d10 x28: 0000000041710018
> x27: 0000000040000000 x26: ffff8000115d1000
> x25: 0000000000000000 x24: ffff800011300428
> x23: ffff800011d1bd60 x22: 0000000000000000
> x21: 00000000ffffffff x20: ffff0000438fff70
> x19: 0000000000000090 x18: 0000000000000010
> x17: 0000000000001400 x16: 0000000000001c00
> x15: ffff800011ac3530 x14: ffff800011ac3530
> x13: fffffdfffe600000 x12: ffff800011ab3e44
> x11: 0000000000000004 x10: 0000000000000018
> x9 : 0000000000000000 x8 : ffff0000438fff70
> x7 : 0000000000000000 x6 : 000000000000003f
> x5 : 0000000000000040 x4 : 0000000000000010
> x3 : 0000000000000080 x2 : 0000000000000080
> x1 : 0000000000000000 x0 : ffff0000438fff70
> Call trace:
>  __memset+0x148/0x188
>  cma_init_reserved_mem+0x94/0x154
>  cma_declare_contiguous_nid+0x240/0x2bc
>  dma_contiguous_reserve_area+0x48/0x78
>  dma_contiguous_reserve+0x78/0x88
>  arm64_memblock_init+0x424/0x45c
>  setup_arch+0x270/0x5f0
>  start_kernel+0x84/0x4dc
> Code: f101007f fa45a068 54fffc0b aa0303e2 (a9001d07)
> random: get_random_bytes called from print_oops_end_marker+0x2c/0x68 with crng_init=0
> ---[ end trace 0000000000000000 ]---
> Kernel panic - not syncing: Attempted to kill the idle task!
> ---[ end Kernel panic - not syncing: Attempted to kill the idle task! ]---
> 
> The virtual address returned from memblock_alloc() is not ready till
> paging_init() is done.
> 
> Signed-off-by: Barry Song <song.bao.hua at hisilicon.com>
> Cc: Roman Gushchin <guro at fb.com>
> Cc: Mike Kravetz <mike.kravetz at oracle.com>
> Cc: Andrew Morton <akpm at linux-foundation.org>
> Cc: Will Deacon <will at kernel.org>
> Cc: Stephen Rothwell <sfr at canb.auug.org.au>

Tested-by: Anders Roxell <anders.roxell at linaro.org>

Cheers,
Anders



More information about the linux-arm-kernel mailing list