From patchwork Mon Jun 13 08:21:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: mawupeng X-Patchwork-Id: 12879117 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 11021C43334 for ; Mon, 13 Jun 2022 08:00:35 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5C4118D015F; Mon, 13 Jun 2022 04:00:35 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 573548D0142; Mon, 13 Jun 2022 04:00:35 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 43ABA8D015F; Mon, 13 Jun 2022 04:00:35 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 345BF8D0142 for ; Mon, 13 Jun 2022 04:00:35 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id EF38586A for ; Mon, 13 Jun 2022 08:00:34 +0000 (UTC) X-FDA: 79572465588.02.3C28634 Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by imf29.hostedemail.com (Postfix) with ESMTP id C1EC5120089 for ; Mon, 13 Jun 2022 08:00:33 +0000 (UTC) Received: from dggpemm500023.china.huawei.com (unknown [172.30.72.53]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4LM3qt6nPZzjXZ3; Mon, 13 Jun 2022 15:59:22 +0800 (CST) Received: from dggpemm500014.china.huawei.com (7.185.36.153) by dggpemm500023.china.huawei.com (7.185.36.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Mon, 13 Jun 2022 16:00:25 +0800 Received: from localhost.localdomain (10.175.112.125) by dggpemm500014.china.huawei.com (7.185.36.153) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Mon, 13 Jun 2022 16:00:24 +0800 From: Wupeng Ma To: , , , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v4 0/6] introduce mirrored memory support for arm64 Date: Mon, 13 Jun 2022 16:21:41 +0800 Message-ID: <20220613082147.183145-1-mawupeng1@huawei.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-Originating-IP: [10.175.112.125] X-ClientProxiedBy: dggems702-chm.china.huawei.com (10.3.19.179) To dggpemm500014.china.huawei.com (7.185.36.153) X-CFilter-Loop: Reflected ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1655107234; a=rsa-sha256; cv=none; b=8JPpx5DJRzCiSLf+gnt8pm/3DJ2zD8jP9DSmHsi4IlMB6syqWRAtm2ivrPqnEMYhEKwAVB NpF8h1ziqfZJbnLnvVmKaRmRKZgzdCMTL2VDqBayn6ExKcVA6S+vzIoMCXMHgsZyYXaYm3 rwzT5oycJcp3HtJJB7LQIDUfJj9BEMU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1655107234; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:in-reply-to: references; bh=u9CaNkBytTC6H1o6beV/r4BVViiZW8jZVXkjtmU0FDQ=; b=VGe4sJEZTJua0O5DwPbkTTmc7F22Uzjm1WaQeou0YXihJK2AKALWGfyREfxmvjOlKGfSbH BzmbAFOya+S/jvu7lOv0kuUSRvgfIMMb718Rwr5JhSAr2C2mtl1uOh7d4umsuoQWvXPuHv ZAfu0ziwtQ3YkklQfwqwX7KF742HjpY= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf29.hostedemail.com: domain of mawupeng1@huawei.com designates 45.249.212.187 as permitted sender) smtp.mailfrom=mawupeng1@huawei.com Authentication-Results: imf29.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf29.hostedemail.com: domain of mawupeng1@huawei.com designates 45.249.212.187 as permitted sender) smtp.mailfrom=mawupeng1@huawei.com X-Stat-Signature: sqxceyj39oy4x7fmj3t7iouwus6fwtoc X-Rspamd-Queue-Id: C1EC5120089 X-Rspamd-Server: rspam12 X-Rspam-User: X-HE-Tag: 1655107233-83103 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: From: Ma Wupeng Commit b05b9f5f9dcf ("x86, mirror: x86 enabling - find mirrored memory ranges") introduced mirrored memory support for x86. This support rely on UEFI to report mirrored memory address ranges. See UEFI 2.5 spec pages 157-158: http://www.uefi.org/sites/default/files/resources/UEFI%202_5.pdf Memory mirroring is a technique used to separate memory into two separate channels, usually on a memory device, like a server. In memory mirroring, one channel is copied to another to create redundancy. This method makes input/output (I/O) registers and memory appear with more than one address range because the same physical byte is accessible at more than one address. Using memory mirroring, higher memory reliability and a higher level of memory consolidation are possible. These EFI memory regions have various attributes, and the "mirrored" attribute is one of them. The physical memory region whose descriptors in EFI memory map has EFI_MEMORY_MORE_RELIABLE attribute (bit: 16) are mirrored. The address range mirroring feature of the kernel arranges such mirrored regions into normal zones and other regions into movable zones. Arm64 can support this too. So mirrored memory support is added to support arm64. The main purpose of this patch set is to introduce mirrored support for arm64 and we have already fixed the problems we had which is shown in patch #5 to patch #8 and try to bring total isolation in patch #9 which will disable mirror feature if kernelcore is not specified. In order to test this support in arm64: - patch this patch set - add kernelcore=mirror in kernel parameter - start you kernel Patch #1-#2 introduce mirrored memory support form arm64. Patch #3-#5 fix some bugs for arm64 if memory reliable is enabled. Patch #6 disable mirror feature if kernelcore is not specified. Thanks to Ard Biesheuvel's hard work [1], now kernel will perfer mirrored memory if kaslr is enabled. [1] https://lore.kernel.org/linux-arm-kernel/CAMj1kXEPVEzMgOM4+Yj6PxHA-jFuDOAUdDJSiSxy_XaP4P7LSw@mail.gmail.com/T/ Changelog since v3: - limit warning message in vmemmap_verify via pr_warn_once() - only clear memblock_nomap flags rather than bring the mirrored flag back - disable mirrored feature in memblock_mark_mirror() Changelog since v2: - remove efi_fake_mem support - remove Commit ("remove some redundant code in ia64 efi_init") since efi_print_memmap() is not public - add mirror flag back on initrd memory Changelog since v1: - update changelog in cover letter - use PHYS_PFN in patch #7 Ma Wupeng (6): efi: Make efi_find_mirror() public arm64/mirror: arm64 enabling - find mirrored memory ranges mm: Ratelimited mirrored memory related warning messages mm: Limit warning message in vmemmap_verify() to once mm: Only remove nomap flag for initrd memblock: Disable mirror feature if kernelcore is not specified .../admin-guide/kernel-parameters.txt | 2 +- arch/arm64/kernel/setup.c | 1 + arch/arm64/mm/init.c | 2 +- arch/x86/include/asm/efi.h | 4 ---- arch/x86/platform/efi/efi.c | 23 ------------------- drivers/firmware/efi/efi.c | 23 +++++++++++++++++++ include/linux/efi.h | 3 +++ mm/internal.h | 2 ++ mm/memblock.c | 7 ++++-- mm/page_alloc.c | 2 +- mm/sparse-vmemmap.c | 2 +- 11 files changed, 38 insertions(+), 33 deletions(-)