From mboxrd@z Thu Jan 1 00:00:00 1970 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 7E17FC0015E for ; Mon, 17 Jul 2023 11:52:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F2A196B0072; Mon, 17 Jul 2023 07:52:04 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id ED93F6B0074; Mon, 17 Jul 2023 07:52:04 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DA1B48D0001; Mon, 17 Jul 2023 07:52:04 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id C6DCA6B0072 for ; Mon, 17 Jul 2023 07:52:04 -0400 (EDT) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 8B183A0587 for ; Mon, 17 Jul 2023 11:52:04 +0000 (UTC) X-FDA: 81020940168.16.E08F700 Received: from szxga08-in.huawei.com (szxga08-in.huawei.com [45.249.212.255]) by imf11.hostedemail.com (Postfix) with ESMTP id D219D4000E for ; Mon, 17 Jul 2023 11:52:00 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf11.hostedemail.com: domain of mawupeng1@huawei.com designates 45.249.212.255 as permitted sender) smtp.mailfrom=mawupeng1@huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1689594722; 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=jCHoCKapbskDxs00RFzUsH2Dc5z/Rza4VF/e2/6y96U=; b=rnXWcF7FBhHXHKArH64HrQzpSq9kVbXiNNPvICaUHLuc3eYt+GYGE8bPjTOvarOm5Mldtt m47t1x/y1DO+Clv6tsvxUBJ5IBCj9EW0UmmKs6cxlL2F2iNr9cx7NVsAOUYlTBpKskRBzH YIASfk3EbiTqJN3vFtPoXX+GudxQgH4= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf11.hostedemail.com: domain of mawupeng1@huawei.com designates 45.249.212.255 as permitted sender) smtp.mailfrom=mawupeng1@huawei.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1689594722; a=rsa-sha256; cv=none; b=dy/BFk8HxMf/ykdtFXiHeX+nAgQcuv2EoFsh3DcsW852fR/imSHr1e4DZ/0V1squQC8HZM eyBpziQEY/eFh5rm1DVtmJllOiF0xZL9EHeMBJR3LjK9JdqaQWLxt3FqTL5QBTU8t2eeH6 MEPS+qCmOeDHedHK2oE8G+bvS0lP0JE= Received: from dggpemm500014.china.huawei.com (unknown [172.30.72.55]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4R4L5F6xJDz18LlC; Mon, 17 Jul 2023 19:51:13 +0800 (CST) 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.2507.27; Mon, 17 Jul 2023 19:51:54 +0800 From: Wupeng Ma To: , , CC: , , , , , , , Subject: [RFC PATCH] arm64: mm: Fix kernel page tables incorrectly deleted during memory removal Date: Mon, 17 Jul 2023 19:51:50 +0800 Message-ID: <20230717115150.1806954-1-mawupeng1@huawei.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain 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 X-Rspamd-Queue-Id: D219D4000E X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: ousnq9bx84fszijpsuyrd6i3athh6gyx X-HE-Tag: 1689594720-526087 X-HE-Meta: U2FsdGVkX19qILnl34bWeQ+UZZOJFjD3pq8gDkJt7XwyDUJC3GOXo/SjxmsUahkJcuwDWRg3l6jZ81OKx6D5tR1BsmOUpIogmw1ZPmB2cXBhnSSBnEvoH+snX/jis8dhnBjNa0sARn8JFlbM4bs7Y+QlPZp0Hu7NeShSCrfmsvUDxmRYivP4105lW0f2LT53hhBdsdKt3K9Rgt9NWtK+UdLFgdU0pfOU4vVP4h/ekSkg63AGYOkQURFucmlXTINSvGnil94zrjXZnez2o6zGoMnJlSQRPaHyQTwPenmoGcnBOP/2IDLYi8g5dV6rjJGEHKpIZGAOoYs0U53YByl52mhcGhGvbud3lVxdNwV+RLvivXRMa8Gbi3aY48CUx5Z5vlrrIY6FJN6YIXH8PR5cfjg2mFPCCbyWwE46HgnK8mxcKYDM4HxQ9mWCt/xUnaXiYuBCUuA6OHD2g0gZDco4RJ16hjva2PmQMBaWBl2zPrWf+O7vQJ4xhotDGHOttuEPAUp10K2GGY2r5jamFwIBuqu8rWJgsv0MFswbwRbiUWtkcQlKn4PM4bAyb7qmsiCM4oHIUyN6x/VRZG1yQJquioIQHCFNBMzs7Z6XfjzKEd/xRaqsN490Cz7mgq/8TwxoCDQcnjmaQlhseaPtuV/8rWBzDrmL72YviccaaY6qBSH4gEMiL8ULq7kh3ZGyVOkSIt0KpcMEIsShgaRXjZvvNTFHlnHSSGVWHuoXfWeeLeP7YSxW86VMPldEBgz96HZZYCjl8qoGEZsf1IwJrYidJZWEoPw6iFdT3ONwbcas5OH1ux7je53Y3QT+An998KdHjlSyoGhOdXQUg5VkUgIGAMcVn95SdWQdCuFbq7LVEjHp8HctZH8dS75aXmyxcyYTts8+Z0vocYBqV0bso4paMHMh2uM98U98VOb6zJsIIE4N8qfzvg6Hc+GbHj8orE/svHUL47okMyIYx/MFFNv rxZDkAFb M9tuc5/ApFRBHY9PIlKtxjDphU/Sewbn9XQjAAdSPVqWEl5ivtbVPAb6+Kc0rsrTMBzEpJt3dlnzXQj1CMQc5gsH+2ttHKuoFGJsHqmOOL0GCvqoGL01Ma4CXFJC3HYsig8h+IB4HzW2f/5M= 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 During our test, we found that kernel page table may be unexpectedly cleared with rodata off. The root cause is that the kernel page is initialized with pud size(1G block mapping) while offline is memory block size(MIN_MEMORY_BLOCK_SIZE 128M), eg, if 2G memory is hot-added, when offline a memory block, the call trace is shown below, offline_and_remove_memory try_remove_memory arch_remove_memory __remove_pgd_mapping unmap_hotplug_range unmap_hotplug_p4d_range unmap_hotplug_pud_range if (pud_sect(pud)) pud_clear(pudp); There is no issue for block mapping with pmd level(2M) because the memory block size is aligned with 2M. Commit f0b13ee23241 ("arm64/sparsemem: reduce SECTION_SIZE_BITS") reduces SECTION_SIZE_BITS from arm64, this make memory section size less than pud size possible. Since only hotadded memory can be removed for arm64 due to commit bbd6ec605c0f ("arm64/mm: Enable memory hot remove"), stop using pud size kernel page entry during memory hot join can fix this. Fixes: f0b13ee23241 ("arm64/sparsemem: reduce SECTION_SIZE_BITS") Signed-off-by: Ma Wupeng --- arch/arm64/mm/mmu.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c index 95d360805f8a..44c724ce4f70 100644 --- a/arch/arm64/mm/mmu.c +++ b/arch/arm64/mm/mmu.c @@ -44,6 +44,7 @@ #define NO_BLOCK_MAPPINGS BIT(0) #define NO_CONT_MAPPINGS BIT(1) #define NO_EXEC_MAPPINGS BIT(2) /* assumes FEAT_HPDS is not used */ +#define NO_PUD_MAPPINGS BIT(3) int idmap_t0sz __ro_after_init; @@ -344,7 +345,7 @@ static void alloc_init_pud(pgd_t *pgdp, unsigned long addr, unsigned long end, */ if (pud_sect_supported() && ((addr | next | phys) & ~PUD_MASK) == 0 && - (flags & NO_BLOCK_MAPPINGS) == 0) { + (flags & (NO_BLOCK_MAPPINGS | NO_PUD_MAPPINGS)) == 0) { pud_set_huge(pudp, phys, prot); /* @@ -1305,7 +1306,7 @@ struct range arch_get_mappable_range(void) int arch_add_memory(int nid, u64 start, u64 size, struct mhp_params *params) { - int ret, flags = NO_EXEC_MAPPINGS; + int ret, flags = NO_EXEC_MAPPINGS | NO_PUD_MAPPINGS; VM_BUG_ON(!mhp_range_allowed(start, size, true)); -- 2.25.1