From patchwork Wed Sep 16 08:59:33 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Song Bao Hua (Barry Song)" X-Patchwork-Id: 11779391 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 68B846CA for ; Wed, 16 Sep 2020 09:02:54 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id CD2D02076C for ; Wed, 16 Sep 2020 09:02:53 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CD2D02076C Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=hisilicon.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id A5E1A6B0003; Wed, 16 Sep 2020 05:02:52 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id A0E4F6B0037; Wed, 16 Sep 2020 05:02:52 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8FD0B6B0055; Wed, 16 Sep 2020 05:02:52 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0200.hostedemail.com [216.40.44.200]) by kanga.kvack.org (Postfix) with ESMTP id 7AC586B0003 for ; Wed, 16 Sep 2020 05:02:52 -0400 (EDT) Received: from smtpin28.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id 37037180AD804 for ; Wed, 16 Sep 2020 09:02:52 +0000 (UTC) X-FDA: 77268334584.28.cat81_130126027118 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin28.hostedemail.com (Postfix) with ESMTP id 0445CA75D for ; Wed, 16 Sep 2020 09:02:51 +0000 (UTC) X-Spam-Summary: 1,0,0,c9efe6337353bd3a,d41d8cd98f00b204,song.bao.hua@hisilicon.com,,RULES_HIT:41:355:379:541:582:800:960:967:968:973:988:989:1152:1260:1261:1277:1311:1313:1314:1345:1431:1437:1515:1516:1518:1534:1543:1711:1730:1747:1777:1792:2393:2525:2559:2563:2682:2685:2693:2859:2933:2937:2939:2942:2945:2947:2951:2954:3022:3138:3139:3140:3141:3142:3354:3865:3866:3867:3870:3871:3934:3936:3938:3941:3944:3947:3950:3953:3956:3959:4250:4321:5007:6117:6119:6121:6261:6671:7208:8660:9025:9040:9113:9163:9391:9592:10004:10400:11026:11473:11658:11914:12043:12114:12297:12438:12555:12679:12895:12986:13007:13148:13161:13229:13230:13870:13894:13904:14096:14097:14181:14394:14721:21080:21451:21611:21627:21749:21811:21939:30003:30012:30029:30034:30054:30056:30064:30070:30075,0,RBL:45.249.212.32:@hisilicon.com:.lbl8.mailshell.net-64.100.201.201 62.2.2.100;04yfbah9343916t7mjcp1d6efdw3jyc7pputcjehoegy6qih1rsepk43epckix5.grfsm9tihaguxwaw3eswwwq8pzuxrrxodzzd8qu65iitwhfuxzq6qjtx6mxagtb.s-lbl8.mails hell.net X-HE-Tag: cat81_130126027118 X-Filterd-Recvd-Size: 4830 Received: from huawei.com (szxga06-in.huawei.com [45.249.212.32]) by imf38.hostedemail.com (Postfix) with ESMTP for ; Wed, 16 Sep 2020 09:02:51 +0000 (UTC) Received: from DGGEMS413-HUB.china.huawei.com (unknown [172.30.72.59]) by Forcepoint Email with ESMTP id 7C1E2F76F57E9C0AD266; Wed, 16 Sep 2020 17:02:44 +0800 (CST) Received: from SWX921481.china.huawei.com (10.126.203.18) by DGGEMS413-HUB.china.huawei.com (10.3.19.213) with Microsoft SMTP Server id 14.3.487.0; Wed, 16 Sep 2020 17:02:37 +0800 From: Barry Song To: , CC: , Barry Song , "Roman Gushchin" , Mike Kravetz , Andrew Morton , Will Deacon , Stephen Rothwell Subject: [PATCH] arm64: mm: move dma_contiguous_reserve() to be after paging_init() Date: Wed, 16 Sep 2020 20:59:33 +1200 Message-ID: <20200916085933.25220-1-song.bao.hua@hisilicon.com> X-Mailer: git-send-email 2.21.0.windows.1 MIME-Version: 1.0 X-Originating-IP: [10.126.203.18] X-CFilter-Loop: Reflected X-Rspamd-Queue-Id: 0445CA75D X-Spamd-Result: default: False [0.00 / 100.00] X-Rspamd-Server: rspam03 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: 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. Cc: Roman Gushchin Cc: Mike Kravetz Cc: Andrew Morton Cc: Will Deacon Cc: Stephen Rothwell Signed-off-by: Barry Song Tested-by: Anders Roxell --- -v1: to fix the knic during boot after applying Mike's patch: https://lore.kernel.org/linux-mm/20200915205703.34572-1-mike.kravetz@oracle.com/ arch/arm64/mm/init.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index f1c75957ff3c..8dd61d07fff5 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -402,8 +402,6 @@ void __init arm64_memblock_init(void) reserve_elfcorehdr(); high_memory = __va(memblock_end_of_DRAM() - 1) + 1; - - dma_contiguous_reserve(arm64_dma32_phys_limit); } void __init bootmem_init(void) @@ -415,6 +413,13 @@ void __init bootmem_init(void) early_memtest(min << PAGE_SHIFT, max << PAGE_SHIFT); + /* + * CMA is using memblock_alloc(), the virtual address returned + * from memblock_alloc() isn't ready till paging_init(). + * So this has to happen after paging_init() + */ + dma_contiguous_reserve(arm64_dma32_phys_limit); + max_pfn = max_low_pfn = max; min_low_pfn = min;