From patchwork Mon Dec 18 08:23:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Tong Tiangen X-Patchwork-Id: 13496357 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 86012C35274 for ; Mon, 18 Dec 2023 08:24:26 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B53606B0087; Mon, 18 Dec 2023 03:24:25 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id ADB216B0088; Mon, 18 Dec 2023 03:24:25 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 92D536B0089; Mon, 18 Dec 2023 03:24:25 -0500 (EST) 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 8479D6B0087 for ; Mon, 18 Dec 2023 03:24:25 -0500 (EST) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 244CBA1A49 for ; Mon, 18 Dec 2023 08:24:25 +0000 (UTC) X-FDA: 81579252090.16.33B1E3B Received: from szxga08-in.huawei.com (szxga08-in.huawei.com [45.249.212.255]) by imf15.hostedemail.com (Postfix) with ESMTP id 1E737A0017 for ; Mon, 18 Dec 2023 08:24:21 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf15.hostedemail.com: domain of tongtiangen@huawei.com designates 45.249.212.255 as permitted sender) smtp.mailfrom=tongtiangen@huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1702887863; 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:in-reply-to:references:references; bh=rUA0KByKSj2M/ImPWOqT/QD3+/NhtHgDz1L0riih59w=; b=6zAS+6rB52jPFnv3Yr6DB/EARncC+dLyO9ZkwCazbBRT0vFp4LDXGySMS1IvpcOQaazRYy TnYc0Za8fyE6N1wt9St9dqbTVaX2I5y2aDv+gFIaN6aNmE7JC3U078Okmw+HKEOxXFhLg4 teDpwFvuYITRLE7GSgy6lWkUM23Kq4g= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf15.hostedemail.com: domain of tongtiangen@huawei.com designates 45.249.212.255 as permitted sender) smtp.mailfrom=tongtiangen@huawei.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1702887863; a=rsa-sha256; cv=none; b=QKY9JTxxvxxUKduvin5UvdGG75CpYaLesGPAmYn4R+M1HN/5LSeBYqQh/N/KSzbm05i4kl egCA0HpjU2wgUKhXveIFV76jUsw0bpv6zBsuVSZgtaI4/J76g/bmdRV/ypdsgMyt+WOhv2 QZ+pPWV3GxnBw7zbNXNaWo5rerCSDZU= Received: from mail.maildlp.com (unknown [172.19.88.105]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4SttC80jgpz1Q6sp; Mon, 18 Dec 2023 16:24:04 +0800 (CST) Received: from kwepemm000017.china.huawei.com (unknown [7.193.23.46]) by mail.maildlp.com (Postfix) with ESMTPS id 33FC9140120; Mon, 18 Dec 2023 16:24:18 +0800 (CST) Received: from localhost.localdomain (10.175.112.125) by kwepemm000017.china.huawei.com (7.193.23.46) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Mon, 18 Dec 2023 16:24:16 +0800 From: Tong Tiangen To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , , Dave Hansen , , "H. Peter Anvin" , Tony Luck , Andy Lutomirski , Peter Zijlstra , Andrew Morton , Naoya Horiguchi CC: , , , Tong Tiangen , Guohanjun Subject: [PATCH -next v3 1/3] x86/mce: remove redundant fixup type EX_TYPE_COPY Date: Mon, 18 Dec 2023 16:23:58 +0800 Message-ID: <20231218082400.2694698-2-tongtiangen@huawei.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231218082400.2694698-1-tongtiangen@huawei.com> References: <20231218082400.2694698-1-tongtiangen@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.112.125] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To kwepemm000017.china.huawei.com (7.193.23.46) X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 1E737A0017 X-Stat-Signature: pypxa3zz4i9wdbxqo8xcpffgmx3i373f X-HE-Tag: 1702887861-59183 X-HE-Meta: U2FsdGVkX1+XFpVYZlQ16/kR5QvJX4g+etpXFKRwKZ0mghSsprXX2QTU2d36kgpca5xr8xQlgm7QLtlKIUW/6FrcdkTYTJzcdNvfLM0kMnxr/5+zd29hJF9Pjg8KfbVqviipKC33SNwCVGzdlRZYwyYx1XfS0LcmM7sbTmrF0j1SPvB6LhHS1xYVw+c3gVWrkfpfJfS7gjlVvOx9AUZOXizlDEhIc6uiz118ipWvB8rh9vT7pGjNB/233gfR4HqZUW8kuTFgUw14NrQAAGQmMZISWmkAewuai57v84HYrYE5QbgoEnvchaPKlh5Ad4A60oYQyoQ7tw4UpXW/YOumGNSirKaK6ipi2rxzTH38rzUmMObLAwgZvBOJwryWV+x5rQPZSmio0hCNXQhNN2Du7Tr1JV9rELOOKMPevI/f8nCEoZ5eXA7VRTrt+JclFx1X6JOxgIMV/i0ptHDDcL25IAISOJ23GYnltRxU7vpwiBp2+HWeNVfLmncpLAF/9gUD/dXq1QVz9tlP5hWsqn4nhBMpIFyXdrffwfqdhEW7EKibDGHMKy+n5xDdlqRGWEqz2VEH2rz1XIv4nMmwI5M23yKgVGeF5ptPugYzNli32scPjzqS/u7wXOEpDtmJhC/YiPPeUPmMMun5ZxdpQJOOdJ/ge3f4BlVQO40rJOTBo5tKOcUDLht+MHAiwh3cwe7kke0ZWugKsGcQ8ZYtGeZP5e/JgJo+QwaOQVe65qmyEjIYV6ZPQNTOEuv1hhaO7m3ozJ1V3EFeiHbiWYzpnYiZP8JJR0TP5AZY9vQG/ciVJKl1PhpKR2vcxG3SEBHmtCbVooPm6MVPiJUncEXoMslDXD9jsJhoq0qXwAd83eTTGEVc8RiZtBZ4S9CpeScXyqfjruTxCch71AFgH+AS2iLpKOw1lO9Zdeq91oRInT8ED3gOv+zS+HZVv0gn5c6JywnZYIomhLagTty7ygi2Yyk hiNEP4P6 zpB5Ken1DfFhjNTBc9Vo0UzTF+kRb4zYp25ToYDYFjHb2ZCm5v6IJQOHmEpPAuyi1LRGER7Xumf2H1ykwEA7y8yPd5IDjeyqKUAYi/EPHFXM92lTWyI1tRsRXjmeAsOYxKi5Cg3QgGnem6x6mkCfsIWRyNwDZruo+W1QFmg7fFXZEgkxeKRGZTN4TrtGzJTmfy8x12JeZ9j5Tzl8= 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: List-Subscribe: List-Unsubscribe: In commit 034ff37d3407 ("x86: rewrite '__copy_user_nocache' function"), rewrited __copy_user_nocache() uses EX_TYPE_UACCESS instead of EX_TYPE_COPY,this change does not broken the MC safe copy for __copy_user_nocache(), but as a result, there's no place for EX_TYPE_COPY to use. Therefore, we remove the definition of EX_TYPE_COPY. Signed-off-by: Tong Tiangen --- arch/x86/include/asm/asm.h | 3 --- arch/x86/include/asm/extable_fixup_types.h | 23 +++++++++++----------- arch/x86/kernel/cpu/mce/severity.c | 1 - arch/x86/mm/extable.c | 9 --------- 4 files changed, 11 insertions(+), 25 deletions(-) diff --git a/arch/x86/include/asm/asm.h b/arch/x86/include/asm/asm.h index fbcfec4dc4cc..692409ea0c37 100644 --- a/arch/x86/include/asm/asm.h +++ b/arch/x86/include/asm/asm.h @@ -215,9 +215,6 @@ register unsigned long current_stack_pointer asm(_ASM_SP); #define _ASM_EXTABLE_UA(from, to) \ _ASM_EXTABLE_TYPE(from, to, EX_TYPE_UACCESS) -#define _ASM_EXTABLE_CPY(from, to) \ - _ASM_EXTABLE_TYPE(from, to, EX_TYPE_COPY) - #define _ASM_EXTABLE_FAULT(from, to) \ _ASM_EXTABLE_TYPE(from, to, EX_TYPE_FAULT) diff --git a/arch/x86/include/asm/extable_fixup_types.h b/arch/x86/include/asm/extable_fixup_types.h index 991e31cfde94..6126af55b85b 100644 --- a/arch/x86/include/asm/extable_fixup_types.h +++ b/arch/x86/include/asm/extable_fixup_types.h @@ -36,18 +36,17 @@ #define EX_TYPE_DEFAULT 1 #define EX_TYPE_FAULT 2 #define EX_TYPE_UACCESS 3 -#define EX_TYPE_COPY 4 -#define EX_TYPE_CLEAR_FS 5 -#define EX_TYPE_FPU_RESTORE 6 -#define EX_TYPE_BPF 7 -#define EX_TYPE_WRMSR 8 -#define EX_TYPE_RDMSR 9 -#define EX_TYPE_WRMSR_SAFE 10 /* reg := -EIO */ -#define EX_TYPE_RDMSR_SAFE 11 /* reg := -EIO */ -#define EX_TYPE_WRMSR_IN_MCE 12 -#define EX_TYPE_RDMSR_IN_MCE 13 -#define EX_TYPE_DEFAULT_MCE_SAFE 14 -#define EX_TYPE_FAULT_MCE_SAFE 15 +#define EX_TYPE_CLEAR_FS 4 +#define EX_TYPE_FPU_RESTORE 5 +#define EX_TYPE_BPF 6 +#define EX_TYPE_WRMSR 7 +#define EX_TYPE_RDMSR 8 +#define EX_TYPE_WRMSR_SAFE 9 /* reg := -EIO */ +#define EX_TYPE_RDMSR_SAFE 10 /* reg := -EIO */ +#define EX_TYPE_WRMSR_IN_MCE 11 +#define EX_TYPE_RDMSR_IN_MCE 12 +#define EX_TYPE_DEFAULT_MCE_SAFE 13 +#define EX_TYPE_FAULT_MCE_SAFE 14 #define EX_TYPE_POP_REG 16 /* sp += sizeof(long) */ #define EX_TYPE_POP_ZERO (EX_TYPE_POP_REG | EX_DATA_IMM(0)) diff --git a/arch/x86/kernel/cpu/mce/severity.c b/arch/x86/kernel/cpu/mce/severity.c index c4477162c07d..bca780fa5e57 100644 --- a/arch/x86/kernel/cpu/mce/severity.c +++ b/arch/x86/kernel/cpu/mce/severity.c @@ -290,7 +290,6 @@ static noinstr int error_context(struct mce *m, struct pt_regs *regs) switch (fixup_type) { case EX_TYPE_UACCESS: - case EX_TYPE_COPY: if (!copy_user) return IN_KERNEL; m->kflags |= MCE_IN_KERNEL_COPYIN; diff --git a/arch/x86/mm/extable.c b/arch/x86/mm/extable.c index 271dcb2deabc..2354c0156e51 100644 --- a/arch/x86/mm/extable.c +++ b/arch/x86/mm/extable.c @@ -163,13 +163,6 @@ static bool ex_handler_uaccess(const struct exception_table_entry *fixup, return ex_handler_default(fixup, regs); } -static bool ex_handler_copy(const struct exception_table_entry *fixup, - struct pt_regs *regs, int trapnr) -{ - WARN_ONCE(trapnr == X86_TRAP_GP, "General protection fault in user access. Non-canonical address?"); - return ex_handler_fault(fixup, regs, trapnr); -} - static bool ex_handler_msr(const struct exception_table_entry *fixup, struct pt_regs *regs, bool wrmsr, bool safe, int reg) { @@ -267,8 +260,6 @@ int fixup_exception(struct pt_regs *regs, int trapnr, unsigned long error_code, return ex_handler_fault(e, regs, trapnr); case EX_TYPE_UACCESS: return ex_handler_uaccess(e, regs, trapnr, fault_addr); - case EX_TYPE_COPY: - return ex_handler_copy(e, regs, trapnr); case EX_TYPE_CLEAR_FS: return ex_handler_clear_fs(e, regs); case EX_TYPE_FPU_RESTORE: From patchwork Mon Dec 18 08:23:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tong Tiangen X-Patchwork-Id: 13496358 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 D2AF4C46CD2 for ; Mon, 18 Dec 2023 08:24:28 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E39986B0088; Mon, 18 Dec 2023 03:24:26 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id DC1776B008A; Mon, 18 Dec 2023 03:24:26 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C8B3A6B008C; Mon, 18 Dec 2023 03:24:26 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id B98286B0088 for ; Mon, 18 Dec 2023 03:24:26 -0500 (EST) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 9804640954 for ; Mon, 18 Dec 2023 08:24:26 +0000 (UTC) X-FDA: 81579252132.13.4CF8327 Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by imf13.hostedemail.com (Postfix) with ESMTP id 0B3D320011 for ; Mon, 18 Dec 2023 08:24:22 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf13.hostedemail.com: domain of tongtiangen@huawei.com designates 45.249.212.188 as permitted sender) smtp.mailfrom=tongtiangen@huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1702887863; 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:in-reply-to:references:references; bh=RWelpyzW3rv3OqFIwOb3OXrWhQlJpUZfCmh4vKefgxw=; b=ulZqCN18o+uIMMXhcegljlVv/7KBNpI+0PT0s5VvNnZNL6lvH0Ngwm50daG2oj+5iy0jKe YwbvN2gA+lLACFr+IFQK+zel77t/3eYqrfYFqMG6CMw42NXrNt6nYk1hWo4yjaVd3w9Jay re8gY0bRe+5SxNN8p5rFGgn9W/iunhs= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf13.hostedemail.com: domain of tongtiangen@huawei.com designates 45.249.212.188 as permitted sender) smtp.mailfrom=tongtiangen@huawei.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1702887863; a=rsa-sha256; cv=none; b=D2SpAxMAAI7AFGjZHFacgS3GYBKc22QHuA5km6+++gwDmWtUQHmJXMS6ocHAFhpT4PF3sb dTryHw6vp4TELF0uPuTTWSOXiS1H9LwpujQqqeYN9aD3TQOKTe6az7/F+kNsNNb4wzYtOF w4QqBz/TbEmbDwtt4YM3HVaFKt5lfvE= Received: from mail.maildlp.com (unknown [172.19.162.254]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4SttCK0dlFzZdZ4; Mon, 18 Dec 2023 16:24:13 +0800 (CST) Received: from kwepemm000017.china.huawei.com (unknown [7.193.23.46]) by mail.maildlp.com (Postfix) with ESMTPS id 50A1518005A; Mon, 18 Dec 2023 16:24:19 +0800 (CST) Received: from localhost.localdomain (10.175.112.125) by kwepemm000017.china.huawei.com (7.193.23.46) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Mon, 18 Dec 2023 16:24:18 +0800 From: Tong Tiangen To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , , Dave Hansen , , "H. Peter Anvin" , Tony Luck , Andy Lutomirski , Peter Zijlstra , Andrew Morton , Naoya Horiguchi CC: , , , Tong Tiangen , Guohanjun Subject: [PATCH -next v3 2/3] x86/mce: rename MCE_IN_KERNEL_COPYIN to MCE_IN_KERNEL_COPY_MC Date: Mon, 18 Dec 2023 16:23:59 +0800 Message-ID: <20231218082400.2694698-3-tongtiangen@huawei.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231218082400.2694698-1-tongtiangen@huawei.com> References: <20231218082400.2694698-1-tongtiangen@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.112.125] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To kwepemm000017.china.huawei.com (7.193.23.46) X-Rspamd-Queue-Id: 0B3D320011 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: es8i9dgyn1jeswyciiswo6z8nkrz9hgp X-HE-Tag: 1702887862-898097 X-HE-Meta: U2FsdGVkX1/ILvIx4ZJPSRf0tEP3afJL+Ymd5tM5aUa9hKj/Lk3WFTbE1X0Pi8+pVB3StjLmyWa3cgJaQ6BbFpTUEhcWD98qetcBGYh4etOtv36uPhMO181hy1qaDtO1ScwyjyPbmeZs6TYB7vR/ZbllDVjgnZJFPL6A6HPnm8pyTt3FBSmoNu3vBQGEYKci9O9+8GsTFlYcmO9vMcjar2DnYRDsBFAyu8HYhT3hJ+njxkYp1secU2xtZA6GNnL/wO4N2IuVbKsr1C1mRsKPsQJ9sOtFT6zetDZIzuhCE2d9E4vaoPXoYaB0yEUiCYXjzkL0FEJnpOUAY+Rm2p9Gu1NKV3GXVrbpKdJ6KJ7/lEf3HkUDfBPGuVU1qn6LQUopGk04ZA/ZPn2S0rc9I/ur9U/yOTd9efA683jfTh2fplujyCjM9ijvPVWwiWwlwANDXALMk58HPzaZu3h9VMcWQbEm4mroMGgPebOFPREFyTFfn0sukRxyiFhFXo+RRvdHXErdzCxrNLt6fEH756rSvyjD68S+TULN9SYeRJ1nLqMnNJOQQ6m+uEfgXw0dp8q/UKpTwgZT9Imxj1ecLl97SBKb+7ZlaACE8+5Xe08aj97PO/S34TN9ruZ9HjGFAtYmlqf/A1IiHb1oCXp1RZgUwF8F+2JU864SjAifg8jLSYi46X0Zxe7M5vbjvmUzMsLldfYsuBcuGwxJJyjFmT3eoyAtjtPrtNMvapXqSK0F6QkvOPpBevOHwlVUDGlr1jvy6eTwhpKMkwsi7WxFwdzs9fH3i6COKePrIA6mMnHOvzU7ndHIwkd00A/xzMadqopMOV+ALwhYAn57m7HUoqmQKSRkSpIWL6MBtqOZpsvtRXTltcMPm3WQfSpNMxeZh9SAyAEZmJP06PTCDNH16aOAGH7rPzcisCVcTrnlxHVl9eU+qm2DYZKk7MM+3/RQOztFbXJmBouQTw0E0Gv8Dfe y6aX+vEz CcZpq0IM71ge53FSdLPwwq5KbclqWb8A7ZYgRpFiWPzwbdXMMnZwQBJhJufjzNtsy87ZokV1AQa8KE6l+LrZng53cAyyKNS9vPhe9YFJrFxzv+BwvvAxd2OqjSZ6FwciBbiCqPs0GKXmTDvxlC78mHZ04ZnpgGvJRsjE225QNsVyQHyG0C571zsHUioatcfalrUOK 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: List-Subscribe: List-Unsubscribe: In the x86 mce processing, macro MCE_IN_KERNEL_COPYIN is used to identify copied from user. do_machine_check() uses this flag to isolate posion page in memory_failure(). there's nothing wrong but we can expand the use of this macro. Currently, there are some kernel memory copy scenarios is also mc safe which use copy_mc_to_kernel() or copy_mc_user_highpage(). In these scenarios, posion pages need to be isolated too. Therefore, a macro similar to MCE_IN_KERNEL_COPYIN is required. For this reason, we can rename MCE_IN_KERNEL_COPYIN to MCE_IN_KERNEL_COPY_MC, the new macro can be applied to both user-to-kernel mc safe copy and kernel-to-kernel mc safe copy. Signed-off-by: Tong Tiangen --- arch/x86/include/asm/mce.h | 8 ++++---- arch/x86/kernel/cpu/mce/core.c | 2 +- arch/x86/kernel/cpu/mce/severity.c | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/arch/x86/include/asm/mce.h b/arch/x86/include/asm/mce.h index de3118305838..cb628ab2f32f 100644 --- a/arch/x86/include/asm/mce.h +++ b/arch/x86/include/asm/mce.h @@ -151,11 +151,11 @@ /* * Indicates an MCE that happened in kernel space while copying data - * from user. In this case fixup_exception() gets the kernel to the - * error exit for the copy function. Machine check handler can then - * treat it like a fault taken in user mode. + * from user or kernel. In this case fixup_exception() gets the kernel + * to the error exit for the copy function. Machine check handler can + * then treat it like a fault taken in user or kernel mode. */ -#define MCE_IN_KERNEL_COPYIN BIT_ULL(7) +#define MCE_IN_KERNEL_COPY_MC BIT_ULL(7) /* * This structure contains all data related to the MCE log. Also diff --git a/arch/x86/kernel/cpu/mce/core.c b/arch/x86/kernel/cpu/mce/core.c index faef7ceed746..dbea0c395c56 100644 --- a/arch/x86/kernel/cpu/mce/core.c +++ b/arch/x86/kernel/cpu/mce/core.c @@ -1597,7 +1597,7 @@ noinstr void do_machine_check(struct pt_regs *regs) mce_panic("Failed kernel mode recovery", &m, msg); } - if (m.kflags & MCE_IN_KERNEL_COPYIN) + if (m.kflags & MCE_IN_KERNEL_COPY_MC) queue_task_work(&m, msg, kill_me_never); } diff --git a/arch/x86/kernel/cpu/mce/severity.c b/arch/x86/kernel/cpu/mce/severity.c index bca780fa5e57..df67a7a13034 100644 --- a/arch/x86/kernel/cpu/mce/severity.c +++ b/arch/x86/kernel/cpu/mce/severity.c @@ -292,7 +292,7 @@ static noinstr int error_context(struct mce *m, struct pt_regs *regs) case EX_TYPE_UACCESS: if (!copy_user) return IN_KERNEL; - m->kflags |= MCE_IN_KERNEL_COPYIN; + m->kflags |= MCE_IN_KERNEL_COPY_MC; fallthrough; case EX_TYPE_FAULT_MCE_SAFE: From patchwork Mon Dec 18 08:24:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tong Tiangen X-Patchwork-Id: 13496359 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 7ECCFC35274 for ; Mon, 18 Dec 2023 08:24:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9A5E96B008C; Mon, 18 Dec 2023 03:24:29 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 9558E6B0092; Mon, 18 Dec 2023 03:24:29 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 75C336B0093; Mon, 18 Dec 2023 03:24:29 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 63BD76B008C for ; Mon, 18 Dec 2023 03:24:29 -0500 (EST) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 3B30E1A0902 for ; Mon, 18 Dec 2023 08:24:29 +0000 (UTC) X-FDA: 81579252258.27.9F87E4A Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by imf17.hostedemail.com (Postfix) with ESMTP id 8E19B40014 for ; Mon, 18 Dec 2023 08:24:24 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf17.hostedemail.com: domain of tongtiangen@huawei.com designates 45.249.212.187 as permitted sender) smtp.mailfrom=tongtiangen@huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1702887865; 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:in-reply-to:references:references; bh=spQpSb2gLdJjVUU6wbYun/NhnLMsjxlym2SxnhlO8c8=; b=taixLIB9n7yX0h3mEipqqN2Op9MqJVt9uXaFb2qF0HzvaHF3rTXS/36cPXeZV2EB15017a P2re26xMf3Cem3rz1flONMURV0h2lK7GUL4/fF7MIwRao5Qlbijjm3jImLKWovN2fuqRTR H+KrswzS2450QmgbApQCyxDiuUW1jXA= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf17.hostedemail.com: domain of tongtiangen@huawei.com designates 45.249.212.187 as permitted sender) smtp.mailfrom=tongtiangen@huawei.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1702887865; a=rsa-sha256; cv=none; b=E6htzH3CUBkVgn/BfCGaaPx/yL144JbUZ9tr14WErqPGtpXh87L6n+P27DH6I9X95+eRBi zL+fwpWiGvJ1c7Y9Rh9b823Q1Rab/5hJIksiF7GHA47xhdktqKW9vzri/bM0kxypxtg/kV o4/RySVm/tKagjjY7yhGkCoC5Hf78Qs= Received: from mail.maildlp.com (unknown [172.19.88.105]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4SttBS22vKzYspP; Mon, 18 Dec 2023 16:23:28 +0800 (CST) Received: from kwepemm000017.china.huawei.com (unknown [7.193.23.46]) by mail.maildlp.com (Postfix) with ESMTPS id 6CEDA140120; Mon, 18 Dec 2023 16:24:20 +0800 (CST) Received: from localhost.localdomain (10.175.112.125) by kwepemm000017.china.huawei.com (7.193.23.46) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Mon, 18 Dec 2023 16:24:19 +0800 From: Tong Tiangen To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , , Dave Hansen , , "H. Peter Anvin" , Tony Luck , Andy Lutomirski , Peter Zijlstra , Andrew Morton , Naoya Horiguchi CC: , , , Tong Tiangen , Guohanjun Subject: [PATCH -next v3 3/3] x86/mce: set MCE_IN_KERNEL_COPY_MC for DEFAULT_MCE_SAFE exception Date: Mon, 18 Dec 2023 16:24:00 +0800 Message-ID: <20231218082400.2694698-4-tongtiangen@huawei.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231218082400.2694698-1-tongtiangen@huawei.com> References: <20231218082400.2694698-1-tongtiangen@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.112.125] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To kwepemm000017.china.huawei.com (7.193.23.46) X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 8E19B40014 X-Stat-Signature: 7wqfgoyutdcfnydwi3r1y4d6sd85184d X-HE-Tag: 1702887864-360918 X-HE-Meta: U2FsdGVkX1/w+ByoOpj8RORhpps2kHwQKVXcFt/cIBzzXOXqfsXi/wvOJc7y/CHyGK1/WB5EEmo+U52URQmf9YGLonwfcCTp/InZ5fycPAxYEaNBZlYXwJXanCwWFJWtbveaduydkLG9APkN2VGwM1m/XVd7UIkodvuS1kI6xW5FM1nOIz64xtDL/uQcXuMGKS0JERCuLIoTWx9TiOlkPFsVL13Lnlzm528AC1Pi8xZIJdAfbK/3vzxf5UauMlITQDrXWqPWSENLL8438njs4C+x+U2Ow0P5aykasmJ5Qb8Z12b9WIRQGLjhb8ZX+/BulnYCn1Js1P6TOXcNT3zoVo9eDp/zX2uONi33MSTmRCqCwcDj+frT2quGDFPsr+sRrrGDGzh3HBlooqqfVLqshEUOB0wk2BURP/CA2ufL4XCQRt/1AlUCyFcNyPu0D8BsjFlW1ee8aNpZqR0OHNewLwBxFhr3Z9Gg20hSJhS4KbFhZnRmaSxr/1D6nH9dbbBQCbYdOFTagIX/6ZN1bYC+BDITwdrNstw7bwViTNbfl7ZFtTbmqF5WDFRj0PCyZnu3GNzPbpkwuaU4DI9gmnxqVOe6l0/5ckWBewCQ/DakzEmZy3W9bS1R2+2XHGykP8AkWMlE8JCmO2GSk+HHluU/RHuRKzhIFlF2H1lvfL4aF3xqPr6TWiKSHDbB8j+BeEuI6QZvVKBCwlP9VEkUdNGimhO/d6fmLWmxF9vPlSnE6Zo22RFAiRNjIbV3NoSplqOOmZe4KXMX8MoViorsFjrvECuhLjMk6NpgK26XAjwfdjR5ukjeAKvzuIrrVm7SWnJLXEk8Ecu1K6VI4DH8JC7uSh3I0fIfQ269LtLnwjq7Ti4jnfnTtMOg8ID9r6MJavIROpRm6Wjpmp2IKuIj8inBJAMun8ZWzLsyVS8A2+yw4RqK9b3JFwfoSYJnmnCOYz8CFTOT1SRlHzvxl/UD8ph zW61+rQi SqRbNKUzXFkixO+nxMf/2j3vVuD0wMGGyt9KS6bPiC/k8axd3funpwAZyyqbg194z+bFMY03zO/N/6MOYMuiKf5QLvil/MwvJbRl5XVYgjsm794avjum/BzR4ykBDnvuYNpkBvDs2IsW/0VxSB6C/0TcyoWV7x9uy6aQJAuq+953eRd5Zh6wQdjA54x/7c8now7xGQkI2tf26vy8gD5MrJ+gqQlkH09PS5DzeKcEMBxeWF0AobkOAfEg5J4Mnd0kD3IMPIEigvuOvLQU= 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: List-Subscribe: List-Unsubscribe: From: Kefeng Wang If an MCE has happened in kernel space and the kernel can recover, mce.kflags MCE_IN_KERNEL_RECOV will set in error_context(). With the setting of MCE_IN_KERNEL_RECOV, the MCE is handled in do_machine_check(). But due to lack of MCE_IN_KERNEL_COPY_MC, although the kernel won't panic, the corrupted page don't be isolated, new one maybe consume it again, which is not what we expected. In order to avoid above issue, some hwpoison recover process[1][2][3][4], memory_failure_queue() is called to cope with such unhandled corrupted pages, also there are some other already existed MC-safe copy scenarios, eg, nvdimm, dm-writecache, dax, which don't isolate corrupted pages. The best way to fix them is set MCE_IN_KERNEL_COPY_MC for MC-Safe Copy, then let the core do_machine_check() to isolate corrupted page instead of doing it one-by-one. EX_TYPE_FAULT_MCE_SAFE is used for the FPU. Here, we do not touch the logic of FPU. We only modify the logic of EX_TYPE_DEFAULT_MCE_SAFE which is used in the scenarios described above. [1] commit d302c2398ba2 ("mm, hwpoison: when copy-on-write hits poison, take page offline") [2] commit 1cb9dc4b475c ("mm: hwpoison: support recovery from HugePage copy-on-write faults") [3] commit 6b970599e807 ("mm: hwpoison: support recovery from ksm_might_need_to_copy()") [4] commit 1cb9dc4b475c ("mm: hwpoison: support recovery from HugePage copy-on-write faults") Reviewed-by: Naoya Horiguchi Reviewed-by: Tony Luck Signed-off-by: Kefeng Wang Signed-off-by: Tong Tiangen --- arch/x86/kernel/cpu/mce/severity.c | 4 ++-- mm/ksm.c | 1 - mm/memory.c | 12 +++--------- 3 files changed, 5 insertions(+), 12 deletions(-) diff --git a/arch/x86/kernel/cpu/mce/severity.c b/arch/x86/kernel/cpu/mce/severity.c index df67a7a13034..b4b1d028cbb3 100644 --- a/arch/x86/kernel/cpu/mce/severity.c +++ b/arch/x86/kernel/cpu/mce/severity.c @@ -292,11 +292,11 @@ static noinstr int error_context(struct mce *m, struct pt_regs *regs) case EX_TYPE_UACCESS: if (!copy_user) return IN_KERNEL; + fallthrough; + case EX_TYPE_DEFAULT_MCE_SAFE: m->kflags |= MCE_IN_KERNEL_COPY_MC; fallthrough; - case EX_TYPE_FAULT_MCE_SAFE: - case EX_TYPE_DEFAULT_MCE_SAFE: m->kflags |= MCE_IN_KERNEL_RECOV; return IN_KERNEL_RECOV; diff --git a/mm/ksm.c b/mm/ksm.c index ae05fb438ac5..01e3a7ef1b9d 100644 --- a/mm/ksm.c +++ b/mm/ksm.c @@ -3075,7 +3075,6 @@ struct folio *ksm_might_need_to_copy(struct folio *folio, if (copy_mc_user_highpage(folio_page(new_folio, 0), page, addr, vma)) { folio_put(new_folio); - memory_failure_queue(folio_pfn(folio), 0); return ERR_PTR(-EHWPOISON); } folio_set_dirty(new_folio); diff --git a/mm/memory.c b/mm/memory.c index 809746555827..9f0d875b1d3f 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -2836,10 +2836,8 @@ static inline int __wp_page_copy_user(struct page *dst, struct page *src, unsigned long addr = vmf->address; if (likely(src)) { - if (copy_mc_user_highpage(dst, src, addr, vma)) { - memory_failure_queue(page_to_pfn(src), 0); + if (copy_mc_user_highpage(dst, src, addr, vma)) return -EHWPOISON; - } return 0; } @@ -6168,10 +6166,8 @@ static int copy_user_gigantic_page(struct folio *dst, struct folio *src, cond_resched(); if (copy_mc_user_highpage(dst_page, src_page, - addr + i*PAGE_SIZE, vma)) { - memory_failure_queue(page_to_pfn(src_page), 0); + addr + i*PAGE_SIZE, vma)) return -EHWPOISON; - } } return 0; } @@ -6187,10 +6183,8 @@ static int copy_subpage(unsigned long addr, int idx, void *arg) struct copy_subpage_arg *copy_arg = arg; if (copy_mc_user_highpage(copy_arg->dst + idx, copy_arg->src + idx, - addr, copy_arg->vma)) { - memory_failure_queue(page_to_pfn(copy_arg->src + idx), 0); + addr, copy_arg->vma)) return -EHWPOISON; - } return 0; }