Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp6538035ybl; Mon, 23 Dec 2019 07:29:09 -0800 (PST) X-Google-Smtp-Source: APXvYqwOqsG5qXsiUytwKIXuF/hwYePI0DNw9rD9ERBv46QXEnrHO6c6ulIfzOegbDjD4CjZHZA3 X-Received: by 2002:a05:6830:18f1:: with SMTP id d17mr26759621otf.298.1577114949290; Mon, 23 Dec 2019 07:29:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1577114949; cv=none; d=google.com; s=arc-20160816; b=cCVfkYd5RktfdVAxnmp3G5oQJ1pvolAoUlgC9VYUqA5yRfsrpKaT7MTlPQtTI1mHIp jqU9tWiR7O7kcxL4FGLK+5QXJWcjq/6R9cZoDWsmDoKfB93yIgKgbcvFUki9oWQkyw9l KHJgExbygZcHXuKtNCMkGQep9Hh2jqHuEa2tuB+6w+qfmlJmsKcj8ABX7JM4OnzHD2fs Xj0kpQERhCnOadyTI98gpcvZW0+sEUDPIl+76P5pY3E2oOJ8Jm64aR7BdH1jBwp7cvM1 Vw69hZ4A33TKDM5ZdsFKGL91X//u80TH6PYA0xACAHAhulyGksolAOZNLfswRJORrwnF 6KmA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=xbC8zNufuuhhbw81nWnFdHMh4vZZrkBlPvV/tWhg7f8=; b=aPgbKJrSBeK+IsPSEH3cIv4blhx9kNtPz+xyN7rkGo8t85/CuUTRa8sVv1PtZOjc0C 0pamIEUjiLFGwr9pJOz6iiQY0OiffeeyJren/v6/d257qTz1B9BOevsvTbFCO6W3i20/ uebq9U6+EQ3sACZ+SQz0a+sbMVQ5NONmfa+f1RQSQdlIWzEJiy9D/dlWVW+SSa1GQejh yMFz5QEYM2SXp6HCMoAnqU+0hIybp91Tq2YOU6xtjPGXsZGj8K7oJfd6fom9NIHNiqvB 6v6szlSsvOCmJKXpWI4IfLF/hXz9/3TW2//5v50W1iWCd2CET3GBDugoN3Yz+1Jzrh8H oYyw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i12si10763830otk.215.2019.12.23.07.28.58; Mon, 23 Dec 2019 07:29:09 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727145AbfLWP1c (ORCPT + 99 others); Mon, 23 Dec 2019 10:27:32 -0500 Received: from szxga07-in.huawei.com ([45.249.212.35]:57858 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726936AbfLWP1a (ORCPT ); Mon, 23 Dec 2019 10:27:30 -0500 Received: from DGGEMS407-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id E232833A261A59EE3E5A; Mon, 23 Dec 2019 23:27:24 +0800 (CST) Received: from localhost.localdomain.localdomain (10.175.113.25) by DGGEMS407-HUB.china.huawei.com (10.3.19.207) with Microsoft SMTP Server id 14.3.439.0; Mon, 23 Dec 2019 23:27:18 +0800 From: Chen Zhou To: , , , , , , CC: , , , , , , Subject: [PATCH v7 3/4] arm64: kdump: add memory for devices by DT property, low-memory-range Date: Mon, 23 Dec 2019 23:23:48 +0800 Message-ID: <20191223152349.180172-4-chenzhou10@huawei.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191223152349.180172-1-chenzhou10@huawei.com> References: <20191223152349.180172-1-chenzhou10@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-Originating-IP: [10.175.113.25] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If we want to reserve crashkernel above 4G, we could use parameters "crashkernel=X crashkernel=Y,low", in this case, specified size low memory is reserved for crash dump kernel devices and never mapped by the first kernel. This memory range is advertised to crash dump kernel via DT property under /chosen, linux,low-memory-range= Crash dump kernel reads this property at boot time and call memblock_add() after memblock_cap_memory_range() has been called. Signed-off-by: Chen Zhou --- arch/arm64/mm/init.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index 0d7afd5..1c4a6ad 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -322,6 +322,26 @@ static int __init early_mem(char *p) } early_param("mem", early_mem); +static int __init early_init_dt_scan_lowmem(unsigned long node, + const char *uname, int depth, void *data) +{ + struct memblock_region *lowmem = data; + const __be32 *reg; + int len; + + if (depth != 1 || strcmp(uname, "chosen") != 0) + return 0; + + reg = of_get_flat_dt_prop(node, "linux,low-memory-range", &len); + if (!reg || (len < (dt_root_addr_cells + dt_root_size_cells))) + return 1; + + lowmem->base = dt_mem_next_cell(dt_root_addr_cells, ®); + lowmem->size = dt_mem_next_cell(dt_root_size_cells, ®); + + return 1; +} + static int __init early_init_dt_scan_usablemem(unsigned long node, const char *uname, int depth, void *data) { @@ -352,13 +372,21 @@ static void __init fdt_enforce_memory_region(void) if (reg.size) memblock_cap_memory_range(reg.base, reg.size); + + of_scan_flat_dt(early_init_dt_scan_lowmem, ®); + + if (reg.size) + memblock_add(reg.base, reg.size); } void __init arm64_memblock_init(void) { const s64 linear_region_size = BIT(vabits_actual - 1); - /* Handle linux,usable-memory-range property */ + /* + * Handle linux,usable-memory-range and linux,low-memory-range + * properties. + */ fdt_enforce_memory_region(); /* Remove memory above our supported physical address size */ -- 2.7.4