From patchwork Thu Jan 11 13:55:46 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Tong Tiangen X-Patchwork-Id: 13517457 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 D2BECC47077 for ; Thu, 11 Jan 2024 13:56:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 70B696B00A0; Thu, 11 Jan 2024 08:56:06 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 694B06B00A1; Thu, 11 Jan 2024 08:56:06 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 50DB86B00A2; Thu, 11 Jan 2024 08:56:06 -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 3B0216B00A0 for ; Thu, 11 Jan 2024 08:56:06 -0500 (EST) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 12177A073F for ; Thu, 11 Jan 2024 13:56:06 +0000 (UTC) X-FDA: 81667179132.09.7E16978 Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by imf09.hostedemail.com (Postfix) with ESMTP id 730FE14002C for ; Thu, 11 Jan 2024 13:56:02 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=none; spf=pass (imf09.hostedemail.com: domain of tongtiangen@huawei.com designates 45.249.212.189 as permitted sender) smtp.mailfrom=tongtiangen@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1704981364; 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=T6WG9KUfVaGV9joS3Ux1kZYyTmtSO+B2hljD4HKF7dU=; b=PJj1K0C1TsR9p8Qky5zQtAfNPPBVGMJj6gTUTYbhpL5Fvh3StSFiRl4qZmMPj3dE56F0aR KDqlqHt/jGKyha1YDgKglZSoUkMXJ16m5bmz1AX/XsfNNv8g7QImvmMP2pDoOBhTbqG+H1 9YdfoyKhOICzx8Rq231vgS5pEJWD6HI= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1704981364; a=rsa-sha256; cv=none; b=wXRsqXy/Y7RVd+NgQbFF1oHTMQ1ERz7WY/nPfRt+uTYoSanAjfU8jL8HS34D/AX4ldLe3L ViMwOyYbE5k0QAlK5PILBNLwnRXkHqbKJcs77HHA2rioPT59AWXPWTH4CS1QGxLDMtXx1h n1KDFSy8suyh0DfLsw/l++Fa5KpQrF4= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=none; spf=pass (imf09.hostedemail.com: domain of tongtiangen@huawei.com designates 45.249.212.189 as permitted sender) smtp.mailfrom=tongtiangen@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com Received: from mail.maildlp.com (unknown [172.19.88.194]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4T9mQH0QMSzNkcv; Thu, 11 Jan 2024 21:55:19 +0800 (CST) Received: from kwepemm600017.china.huawei.com (unknown [7.193.23.234]) by mail.maildlp.com (Postfix) with ESMTPS id 02BA514011B; Thu, 11 Jan 2024 21:55:58 +0800 (CST) Received: from localhost.localdomain (10.175.112.125) by kwepemm600017.china.huawei.com (7.193.23.234) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Thu, 11 Jan 2024 21:55:56 +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 v4 1/3] x86/mce: remove redundant fixup type EX_TYPE_COPY Date: Thu, 11 Jan 2024 21:55:46 +0800 Message-ID: <20240111135548.3207437-2-tongtiangen@huawei.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240111135548.3207437-1-tongtiangen@huawei.com> References: <20240111135548.3207437-1-tongtiangen@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.112.125] X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To kwepemm600017.china.huawei.com (7.193.23.234) X-Rspamd-Queue-Id: 730FE14002C X-Rspam-User: X-Stat-Signature: ouigpj857x1sf5ksp74zid6c6x8846iy X-Rspamd-Server: rspam03 X-HE-Tag: 1704981362-850318 X-HE-Meta: U2FsdGVkX1+fIApbO3Xoq8Ia02QSMDl6QHUPrDQ547J8PLnhLhD9WbfgQtqVYUMJZGDD7xLpyITJshoiik2QXLgjWKCqAr1SOgeRTI5GOR4dI5mQwQGbGqB2Vf3zsEG1EtvkzzWDw3M5CvWnt0WZKkV1R8Jq1g8C8PWyOR5on4KPEnx0vtCpyauRnJQ+DMD8P0O7o2Me0SWzACiozxYQIYf0ILvraXBvg7Vdm1WvaamJ2G2rM63plMwZxv8yEqNFMZXmwfh3wS6oIX5Jp2hAW8RjGZxyyOGmBMh+DJqbO9mtv5u7y2ReDIWEXzaloJfbBzy46AcTHdS4RmItzs/x2MzkAhIqdWbFK9FH6e4XlZv9I3urA1hVl+yHyRWruuKCdcibJ9d/13mgSgXEKko7c7KxzeZvDxWBRqbKmpJIRBNc5aUoTCRRygQ0/gv4z+oCkHpHa+w3t5N8zXgf5+K/PLEg5rx0XPkQRbgHDwTr2sgYcGzcEQDXCBAth/ZbHwt6Q83DWC7ppS72OZybLSgQCPg+cCVR8YbvALp8cKEyFsugC0yCzPGzjTH0+ugDuf/xGDjYpUka0eNMMSLq5js6PqUIyyggbH3aFpHIpUuLEBIxSgMphVdOtqAdkrY0NVhTWebMMz3re1z4GK3u/z8BGkgtkzJVfIxqmsXWKg6PkREQmlbUSsTBTUOzm0EZacUAli1xY4pOy/wutW0FcnwmBlQlBu42l3f5g9h9B8ZuKdD8NoYJCbwt4arACIDatHRv+TtoojV5fuMCgcxbQm/Xc9e96pAmrQzcaNVo0FylsoLjTDHV6NGmb0eW0VI7rA7LCRH1skCc+U2poU6ENLdlxoL8L9IkbpIns7CX/VtH5JhG2vhYWWerPIsofCDvd8+PIB5BQPR7ni0iEpHka0naDqe5X9LDK51lf8dXh+43r+6r0dzOiGLkMZSC1GGMOaU2NJRhOKh/i35n0DmY5XI Tkhe/xIq 5ysxog0N2Nsa0jwybuOdjAiXOdj9GVyOfrzZ7A/75cC59z8a2H8yI0iQ9VWn+a6QvRRR7DZByRXmFTf+//h4UzuvC7RJZbf6F55rq9clPjQZsAt4HpyGU7Vkwu8uV7DMYLbP3KaoKqN3dIjPsbbCoF2Aj92VzwY2de+4GfR0QP0fB6WfodRvFYKtBaYgCDXygXvinVywL4ZjFeGA= 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 fe6312045042..787916ec1e12 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 Thu Jan 11 13:55:47 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tong Tiangen X-Patchwork-Id: 13517458 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 CF751C47258 for ; Thu, 11 Jan 2024 13:56:07 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4C1796B00A2; Thu, 11 Jan 2024 08:56:07 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 44CBF6B00A1; Thu, 11 Jan 2024 08:56:07 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 07AFD6B00A4; Thu, 11 Jan 2024 08:56:06 -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 E75186B00A1 for ; Thu, 11 Jan 2024 08:56:06 -0500 (EST) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id CF38DA095B for ; Thu, 11 Jan 2024 13:56:06 +0000 (UTC) X-FDA: 81667179132.29.CEB585E Received: from szxga08-in.huawei.com (szxga08-in.huawei.com [45.249.212.255]) by imf23.hostedemail.com (Postfix) with ESMTP id 2BCDF140003 for ; Thu, 11 Jan 2024 13:56:02 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=none; spf=pass (imf23.hostedemail.com: domain of tongtiangen@huawei.com designates 45.249.212.255 as permitted sender) smtp.mailfrom=tongtiangen@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1704981364; 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=l2zsVIk+1b7Atngi/VgaU2Rm1o1MWo/CA5ScH0V0f5E=; b=IiXAT1VcY4DaDFQAPjsTG/Qkr511Vq2W/ozuqS9TG7d3foz95ZNYKjkTCcibB2hj7riWdX YOYdZqF8heM9jd7rRA8wCbtUfSXeye711h+x0mOPp0+TXOs/DvUAbxeH7q+NcFPeiaEAtH XN48AWpGnRIcSVR6d8iPNraYlFKwN/I= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1704981364; a=rsa-sha256; cv=none; b=S7FBSsZ9rmSpuYp5Smr4JXNxwrVk9JkrcZqwSfOQWoXXmpKfR4X+yGNLgPeMLCLIjuE40t kbbK0qrrvspAKC2zb2VBc9DrU4/ODztVhMbQe/xWdkpNHFh2H/VfB3zYPWbQQiWZ7y0iEW DbKRX8H/dkNBB5sqHe58hjA6anY272Q= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=none; spf=pass (imf23.hostedemail.com: domain of tongtiangen@huawei.com designates 45.249.212.255 as permitted sender) smtp.mailfrom=tongtiangen@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com Received: from mail.maildlp.com (unknown [172.19.88.194]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4T9mQ92wXWz1Q7fB; Thu, 11 Jan 2024 21:55:13 +0800 (CST) Received: from kwepemm600017.china.huawei.com (unknown [7.193.23.234]) by mail.maildlp.com (Postfix) with ESMTPS id 3CAAD14011B; Thu, 11 Jan 2024 21:55:59 +0800 (CST) Received: from localhost.localdomain (10.175.112.125) by kwepemm600017.china.huawei.com (7.193.23.234) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Thu, 11 Jan 2024 21:55:57 +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 v4 2/3] x86/mce: rename MCE_IN_KERNEL_COPYIN to MCE_IN_KERNEL_COPY_MC Date: Thu, 11 Jan 2024 21:55:47 +0800 Message-ID: <20240111135548.3207437-3-tongtiangen@huawei.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240111135548.3207437-1-tongtiangen@huawei.com> References: <20240111135548.3207437-1-tongtiangen@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.112.125] X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To kwepemm600017.china.huawei.com (7.193.23.234) X-Rspamd-Queue-Id: 2BCDF140003 X-Rspam-User: X-Stat-Signature: ufssjnfgybmdt63jsz74yyjf3ui1esy1 X-Rspamd-Server: rspam03 X-HE-Tag: 1704981362-559530 X-HE-Meta: U2FsdGVkX1+vgcLc1/I2favZS4ARRG6T8NirHxLHfYWYo5Iq8upRPDOSZiFBzrGgHrxnN32EMwrfd6PpMmolESQvVLcclE5mSyGc2/gpuF79FrN0z5dr+B89PEgXmZiUoG8VHY+q4gs/h9y5CcebC+vf3BskZYYu/dZZLMryUOJsq3gcDt+4b/VFsWWLi5Opp0xFby9Ha0TLqYVP9PE/MI596xGF26h6wznGpTWsOoYR8BeORvRvsYknyV44YLDltzeEip0WX5asRJTMlj6jfYI5NnF1EPNLwzpBL426rilRKyFWfvmkodz/V5rAXuQ8TG6XA6DVTRko/wghRQgZ4hWsgtHlN+yKSLpmvEhs9gqHNLXJ0PkQNfUvIsxeK3l4uTnQZ5f3D6LuIdyAVlpXw5GDBAL0+shdfDJQGQNt0rMANIwqPDrjvqCvsZAehE5t8xcHtoiTXQlyHZc6tS6XFwaysx2RWbx4XkFIAp2x2tMXpYfSaoF8YvYcg53T26Lkt5kZoE/0V3A5pQZ04Q9twh7DKqZ6KTjuSF9JJrHVYCBiovau08IXlAYeAijiTlN32oE301CHiwfiyshpFMiVfhDXu63A54LFvrXGm6+7sin2cfMsWiq7n+MFCbyETW3bvkvL8bwjOPpVhoPk0qKkyvEe1o3O8UIjbQepmldH2LDQT6R/vHjJoamxfq9rehvoEQWVoOlkpgE1dk2efOml7B7yrB9CNtaYikMz8OiZwZrInse8uQU1Xg9iZify6T3Bafvc8dpdixT0KEiCfj76N/j8gKhm8Yjxu8hMFUcJ2j4cL3/oS0c/wj5Y7TeuECoa0A5S1HJvFqyTab+WZurW6YFO8O1rwRNHn2LYDm1dTn1+mHknFvb8bGfhF9+Kne60OGQPZpxea8ztZBAlozMBoA3I9GiM4XRGPGHKJjGkBvQf11OSFF06U3R4nkMGEybk1Aa73p3HqLxUKv2/Ds1 tYu+MtZx fW1hn0Z6uXnW57BNSmMrSqaOJSWMPf+n2dgzLwrSeZyJzcQvx566kjNWxc0IqVHIRRi2upa2NHx+e/Zx9JNx25gQbufrciKSoMBnx02T95v7U7LDScFZTSwYKXNye0QPxpYdBa73McnP7x0cvRWzrxymebkI8pImpgEgyQCDSy6Kc+NL/eYMuw0C+/MuL6aNpBtOa 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 2bfd0e3c62e4..bd1a31ed148b 100644 --- a/arch/x86/kernel/cpu/mce/core.c +++ b/arch/x86/kernel/cpu/mce/core.c @@ -1607,7 +1607,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 Thu Jan 11 13:55:48 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tong Tiangen X-Patchwork-Id: 13517459 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 4FF4FC47077 for ; Thu, 11 Jan 2024 13:56:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7E2426B00A1; Thu, 11 Jan 2024 08:56:07 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 75CAC6B00A5; Thu, 11 Jan 2024 08:56:07 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3156D6B00A3; Thu, 11 Jan 2024 08:56:07 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id EE5AF6B00A2 for ; Thu, 11 Jan 2024 08:56:06 -0500 (EST) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id CA99280C88 for ; Thu, 11 Jan 2024 13:56:06 +0000 (UTC) X-FDA: 81667179132.04.2591A65 Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by imf28.hostedemail.com (Postfix) with ESMTP id 2D810C0022 for ; Thu, 11 Jan 2024 13:56:03 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=none; spf=pass (imf28.hostedemail.com: domain of tongtiangen@huawei.com designates 45.249.212.189 as permitted sender) smtp.mailfrom=tongtiangen@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1704981365; 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=XKVffCLzV//oo/2yIDd4XvK33IiZmZFYlL1Wbukj5jw=; b=p1pBf1Jo2T26F4+XY6CnZNtGY5kPROnRnM+j7QNtzhMhanLRdeE0pcaDmJUVSJlIbNasSs XxA612TaxeGBV8AhrkXxq80W275zrFpZjjQr6SziHkFJUOAb1qeLHCBb/7/r8mDvSD+SZK Ou5XSEZ3sPDtrj2zlPdSkmmVq2AWE/s= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=none; spf=pass (imf28.hostedemail.com: domain of tongtiangen@huawei.com designates 45.249.212.189 as permitted sender) smtp.mailfrom=tongtiangen@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1704981365; a=rsa-sha256; cv=none; b=l19makuqrNuciSZsYe3Rvefs3Ysm5abYQ7kIpfVXurotJN4U+31Uq514dJ1Qrb0iAY4v0f EQWhYTvOwWi76GZxDv7v/AE0OG4tiCw3kp6wnuTmcc54l36Jpy23bDVKUwd8OjnBmqhm4W IyW7mc1zMZBiZ8kbrqtL3u1207lLYWQ= Received: from mail.maildlp.com (unknown [172.19.163.252]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4T9mQK3ZqxzNkn4; Thu, 11 Jan 2024 21:55:21 +0800 (CST) Received: from kwepemm600017.china.huawei.com (unknown [7.193.23.234]) by mail.maildlp.com (Postfix) with ESMTPS id 6A93B180077; Thu, 11 Jan 2024 21:56:00 +0800 (CST) Received: from localhost.localdomain (10.175.112.125) by kwepemm600017.china.huawei.com (7.193.23.234) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Thu, 11 Jan 2024 21:55:59 +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 v4 3/3] x86/mce: set MCE_IN_KERNEL_COPY_MC for DEFAULT_MCE_SAFE exception Date: Thu, 11 Jan 2024 21:55:48 +0800 Message-ID: <20240111135548.3207437-4-tongtiangen@huawei.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240111135548.3207437-1-tongtiangen@huawei.com> References: <20240111135548.3207437-1-tongtiangen@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.112.125] X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To kwepemm600017.china.huawei.com (7.193.23.234) X-Rspamd-Queue-Id: 2D810C0022 X-Rspam-User: X-Stat-Signature: m7wo9pu6ewc68cq1w96smr3cxjtar58m X-Rspamd-Server: rspam01 X-HE-Tag: 1704981363-125977 X-HE-Meta: U2FsdGVkX18Cg49P9EYxTx3ZqpkoS3qU7Rrnmqw1gfpGSz6iBktRYYS30AwroWAsurFWVANheY9S5MkcGCdDrePdqLXZz7lAOVQTLBdPR8/HBRxZ6AACRGslbojqleADVKly7Bibsy8qxLkY3HQL+5uCkMCm2V2IU6e1iS6u11Po/ctMLJQFG9FCH4cRmeTyMgxoE3ij4fWipUC8prlRWpO7baHW+S1CZ55jfa4SgXY+7Xc0ZtR4bleNglHQN1qwxawFkxew0eebBiq61I38M6s83NUJKe5jpFjrEdUl0yi3k/BKSy0MAZOGi4yolX5WFSbALdmoTqjri4Ni68nRX3W4+/XRnaiZhW2lgD6bkz4UxG4Upke39v1aeFCjMwSS38j+WmVdPKmQnEMAbesnmruszSg+5/Dd0aw0tvlj7b6teH4teMEltmyLx7XcTQicYXZVXF5ndkTwBmkaNm6e07A5RneiXIuiwl3cbDhXVG6/uFEXzHNL55Tamg/DYIzBQ7pIViOoSOQU0ta5jcoVas6I7QRiZeC+5h+OOWPHd4YGniWRzm2pcHQnSsKmFuN1UFwkOvMQHdQlKQ/nnRMkhumZaDBGIOTC+N7dENLHJBc7bzdoY9vNanVZkwFUbwF/+X2ZnRnblAMRHlbfkxh2SvwYDP1ODzXhKSVt5JarOX8ErFcTqA4H7qu6w6zG4NuR6fGhrJ19nOwk0ZiQsT5u7eM8DY0Mo10rY9T4FRdrupGHJB7LVppBDTerpKKGH/xIy6NOY3gL4+Pns65/Kwnea7hZVea4Rq0SireRLVoNLQKWpN0R2gpHWJxQULiz4V9jIxYOyXNYJyE1GbwUDVpYCirI01LU3uBnKwMzj1ZQDWyHY9bFnqiDbv/AfA1kvjcsi2Bf1ACH6nKs5wRdZl65Jmkv6LEq2J01ya2ImYjWFDBl3ycQWnP9V69MNyfNhAumM0/uDIoG5UR0bzcL3L1 VHZUaf2H EagC9QzoaE1/guET6P7xG9wYMqQOJEA6UYYm3p+XyHtzl5YJc1Yva+8IO2DABZawOpDTYeNpgKveG34ETRG0UvkMMYEgaKsrNEV5s1e4Ha+e3i7TMnVu0e9lJsKOrIZNymVZW7Zx9P8apA+AJDhwa4x7gLpWlkUBaxsRyWAhSgFclX2tL8kWTZ2yTcE4DL3qPnM8lrOvqxshK8iIPgxWHKN71s/ELKWwB12vqeKun6G3o6O2AVAGPCeumOQ== 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], 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()") 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 | 13 ++++--------- 3 files changed, 6 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 8c001819cf10..ba9d324ea1c6 100644 --- a/mm/ksm.c +++ b/mm/ksm.c @@ -3084,7 +3084,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 c66af4520958..33d8903ab2af 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -2843,10 +2843,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; } @@ -6176,10 +6174,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; } @@ -6196,10 +6192,9 @@ static int copy_subpage(unsigned long addr, int idx, void *arg) struct page *dst = nth_page(copy_arg->dst, idx); struct page *src = nth_page(copy_arg->src, idx); - if (copy_mc_user_highpage(dst, src, addr, copy_arg->vma)) { - memory_failure_queue(page_to_pfn(src), 0); + if (copy_mc_user_highpage(dst, src, addr, copy_arg->vma)) return -EHWPOISON; - } + return 0; }