From patchwork Sun Mar 5 06:51:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiaqi Yan X-Patchwork-Id: 13160066 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 E641DC6FA9E for ; Sun, 5 Mar 2023 06:51:23 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 42F7D6B0074; Sun, 5 Mar 2023 01:51:23 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 391CA6B0075; Sun, 5 Mar 2023 01:51:23 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2343D6B0078; Sun, 5 Mar 2023 01:51:23 -0500 (EST) 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 0F6586B0074 for ; Sun, 5 Mar 2023 01:51:23 -0500 (EST) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id D6038C08C2 for ; Sun, 5 Mar 2023 06:51:22 +0000 (UTC) X-FDA: 80533923204.30.4128348 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) by imf15.hostedemail.com (Postfix) with ESMTP id 1C367A0008 for ; Sun, 5 Mar 2023 06:51:20 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=kr2wZloU; spf=pass (imf15.hostedemail.com: domain of 36DsEZAgKCJcA91H9P1E7FF7C5.3FDC9ELO-DDBM13B.FI7@flex--jiaqiyan.bounces.google.com designates 209.85.214.202 as permitted sender) smtp.mailfrom=36DsEZAgKCJcA91H9P1E7FF7C5.3FDC9ELO-DDBM13B.FI7@flex--jiaqiyan.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1677999081; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=yElMEtS2werw5GTxuHkVYnDGm0sAxyHcBL9NAWkARek=; b=wx2LKDJBP1VjcJN44IdFc0qh1HMBYA6tMMrg3nhe3k1OMt1/arD4rCuwShdcxdRoOAxXlh 698H2krDe36GEfFtgkhqrj/F/drNEQNz8lMS6FWqosii2yiBodgTZleyCr+5DLbrCKIzQh c5q4vZwRXnmbR5bhXMxHLVwFGEIwdIc= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=kr2wZloU; spf=pass (imf15.hostedemail.com: domain of 36DsEZAgKCJcA91H9P1E7FF7C5.3FDC9ELO-DDBM13B.FI7@flex--jiaqiyan.bounces.google.com designates 209.85.214.202 as permitted sender) smtp.mailfrom=36DsEZAgKCJcA91H9P1E7FF7C5.3FDC9ELO-DDBM13B.FI7@flex--jiaqiyan.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1677999081; a=rsa-sha256; cv=none; b=bp8qn/cUME7wvvldHJO6pkXUvULyrCctkWJOFc4/erHs26KLCJWgZORJVFb1+jwfRQf/bz xxbSzH4OcVJeLuIiBxON1MQh1rS1O68ux5sx7ZdBBQySkej0xfT9hC9pqSTFSDz71JCb4u xq3ZdLCMZ1ziQfxe6JAt0s9w/pO9dK8= Received: by mail-pl1-f202.google.com with SMTP id w8-20020a170902a70800b0019e416eabcdso3830331plq.0 for ; Sat, 04 Mar 2023 22:51:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1677999080; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=yElMEtS2werw5GTxuHkVYnDGm0sAxyHcBL9NAWkARek=; b=kr2wZloUaKjwdTmUWl/VwJA2tHxokB17qqnLEjMNyR2cOOzsHQeKDxtc/fwKM5AlFz xpVYT/utamOy6LzLhGi3j7+HEz5FzW9sPLDhki/kIYRCiy+4/Ls4DFpEZLhs38l+mln5 EBDobUTRPsm5/ejFtLXbnHRw++oPVEuN5VPjlbuUTyO+93XxywuBZB2WoxhkJvknY+T3 GIyWZfuG2RUy8m183pg4ovsh5tpTfFEGhW7Sl5VE7ll6cpmcfZ4DcaN38yxj0QWb/G23 IkTf2I8RfMqB5o98ZcViqmmHmjHCpo/t6DyW/V0F/7E6stkSdewapFY/4aTd2Ja1krZV XjLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1677999080; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=yElMEtS2werw5GTxuHkVYnDGm0sAxyHcBL9NAWkARek=; b=a7N0oGaB+q3UvLcNPd+ytj+Rj+f2F7QNvIAWOgiSQWH5Q8SE8gAMDe8wxyK0n5KhGN M3XZ/y9pE5yLRmnR2epYlutPHuWrgkaqD+drI9Bleg+adLLIa472A1hfOl5YgzVd268M HulCKWhcnQDIH9OB0RWNhfzj1AyOei70jhOYbX5CK0yKU6nMetFpvhYHP6DIe4zzdID0 +/g7soWulLorVbbDIDIOJ6oRDRwf2JnojThMpkBRXT+K9HvJybrcllAJRrMNx+/xTZQ+ 0kuM2+D7obPQ8R0khkvJHBlCztGK3M7RNxI8duUmZ+7IojLwhQ126GWCTSOEhgxKtRVu 2z1g== X-Gm-Message-State: AO0yUKVjx+OE+LM7SAZmI6CJAF7TXPL9BO4ok0xHMoRjyKVF0dT43KZK puEqyzbJl7TCndahAjyYN0FdPsmxb+FFhw== X-Google-Smtp-Source: AK7set/RsY9qL4X/sU+9bp/skln0LQAOibwdkjzYTNsOkPsiW54+Mn/t3pfLMFIA3LKKPLvGeOvFY02pVy0bQQ== X-Received: from yjqkernel.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:1837]) (user=jiaqiyan job=sendgmr) by 2002:a62:8645:0:b0:5d9:27a5:619e with SMTP id x66-20020a628645000000b005d927a5619emr3003526pfd.4.1677999080145; Sat, 04 Mar 2023 22:51:20 -0800 (PST) Date: Sat, 4 Mar 2023 22:51:11 -0800 In-Reply-To: <20230305065112.1932255-1-jiaqiyan@google.com> Mime-Version: 1.0 References: <20230305065112.1932255-1-jiaqiyan@google.com> X-Mailer: git-send-email 2.40.0.rc0.216.gc4246ad0f0-goog Message-ID: <20230305065112.1932255-3-jiaqiyan@google.com> Subject: [PATCH v10 2/3] mm/hwpoison: introduce copy_mc_highpage From: Jiaqi Yan To: kirill.shutemov@linux.intel.com, kirill@shutemov.name, shy828301@gmail.com, tongtiangen@huawei.com, tony.luck@intel.com, akpm@linux-foundation.org Cc: naoya.horiguchi@nec.com, linmiaohe@huawei.com, jiaqiyan@google.com, linux-mm@kvack.org, osalvador@suse.de, wangkefeng.wang@huawei.com X-Rspam-User: X-Rspamd-Server: rspam03 X-Stat-Signature: cryuxofq84nm8uewqn3j7xyi4p9seykr X-Rspamd-Queue-Id: 1C367A0008 X-HE-Tag: 1677999080-722444 X-HE-Meta: U2FsdGVkX180mxBHPoOa+Yxq/Al1iym/FnwpyD3k/hzSeZ09tHasKudgci/dsI1f+dyHEii4aBKLSwGJX4696ZHVMlO6WR3QfD1ZpPACqL4Mi0azLMdpngi36pmBoqhGyYW+BgV+9RK+EooVjzODWiXWgzsmNAfhos/SFNqB044N44FyJW+v95u+QYS7FDE8dOBdL+L7d583o2wY4U1EOKv3AiftWUikIA3xHzGRsn0/XYF1nDEtLdseDZIE/aU+/zQQ3frCU7XuTChsWiNDlwZLZyD+HDqslomzDTApdz4fiuK4TWaaAH+alrRC95vMnUD82WOFeWG8zucEPKA7Sbea0xPYTMth1Rq7qwI3WCUw270TsNuxBPJZN91FTeFaNmRXpQKrruApDmFT6GriE3OJp3xGPMhCTDFesI6SflIGk52hDAUUfkaBg1F4HiNr4yrzz0R5bw4yuBpiN2sY7Dj9docw9YWXPETCSp6YDMSu1sNreZ6RrWb8w+gd+ZJ3d8Cg0sYijEUw/0wT7h+xOS9HsJzpMeVJ10PWckFhEonPzo1pfNn/UNYlNET1IdKMFLtcDzNlYRxmD02+PFpV0/7RAPJj+h2wV4r7DTc46YwtJoXXQgJCDW+azOSZ5cgzJk7eTvS7SxcvOwJwSTuUD10UMiJ8IO7eAtEIrcHnPH5nGxNIykRledP2lC2hPrmhDkC9e5vCOPkVEIOJkDzYOUyUFyl7i/pgfP5eHFPyJXsBjOfpHBVTO3sWEhXj8CsVW1vtnGvGxpPbBGTdJokXb+5gnPafgd4MavBOuxpjWL8KXkWSFWBh7gG4BoDqkMpWNFaDTM4WYfiHXgKZC8dVI9q/Jn0/1vq3wue1r5pmT9UP4/yQvk1mzf94Dt1GOwTRU4Lf3eEJWYk6PJA4DnSGLozw6Er/BbEhzkCgLnsSNW8KYPFsif/AzlZas5KJnMeJrwuBhe8mwP7S4fRDN/E JDEnzlFa RXr0qy54eO4AAs7v2Z1FY50A+9YxcpVL0GPU+ZQFKZ73NmfAWGcO2Ug//uwtcGNfBULnLAZ1Hjq9H0e2EMXUxHlZB0mRlAQWhRWY+H4iDy4+Hwy/4G6ioTN9wuFSo/frrk1QJooCxX1iOZtdasbNfKQKXFE3zOzZkMVq1gvGMm09/lZ0Q747bawgZek6QAusG35sybMit7uhXOXC6RnrZEWhj2qsLNDWgYptJvcqnk0vWP1fygaUT3bstmQ9fBwJqdrcwEUDIigh6jz17vxsjCgjcdBCusVd27VM9yTW2RRKPGKUCJB8T/Ro+3BRbABwxlH6l2IGJZ6PMJKxpgky8V3mjGTSaBkIuG2CErzZvFHCYF5Sm98gjVuusQtr/HGa3xjJ+U5yYpXXX2TQv2KG20dKDUrWYmGlKABUpNOSvW6kVWEayJWR7svQPf+NgBnTrP+K/mYNAScTQhWAJiesqP34kT7TR9ixrGARvOSxGAVDFNC5jS2FnYarJx6AyzVLTWKDAKet2HuZX6wUN+519XaNpRFLRXdkENMwbpMUCr6yCNze8fCG2FpPG4NfRBJSA7z+Dyb4XKEfakthkEZ5R7IfIB5iUGqL7qTSWRWdrJnP7t921/9/lJMIKFDPFpM8RrARKnT2HKqWFY77Ivne8e5xfLrCnti8eNiEOMYt4xsYeeORr4hH4B/DtEg== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000001, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Similar to how copy_mc_user_highpage is implemented for copy_user_highpage on #MC supported architecture, introduce the #MC handled version of copy_highpage. This helper has immediate usage when khugepaged wants to copy file-backed memory pages and tolerate #MC. Signed-off-by: Jiaqi Yan Reviewed-by: Yang Shi --- include/linux/highmem.h | 54 +++++++++++++++++++++++++++++++---------- 1 file changed, 41 insertions(+), 13 deletions(-) diff --git a/include/linux/highmem.h b/include/linux/highmem.h index 1128b7114931f..7cbecae39b3eb 100644 --- a/include/linux/highmem.h +++ b/include/linux/highmem.h @@ -315,7 +315,29 @@ static inline void copy_user_highpage(struct page *to, struct page *from, #endif +#ifndef __HAVE_ARCH_COPY_HIGHPAGE + +static inline void copy_highpage(struct page *to, struct page *from) +{ + char *vfrom, *vto; + + vfrom = kmap_local_page(from); + vto = kmap_local_page(to); + copy_page(vto, vfrom); + kmsan_copy_page_meta(to, from); + kunmap_local(vto); + kunmap_local(vfrom); +} + +#endif + #ifdef copy_mc_to_kernel +/* + * If architecture supports machine check exception handling, define the + * #MC versions of copy_user_highpage and copy_highpage. They copy a memory + * page with #MC in source page (@from) handled, and return the number + * of bytes not copied if there was a #MC, otherwise 0 for success. + */ static inline int copy_mc_user_highpage(struct page *to, struct page *from, unsigned long vaddr, struct vm_area_struct *vma) { @@ -332,29 +354,35 @@ static inline int copy_mc_user_highpage(struct page *to, struct page *from, return ret; } -#else -static inline int copy_mc_user_highpage(struct page *to, struct page *from, - unsigned long vaddr, struct vm_area_struct *vma) -{ - copy_user_highpage(to, from, vaddr, vma); - return 0; -} -#endif -#ifndef __HAVE_ARCH_COPY_HIGHPAGE - -static inline void copy_highpage(struct page *to, struct page *from) +static inline int copy_mc_highpage(struct page *to, struct page *from) { + unsigned long ret; char *vfrom, *vto; vfrom = kmap_local_page(from); vto = kmap_local_page(to); - copy_page(vto, vfrom); - kmsan_copy_page_meta(to, from); + ret = copy_mc_to_kernel(vto, vfrom, PAGE_SIZE); + if (!ret) + kmsan_copy_page_meta(to, from); kunmap_local(vto); kunmap_local(vfrom); + + return ret; +} +#else +static inline int copy_mc_user_highpage(struct page *to, struct page *from, + unsigned long vaddr, struct vm_area_struct *vma) +{ + copy_user_highpage(to, from, vaddr, vma); + return 0; } +static inline int copy_mc_highpage(struct page *to, struct page *from) +{ + copy_highpage(to, from); + return 0; +} #endif static inline void memcpy_page(struct page *dst_page, size_t dst_off,