From patchwork Fri Feb 21 12:52:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jing Xiangfeng X-Patchwork-Id: 11393207 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 BA86914E3 for ; Thu, 20 Feb 2020 03:43:34 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 9181B206E2 for ; Thu, 20 Feb 2020 03:43:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9181B206E2 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=huawei.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 1C2A96B0006; Wed, 19 Feb 2020 22:43:32 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 173666B0007; Wed, 19 Feb 2020 22:43:32 -0500 (EST) 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 089AF6B0008; Wed, 19 Feb 2020 22:43:32 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0238.hostedemail.com [216.40.44.238]) by kanga.kvack.org (Postfix) with ESMTP id E2BB36B0006 for ; Wed, 19 Feb 2020 22:43:31 -0500 (EST) Received: from smtpin02.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id AD094181AEF07 for ; Thu, 20 Feb 2020 03:43:31 +0000 (UTC) X-FDA: 76509110622.02.smile74_1ebac6bd2650b X-Spam-Summary: 1,0,0,,d41d8cd98f00b204,jingxiangfeng@huawei.com,:ardb@kernel.org:tglx@linutronix.de:mingo@redhat.com:bp@alien8.de:hpa@zytor.com:x86@kernel.org:dvhart@infradead.org:andy@infradead.org:linux-efi@vger.kernel.org:linux-kernel@vger.kernel.org:platform-driver-x86@vger.kernel.org::wangkefeng.wang@huawei.com:jingxiangfeng@huawei.com,RULES_HIT:30003:30054,0,RBL:45.249.212.32:@huawei.com:.lbl8.mailshell.net-62.18.2.100 64.95.201.95,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fp,MSBL:0,DNSBL:neutral,Custom_rules:0:0:0,LFtime:24,LUA_SUMMARY:none X-HE-Tag: smile74_1ebac6bd2650b X-Filterd-Recvd-Size: 5296 Received: from huawei.com (szxga06-in.huawei.com [45.249.212.32]) by imf44.hostedemail.com (Postfix) with ESMTP for ; Thu, 20 Feb 2020 03:43:31 +0000 (UTC) Received: from DGGEMS407-HUB.china.huawei.com (unknown [172.30.72.59]) by Forcepoint Email with ESMTP id 78527DA8C0C61125B1F1; Thu, 20 Feb 2020 11:43:26 +0800 (CST) Received: from localhost.localdomain (10.175.112.70) by DGGEMS407-HUB.china.huawei.com (10.3.19.207) with Microsoft SMTP Server id 14.3.439.0; Thu, 20 Feb 2020 11:43:16 +0800 From: Jing Xiangfeng To: , , , , , , , CC: , , , , , Subject: [PATCH 1/2] efi: allow EFI_FAKE_MEMMAP on arm64 platform Date: Fri, 21 Feb 2020 07:52:59 -0500 Message-ID: <1582289580-24045-2-git-send-email-jingxiangfeng@huawei.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1582289580-24045-1-git-send-email-jingxiangfeng@huawei.com> References: <1582289580-24045-1-git-send-email-jingxiangfeng@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.112.70] X-CFilter-Loop: Reflected 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: Add a efi_fake_memmap call in efi_init on arm64.This is useful for debugging of Address Range Mirroring feature on arm64 platform. Signed-off-by: Jing Xiangfeng --- arch/x86/include/asm/efi.h | 1 - arch/x86/platform/efi/efi.c | 16 ---------------- drivers/firmware/efi/Kconfig | 2 +- drivers/firmware/efi/arm-init.c | 1 + drivers/firmware/efi/memmap.c | 16 ++++++++++++++++ include/linux/efi.h | 1 + 6 files changed, 19 insertions(+), 18 deletions(-) diff --git a/arch/x86/include/asm/efi.h b/arch/x86/include/asm/efi.h index 86169a2..127977f 100644 --- a/arch/x86/include/asm/efi.h +++ b/arch/x86/include/asm/efi.h @@ -158,7 +158,6 @@ extern void __iomem *__init efi_ioremap(unsigned long addr, unsigned long size, extern struct efi_scratch efi_scratch; extern void __init efi_set_executable(efi_memory_desc_t *md, bool executable); extern int __init efi_memblock_x86_reserve_range(void); -extern void __init efi_print_memmap(void); extern void __init efi_memory_uc(u64 addr, unsigned long size); extern void __init efi_map_region(efi_memory_desc_t *md); extern void __init efi_map_region_fixed(efi_memory_desc_t *md); diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c index ae923ee..4c8793d 100644 --- a/arch/x86/platform/efi/efi.c +++ b/arch/x86/platform/efi/efi.c @@ -317,22 +317,6 @@ static void __init efi_clean_memmap(void) } } -void __init efi_print_memmap(void) -{ - efi_memory_desc_t *md; - int i = 0; - - for_each_efi_memory_desc(md) { - char buf[64]; - - pr_info("mem%02u: %s range=[0x%016llx-0x%016llx] (%lluMB)\n", - i++, efi_md_typeattr_format(buf, sizeof(buf), md), - md->phys_addr, - md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT) - 1, - (md->num_pages >> (20 - EFI_PAGE_SHIFT))); - } -} - static int __init efi_systab_init(u64 phys) { int size = efi_enabled(EFI_64BIT) ? sizeof(efi_system_table_64_t) diff --git a/drivers/firmware/efi/Kconfig b/drivers/firmware/efi/Kconfig index ecc83e2..9cf9a96 100644 --- a/drivers/firmware/efi/Kconfig +++ b/drivers/firmware/efi/Kconfig @@ -55,7 +55,7 @@ config EFI_RUNTIME_MAP config EFI_FAKE_MEMMAP bool "Enable EFI fake memory map" - depends on EFI && X86 + depends on EFI && (X86 || ARM64) default n help Saying Y here will enable "efi_fake_mem" boot option. diff --git a/drivers/firmware/efi/arm-init.c b/drivers/firmware/efi/arm-init.c index d99f5b0..ac00e7c 100644 --- a/drivers/firmware/efi/arm-init.c +++ b/drivers/firmware/efi/arm-init.c @@ -265,6 +265,7 @@ void __init efi_init(void) } reserve_regions(); + efi_fake_memmap(); efi_esrt_init(); memblock_reserve(params.mmap & PAGE_MASK, diff --git a/drivers/firmware/efi/memmap.c b/drivers/firmware/efi/memmap.c index 2ff1883..0155bf0 100644 --- a/drivers/firmware/efi/memmap.c +++ b/drivers/firmware/efi/memmap.c @@ -376,3 +376,19 @@ void __init efi_memmap_insert(struct efi_memory_map *old_memmap, void *buf, } } } + +void __init efi_print_memmap(void) +{ + efi_memory_desc_t *md; + int i = 0; + + for_each_efi_memory_desc(md) { + char buf[64]; + + pr_info("mem%02u: %s range=[0x%016llx-0x%016llx] (%lluMB)\n", + i++, efi_md_typeattr_format(buf, sizeof(buf), md), + md->phys_addr, + md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT) - 1, + (md->num_pages >> (20 - EFI_PAGE_SHIFT))); + } +} diff --git a/include/linux/efi.h b/include/linux/efi.h index 7efd707..bf101e5 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h @@ -1142,6 +1142,7 @@ static inline bool __pure efi_soft_reserve_enabled(void) return IS_ENABLED(CONFIG_EFI_SOFT_RESERVE) && __efi_soft_reserve_enabled(); } +extern void __init efi_print_memmap(void); #else static inline bool efi_enabled(int feature) { From patchwork Fri Feb 21 12:53:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jing Xiangfeng X-Patchwork-Id: 11393209 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 10E5E138D for ; Thu, 20 Feb 2020 03:43:53 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id CEAA7206E2 for ; Thu, 20 Feb 2020 03:43:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CEAA7206E2 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=huawei.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 1E9966B0007; Wed, 19 Feb 2020 22:43:52 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 199B56B0008; Wed, 19 Feb 2020 22:43:52 -0500 (EST) 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 0AFF96B000A; Wed, 19 Feb 2020 22:43:52 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0168.hostedemail.com [216.40.44.168]) by kanga.kvack.org (Postfix) with ESMTP id E79F66B0007 for ; Wed, 19 Feb 2020 22:43:51 -0500 (EST) Received: from smtpin23.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id BD2872C6D for ; Thu, 20 Feb 2020 03:43:51 +0000 (UTC) X-FDA: 76509111462.23.view80_2075343834f36 X-Spam-Summary: 1,0,0,,d41d8cd98f00b204,jingxiangfeng@huawei.com,:ardb@kernel.org:tglx@linutronix.de:mingo@redhat.com:bp@alien8.de:hpa@zytor.com:x86@kernel.org:dvhart@infradead.org:andy@infradead.org:linux-efi@vger.kernel.org:linux-kernel@vger.kernel.org:platform-driver-x86@vger.kernel.org::wangkefeng.wang@huawei.com:jingxiangfeng@huawei.com,RULES_HIT:30003:30046:30054,0,RBL:45.249.212.190:@huawei.com:.lbl8.mailshell.net-64.95.201.95 62.18.2.100,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fp,MSBL:0,DNSBL:neutral,Custom_rules:0:0:0,LFtime:23,LUA_SUMMARY:none X-HE-Tag: view80_2075343834f36 X-Filterd-Recvd-Size: 7353 Received: from huawei.com (szxga04-in.huawei.com [45.249.212.190]) by imf45.hostedemail.com (Postfix) with ESMTP for ; Thu, 20 Feb 2020 03:43:42 +0000 (UTC) Received: from DGGEMS407-HUB.china.huawei.com (unknown [172.30.72.59]) by Forcepoint Email with ESMTP id 850691A2C336DE737128; Thu, 20 Feb 2020 11:43:31 +0800 (CST) Received: from localhost.localdomain (10.175.112.70) by DGGEMS407-HUB.china.huawei.com (10.3.19.207) with Microsoft SMTP Server id 14.3.439.0; Thu, 20 Feb 2020 11:43:21 +0800 From: Jing Xiangfeng To: , , , , , , , CC: , , , , , Subject: [PATCH 2/2] arm64/efi: support to find mirrored memory ranges Date: Fri, 21 Feb 2020 07:53:00 -0500 Message-ID: <1582289580-24045-3-git-send-email-jingxiangfeng@huawei.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1582289580-24045-1-git-send-email-jingxiangfeng@huawei.com> References: <1582289580-24045-1-git-send-email-jingxiangfeng@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.112.70] X-CFilter-Loop: Reflected 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: Commit b05b9f5f9dcf ("x86, mirror: x86 enabling - find mirrored memory ranges") introduced the efi_find_mirror on x86. Now we can scan the memory map and find mirrored memory ranges by calling efi_find_mirror on arm64 platform. For example, if "efi_fake_mem=4G@1G:0x10000,4G@7G:0x10000" is specified, the original (firmware provided) EFI memmap will be updated so that the specified memory regions have EFI_MEMORY_MORE_RELIABLE attribute (0x10000): efi: mem02: [Conventional Memory| | | | | | | | | |WB| | | ] range=[0x0000000040000000-0x00000001b5035fff] (5968MB) efi: mem28: [Conventional Memory| | | | | | | | | |WB| | | ] range=[0x00000001c0000000-0x00000002843fffff] (3140MB) efi: mem29: [Loader Data | | | | | | | | | |WB| | | ] range=[0x0000000284400000-0x0000000285f18fff] (27MB) efi: mem30: [Conventional Memory| | | | | | | | | |WB| | | ] range=[0x0000000285f19000-0x000000033fbfffff] (2972MB) efi: mem02: [Conventional Memory| |MR| | | | | | | |WB| | | ] range=[0x0000000040000000-0x000000013fffffff] (4096MB) efi: mem03: [Conventional Memory| | | | | | | | | |WB| | | ] range=[0x0000000140000000-0x00000001b5035fff] (1872MB) efi: mem29: [Conventional Memory| |MR| | | | | | | |WB| | | ] range=[0x00000001c0000000-0x00000002843fffff] (3140MB) efi: mem30: [Loader Data | |MR| | | | | | | |WB| | | ] range=[0x0000000284400000-0x0000000285f18fff] (27MB) efi: mem31: [Conventional Memory| |MR| | | | | | | |WB| | | ] range=[0x0000000285f19000-0x00000002bfffffff] (928MB) And you will find that the following message is output: efi: Memory: 8192M/12352M mirrored memory Signed-off-by: Jing Xiangfeng --- arch/x86/include/asm/efi.h | 4 ---- arch/x86/platform/efi/efi.c | 23 ----------------------- drivers/firmware/efi/arm-init.c | 1 + drivers/firmware/efi/efi.c | 23 +++++++++++++++++++++++ include/linux/efi.h | 4 ++++ 5 files changed, 28 insertions(+), 27 deletions(-) diff --git a/arch/x86/include/asm/efi.h b/arch/x86/include/asm/efi.h index 127977f..24fa6a9 100644 --- a/arch/x86/include/asm/efi.h +++ b/arch/x86/include/asm/efi.h @@ -330,7 +330,6 @@ static inline void *efi64_zero_upper(void *p) extern bool efi_reboot_required(void); extern bool efi_is_table_address(unsigned long phys_addr); -extern void efi_find_mirror(void); extern void efi_reserve_boot_services(void); #else static inline void parse_efi_setup(u64 phys_addr, u32 data_len) {} @@ -342,9 +341,6 @@ static inline bool efi_is_table_address(unsigned long phys_addr) { return false; } -static inline void efi_find_mirror(void) -{ -} static inline void efi_reserve_boot_services(void) { } diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c index 4c8793d..c06603d 100644 --- a/arch/x86/platform/efi/efi.c +++ b/arch/x86/platform/efi/efi.c @@ -97,29 +97,6 @@ static int __init setup_add_efi_memmap(char *arg) } early_param("add_efi_memmap", setup_add_efi_memmap); -void __init efi_find_mirror(void) -{ - efi_memory_desc_t *md; - u64 mirror_size = 0, total_size = 0; - - if (!efi_enabled(EFI_MEMMAP)) - return; - - for_each_efi_memory_desc(md) { - unsigned long long start = md->phys_addr; - unsigned long long size = md->num_pages << EFI_PAGE_SHIFT; - - total_size += size; - if (md->attribute & EFI_MEMORY_MORE_RELIABLE) { - memblock_mark_mirror(start, size); - mirror_size += size; - } - } - if (mirror_size) - pr_info("Memory: %lldM/%lldM mirrored memory\n", - mirror_size>>20, total_size>>20); -} - /* * Tell the kernel about the EFI memory map. This might include * more than the max 128 entries that can fit in the passed in e820 diff --git a/drivers/firmware/efi/arm-init.c b/drivers/firmware/efi/arm-init.c index ac00e7c..f86e73e 100644 --- a/drivers/firmware/efi/arm-init.c +++ b/drivers/firmware/efi/arm-init.c @@ -266,6 +266,7 @@ void __init efi_init(void) reserve_regions(); efi_fake_memmap(); + efi_find_mirror(); efi_esrt_init(); memblock_reserve(params.mmap & PAGE_MASK, diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c index 621220a..664d01d 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c @@ -394,6 +394,29 @@ static int __init efisubsys_init(void) subsys_initcall(efisubsys_init); +void __init efi_find_mirror(void) +{ + efi_memory_desc_t *md; + u64 mirror_size = 0, total_size = 0; + + if (!efi_enabled(EFI_MEMMAP)) + return; + + for_each_efi_memory_desc(md) { + unsigned long long start = md->phys_addr; + unsigned long long size = md->num_pages << EFI_PAGE_SHIFT; + + total_size += size; + if (md->attribute & EFI_MEMORY_MORE_RELIABLE) { + memblock_mark_mirror(start, size); + mirror_size += size; + } + } + if (mirror_size) + pr_info("Memory: %lldM/%lldM mirrored memory\n", + mirror_size>>20, total_size>>20); +} + /* * Find the efi memory descriptor for a given physical address. Given a * physical address, determine if it exists within an EFI Memory Map entry, diff --git a/include/linux/efi.h b/include/linux/efi.h index bf101e5..bb32e37 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h @@ -1143,6 +1143,7 @@ static inline bool __pure efi_soft_reserve_enabled(void) && __efi_soft_reserve_enabled(); } extern void __init efi_print_memmap(void); +extern void efi_find_mirror(void); #else static inline bool efi_enabled(int feature) { @@ -1161,6 +1162,9 @@ static inline bool efi_soft_reserve_enabled(void) { return false; } +static inline void efi_find_mirror(void) +{ +} #endif extern int efi_status_to_err(efi_status_t status);