Received: by 2002:a25:868d:0:0:0:0:0 with SMTP id z13csp1262277ybk; Thu, 21 May 2020 02:37:09 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwdgr+/r53rp/HIMQCtrKjn8UdmSl6KDFf43pMySaQgFDivZ1VOzScfaRVUXVufXD7/qxI8 X-Received: by 2002:a05:6402:1849:: with SMTP id v9mr7254614edy.178.1590053828936; Thu, 21 May 2020 02:37:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1590053828; cv=none; d=google.com; s=arc-20160816; b=WNbOTtgV48X0TvSRam/zSRV2aRBGNy7R0N0dupmT+YZxryBqnWcn89sgmOtEDO7CQY az4mIP6kqMLxWwX5gSwCnwpc26dTEA/2o721v3gYKjJVD5GlWHrxyCT7BpCku35s25Tf JXs2qYcPPWW0FYSPatFM0IqYKV6Pcs1Cyw2Pt3pigbzRRNnO3lT3JmxOwYUcqfDe5EFh jmIiYJM3sEFzEdOgHPfAn8qw09kMakc/5qz1b6IIJVJWIVzb8gEAh7RPlC76VqDbfAtd wsoTN6MxniXEWDKF/PtaNSgi2EpdFVuVayVj0ECrBm0dFKaIThKavdIzNP6u8hxyrv18 kAQA== 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=Mm38UCW5cnRMw1eGAzMzRQtDtA+HCgZNkMIltmpGcM4=; b=ax5jdj7XJ2RguU4kfU7pc1/eFmTaNUvjDF4uZ+uondLlIInczRIKGaAMzmK9oU+0Nt oN0ANtecOsEGXtbwaSo+bNFMpqjmg3PUxC3fxcTdKfofYwkM8qJEJKw90PpOMsCFJJCs wRB0X96MGPCVFTtwKXFxy+6lkko65AwlK6Q1YBSH7zDtTkdGz2QQyGNjJqvW4g/q9tgp iXoWFQxBWpvxtLqz2dXLLCvxrTxXQr6K/TbxbBvUTaSCd6vQ3u/kj0x4iFHDd0gMwFuT EFE5evGHbIGQSbsN5IvVJote45FgxP99nUjui6Qz+HE0ve2cGWlJZLpidwfKIlAme+SF GBew== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id dt20si4001355ejc.24.2020.05.21.02.36.46; Thu, 21 May 2020 02:37:08 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728948AbgEUJfU (ORCPT + 99 others); Thu, 21 May 2020 05:35:20 -0400 Received: from szxga06-in.huawei.com ([45.249.212.32]:49220 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728848AbgEUJfQ (ORCPT ); Thu, 21 May 2020 05:35:16 -0400 Received: from DGGEMS406-HUB.china.huawei.com (unknown [172.30.72.58]) by Forcepoint Email with ESMTP id AD4AC7E62D4E8D9E15F8; Thu, 21 May 2020 17:35:12 +0800 (CST) Received: from localhost.localdomain.localdomain (10.175.113.25) by DGGEMS406-HUB.china.huawei.com (10.3.19.206) with Microsoft SMTP Server id 14.3.487.0; Thu, 21 May 2020 17:35:03 +0800 From: Chen Zhou To: , , , , , , CC: , , , , , , , , , , Subject: [PATCH v8 3/5] arm64: kdump: add memory for devices by DT property, low-memory-range Date: Thu, 21 May 2020 17:38:03 +0800 Message-ID: <20200521093805.64398-4-chenzhou10@huawei.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200521093805.64398-1-chenzhou10@huawei.com> References: <20200521093805.64398-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 Tested-by: John Donnelly Tested-by: Prabhakar Kushwaha --- 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 71498acf0cd8..fcc3abee7003 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -323,6 +323,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) { @@ -353,13 +373,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.20.1