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 80A12C761A6 for ; Mon, 27 Mar 2023 21:16:02 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 21728900006; Mon, 27 Mar 2023 17:16:02 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 154F3900002; Mon, 27 Mar 2023 17:16:02 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id F3401900006; Mon, 27 Mar 2023 17:16:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id E59EF900002 for ; Mon, 27 Mar 2023 17:16:01 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id B5DCB80878 for ; Mon, 27 Mar 2023 21:16:01 +0000 (UTC) X-FDA: 80615935722.14.AC2DCBC Received: from mail-yb1-f202.google.com (mail-yb1-f202.google.com [209.85.219.202]) by imf11.hostedemail.com (Postfix) with ESMTP id D92BE4000C for ; Mon, 27 Mar 2023 21:15:59 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=Y4FmrDl2; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf11.hostedemail.com: domain of 3jwciZAgKCE4zyq6yEq3w44w1u.s421y3AD-220Bqs0.47w@flex--jiaqiyan.bounces.google.com designates 209.85.219.202 as permitted sender) smtp.mailfrom=3jwciZAgKCE4zyq6yEq3w44w1u.s421y3AD-220Bqs0.47w@flex--jiaqiyan.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1679951759; 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=h2MviYegIfxUChJ7qdoz4n2fEXetu9024Go8q9W59mM=; b=G7dEMkCnswoqArUXTNiIMLMbhqkL/LaFfEIKWJbeovDdPaOVSa8Na2OYc068mPaguGFVhw dG+Kszgtz5OycBuOT0SZ32K3Jrm/3uho5soUmkklGJk9kFFMRMhox6vdDtvbFCV4uAw/MI QJKqfFlHmFJC+WmKJVy56L3jVyDmJK4= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=Y4FmrDl2; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf11.hostedemail.com: domain of 3jwciZAgKCE4zyq6yEq3w44w1u.s421y3AD-220Bqs0.47w@flex--jiaqiyan.bounces.google.com designates 209.85.219.202 as permitted sender) smtp.mailfrom=3jwciZAgKCE4zyq6yEq3w44w1u.s421y3AD-220Bqs0.47w@flex--jiaqiyan.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1679951759; a=rsa-sha256; cv=none; b=PLX/Ny1zxxydSq48leXg3hm8RwRb/SCoiuj2MZteWIo9ov/FVNGWJX8FMrrl94ap82RZd+ 1eDDB/wgTF1aJE0vL+Q2rQ0vu6xSuE73Yh3Itk3DZSuK7Ldb7ZrtEUCtCPvn7MkkdWLwQT 6zv9SUY9hoZR9M0WKT3rvf3b0IPZGK4= Received: by mail-yb1-f202.google.com with SMTP id 204-20020a250fd5000000b00b6d6655dc35so9919294ybp.6 for ; Mon, 27 Mar 2023 14:15:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1679951759; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=h2MviYegIfxUChJ7qdoz4n2fEXetu9024Go8q9W59mM=; b=Y4FmrDl2OSVHfcKYRSiKQbvPj/0fdyQhs5fGoGQvI21fcmILo0hfEuJgLw7sJNZYvS v11Iq6Z+Pe2pmbxWNiXdGiawVWGdQsRVKBEDGW7NGVaPq9bodOmlxATHFaK3jlsMhkdi xVVA919sE/B+SEMTsNZtP4mhKxCGhmemmIEJlcyVhNOQhE7fbdXtZs0KkFrFCMxN0K/X YJT7ZYnCL/iD3MwKdm45/7/reY/bl7arSPP33NCC9tAzbal+KWSbd+/arXC/rVG34jOp Ox26m7WQPSJrPXhDsPVFeHpY8Rmj8aYPmCrQjA4z4QYSCVFuxNoT9qVXfFhu9zdiu6Jo Gmdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679951759; 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=h2MviYegIfxUChJ7qdoz4n2fEXetu9024Go8q9W59mM=; b=R7So6s99KhktDckcgdWl4kl9SHwDHLaWlVeb5K9+GovwO20JGWJA6zLKRjlr0smnvF JcTL7POQuk4rJyXTYKS9XR4UDMkFbJ8XHnnojG/+K/Oq8nB7CUaXErMR+Up7zNwRFk36 E/LbUw2ZM6sJM9btdm2rlKJmIVmd14raOAIamdecrccf9Zc6vkyppKptd64pjpyvJh24 8CYS2CYQn5O6r0CkSFILjJaxBCdLbnlp9bYuFRKblu4D4xH73NnaNzRbITN5C03+W1Ns N1DULENozDttX/YecIQcvObDMCSnsDdsoShIqL1nzlJEVfFFYa/SlANYoN4RACxvbNq9 sO1g== X-Gm-Message-State: AAQBX9dPKrx34OP1SoKCaMYBAA2htLLNSqrzjdJ/TKkT1LRZ9IJd1405 Yy7Qg+aWHHQgdxKRmhon3kWXrwEUy9osSg== X-Google-Smtp-Source: AKy350adRLEahVa6I3F3rcYSbpMLjqEIosLNJllOLsKEYp4EZwPvVJrIcsmkKsdv2qMbXMpva65HopDiWKAT0Q== X-Received: from yjqkernel.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:1837]) (user=jiaqiyan job=sendgmr) by 2002:a05:6902:70d:b0:b4c:9333:2a1 with SMTP id k13-20020a056902070d00b00b4c933302a1mr8311262ybt.10.1679951759017; Mon, 27 Mar 2023 14:15:59 -0700 (PDT) Date: Mon, 27 Mar 2023 14:15:47 -0700 In-Reply-To: <20230327211548.462509-1-jiaqiyan@google.com> Mime-Version: 1.0 References: <20230327211548.462509-1-jiaqiyan@google.com> X-Mailer: git-send-email 2.40.0.348.gf938b09366-goog Message-ID: <20230327211548.462509-3-jiaqiyan@google.com> Subject: [PATCH v11 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 Cc: naoya.horiguchi@nec.com, linmiaohe@huawei.com, jiaqiyan@google.com, linux-mm@kvack.org, akpm@linux-foundation.org, osalvador@suse.de, wangkefeng.wang@huawei.com, stevensd@chromium.org, hughd@google.com Content-Type: text/plain; charset="UTF-8" X-Rspam-User: X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: D92BE4000C X-Stat-Signature: bcfnc1nfya3mbpy39j1m1ek4uauajynd X-HE-Tag: 1679951759-836298 X-HE-Meta: U2FsdGVkX197cddPsj+VSB85bJmGmyy6/ZtxMxmLgSkgSswYyRqk3M5vvw1DiSpWG8vjmCSkoO89eemTnfTD20tq2BNzsqq4TYSBl8GfDrLRIt03+itHxYrO2ZWNbLFCRBeQBIwbxLY9m5Sv5IXGPIQqETRgu7iveyDXz5rlo5dDCTZhf3vDrwrLfhSTSj4Dd7C1DdNRxF3RhCzUDSFPHVmgzokNPyBU8+7CSYjLHO+SGPhSRde8SjgLyF/s13wVYyQe+u6wkgRje933RwyCz9aMrun3zWAMGqba4JWjyFRPAKboKRDffkQU7t8SwK6eYc8mRddWVBOxQ7oqAsCb4Cx9EWGE85CLxejDQJ05CoEoBSVEC531ZFAb7YJRZHpPlzUB+iFimtdlRM1fzLtJsjJ3/3AMn4HyRt5vBfbqSfMq0HB8EVb6wKFY2KcccV/Av7dknjyCPis+iahEOY/Io0yM377A7HRATXlYxuB86FCKsXxb2ufB+irOFKo0CsA+9Z2hUoxb1vSuiqG74dQgPowSY92stwZFuMQ3lQhHRDj5OIiCceoRJ5DD8UK8iqTYV2HDEKVZ6tEio5Dw/y5TIAcZbrQB434lKwCcaVPoZJq++MCRJEJoY+xSx88pXmTLjyOpxzdbf6YCFRVUUdK7f5duo2jpMQNu2Oc60A4jvx1ymxcEiE/xiNMCoets3JAee6fthQp0LAOJwyRI9iiolabbfbFTzbUPO9yCYnugUMHMVKk6atPlI0vW/LmqN6zpDo/kYlYuV0JDSEc1rzt01plx4FYPUojU3thhrtW9TyNzoVwNOKK9cq32DrpwMcwtmCJQaQ5NMzMQScfYfYSi81Cj/WSdfCGavslLJmrH0GF9RxZM3ucNXSv6XTxhX9kHZcmiB9VzUvBSKCbFVMBMnlMISAVvYvQSLLZTq0+T/C/DxPauPJUHZv6J6B88dCAD+Nzp/3FdfGo0BCp5eI0 Xv/ic9wn a5+gBJ9K3ulJgmq6V3X7eGcjD3913HKs1ElY12VOQrC4D89XAFH6hFNa0lgsJmYVXSe+u2KfFo5KRG9ieVM0E6uB/iebfNkhsmy9+MslnzTVn/hq3k54uRLbpOtwZD9F6JV7tFzminZCnEqVyWhJ93E/Xdvt4YDcw4iux3+W5i1zZSnpOtcfEDlGH1LV1M3z8CO+LTiYGFymJyavktIOxoGQ5lxP3xNEYMVna4t6G4mxjbD78/W8Z6Qehd1KERUHf0ElXchurqLru/mOXr8IWdcDN92Ek46wQYq/NxOjxSgK4kx0DaKNeeT4g2xTq87HepFlUsSYapMm7OUGh5W/MvQbhOvtuxUFjoWjkif+ENdAjPjP5HCSjr2osUvva4TEDFeGeB4UCTCOueO8g69A2reIZSx79X/meYl7mzIrlLk7RGJ+NJ9VxSnOnxarLj/5bZ2ipziA2nG/lGJc4RAsUereB3SWA1IIevuzQC4aoei3/DaFENbDJYIBSt1/AFasr4QSWzM6a2qp7yQVVa5RLTK4PoNi5PG0Gtrv4vT6TbnM28IuYaILWHYB4ugAeZTSFRYgFNkkg/1vRtfCFfq8pSqS9KcwHuEglIJQwfZGbj4cUf5MP/plLkb7FE8zO0VElcjwVo7Y7kNvB+rYwDDt8UQW+S5oyEdo6cyo16rALN/Y5f73gMGzIm6ALKQ== 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: 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 --- 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 9c7cdaa3de8cd..4de1dbcd3ef64 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, -- 2.40.0.348.gf938b09366-goog