From patchwork Wed May 17 16:09:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiaqi Yan X-Patchwork-Id: 13245279 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 90FB4C77B75 for ; Wed, 17 May 2023 16:10:41 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2C94B900006; Wed, 17 May 2023 12:10:41 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2793D900003; Wed, 17 May 2023 12:10:41 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 13FBA900006; Wed, 17 May 2023 12:10:41 -0400 (EDT) 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 04E08900003 for ; Wed, 17 May 2023 12:10:41 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id BA8E61C6D09 for ; Wed, 17 May 2023 16:10:40 +0000 (UTC) X-FDA: 80800235040.29.B4B2533 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) by imf05.hostedemail.com (Postfix) with ESMTP id B54EB10001E for ; Wed, 17 May 2023 16:10:02 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b="YE1b/zym"; spf=pass (imf05.hostedemail.com: domain of 3WfxkZAgKCBAzyq6yEq3w44w1u.s421y3AD-220Bqs0.47w@flex--jiaqiyan.bounces.google.com designates 209.85.214.201 as permitted sender) smtp.mailfrom=3WfxkZAgKCBAzyq6yEq3w44w1u.s421y3AD-220Bqs0.47w@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=1684339802; 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=woRAdaWYV8FD8vab19hJA4MPyBeuK73rImQoSJfr/I0=; b=xGP54tzHfJehhtJEG7BhV5cEXk47o3uzDoZOCDBG2skSw0VeR7uqSJfazMA++bPMYFOrx7 OkfGVlWtjjzq6qFJuS+YO9xjC0fY9Saa7D3ifxpHIqCGPqKhRik2vtO6zvZ062E5m/e9Q7 kMFRWzKBqlxgBA98HNKvLAa2BLLd2z0= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1684339802; a=rsa-sha256; cv=none; b=nrP6z2LsRFDMqoRnFNO8uVgixU40l1Oscl2rqt8wGOJhE3l3OcfqECxGq+H068frvvURnN l4Efy1+Sgq5BJvJccf3kJVOnBDbJT6csxnSdDjm84e4Ed8VcfhVyYrudQvyiVdT7R00f5f vzC7Kr8KFK/tfzD7T/5j8GGCvlN6zx4= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b="YE1b/zym"; spf=pass (imf05.hostedemail.com: domain of 3WfxkZAgKCBAzyq6yEq3w44w1u.s421y3AD-220Bqs0.47w@flex--jiaqiyan.bounces.google.com designates 209.85.214.201 as permitted sender) smtp.mailfrom=3WfxkZAgKCBAzyq6yEq3w44w1u.s421y3AD-220Bqs0.47w@flex--jiaqiyan.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-1ae5a30a9c4so964725ad.1 for ; Wed, 17 May 2023 09:10:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1684339801; x=1686931801; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=woRAdaWYV8FD8vab19hJA4MPyBeuK73rImQoSJfr/I0=; b=YE1b/zymZ9vc5qJrU2yZ6Y6Sk4upJCBRZPNMxGSUkSJ4NmR9re5sc7FtxyFCA6op5Z NYFItdPqItmJDGSzZeWAH3tLZk1Wm8Afz5r3LdakqUg7OhhCWIIdGn7UMn0FZjneF7a+ bisIrHgG+Aut0UuT0TMLzqNQqD7aRu51rTrV0uDZzw1l+caeFdr0GilMHPWzBABPv15M X4eJsAFnhsiuhrdvQNPjyZTVUft46X+7oX5ruBdVoJ1jwWqEudjOGdVLWk0A5g6E9K6h emxl51IemdopSKTESt1Ud6k+QmEevHfSkIuOBN+uVG3cweipz2hw8QLMUNEJwvHVbkK9 kVdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684339801; x=1686931801; 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=woRAdaWYV8FD8vab19hJA4MPyBeuK73rImQoSJfr/I0=; b=RgeM88BFRuzh7ecsGXnbFcm+ufPaPNzPugn4eHefaIWG5C7IZFpPFkoigOwEoXfSC3 aXzWNqLu53nt5ioLe57nTwLP+tjjZMsvn/KTT9MZpwJskdDicxW3JEinG03/MOuxnBBa TVcaoN8t3deS8Z+ogRKbNkxouN1lDhPHtNI32PysSAKtVidzSl+oxEQ0bcHqjr9ZK64U UUbVgn8py8uKDNRkIJK+2yAL2lGsbaDrJXppQeqkFJ5YNPidF3IO82vxijRwKrepKQ06 YtgbsSTfWDA8Zrrg4W/5m2POAk+fFuv7MxqYXnG8donqaHLXuXmYLFmAVoKRzPySRUI9 UnMQ== X-Gm-Message-State: AC+VfDxvgGz6b58ED8QYOi+OcLufm/9JMkKNYTQ2VzO8O2GVvpdZ5mdF ikIjvaJu4R3mHTFCXoVVZZm6Jh4hshCjHQ== X-Google-Smtp-Source: ACHHUZ4THj5Qkl03JCHCjTlSWp/o7bV04vsyL93TtgiK33g3S4UGmuzEa+WOM6LmC0yaPTlWwNF+duECY3Pn7A== X-Received: from yjq3.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:272f]) (user=jiaqiyan job=sendgmr) by 2002:a17:903:334f:b0:1ae:531f:366a with SMTP id ka15-20020a170903334f00b001ae531f366amr637380plb.5.1684339801269; Wed, 17 May 2023 09:10:01 -0700 (PDT) Date: Wed, 17 May 2023 16:09:46 +0000 In-Reply-To: <20230517160948.811355-1-jiaqiyan@google.com> Mime-Version: 1.0 References: <20230517160948.811355-1-jiaqiyan@google.com> X-Mailer: git-send-email 2.40.1.606.ga4b1b128d6-goog Message-ID: <20230517160948.811355-2-jiaqiyan@google.com> Subject: [PATCH v1 1/3] mm/hwpoison: find subpage in hugetlb HWPOISON list From: Jiaqi Yan To: mike.kravetz@oracle.com, songmuchun@bytedance.com, naoya.horiguchi@nec.com, shy828301@gmail.com, linmiaohe@huawei.com Cc: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, duenwen@google.com, axelrasmussen@google.com, jthoughton@google.com, Jiaqi Yan X-Rspamd-Queue-Id: B54EB10001E X-Rspam-User: X-Rspamd-Server: rspam06 X-Stat-Signature: xucx5kx1xy5gmep9d1ymmg63epng1d9x X-HE-Tag: 1684339802-600515 X-HE-Meta: U2FsdGVkX1+Llwwt70UiB54y6QYWuiwo2jwjRo+CVGEeDaow0x+m0PSWETnU0fbAAAvVT6XACTBVW+TEb2ptsV45KAHYEpi0qL2pJ98FS8Id4kbcZy+m6kQdAktbQLK9PjqbpXqt2EJXkKBV0KsW9EZr1uctUawlIc13u19vfUxisvSYKZBBp60CnT+tBKD1cWc4gHFijwkorZJuqEXo29/b5f839om3iqQbbqR/4prnUgGHwLjP2mMCrZuXdTQQRIIvh3A81EfED7GjGWUeVJYIbUIKCxlB48GYiJ/hDgjdpsC4f/uhqXycjq1uFtLzeUrnWU3a8nqt9gozLt8FcaruGVoFao+xKEUZ5kLb1n0xYMl2O/+1kWXpHQTfOKC2TqefAHFYSzoJbDm9ZPzJLMC4kNu8QctEXyLwA/wwHnSrtUDGbUem1/+52bgzr1HWxiKkQau8bg9KqGcGLUu6l4nbNpm6J+vo57RaIBlBL8Hu3UBTnE1p5GTGGgw4zI0me53CrVMowYW3D0ybSB0SykSkzNnWKjhC18iYs861mXdC3Bm+o7vilMBa9k+RbrhazNSg4+lRXuIvI92QsbHpP2RDR57clEr+PAv5WgTF0O1B/7kWRimn2BRhKHbFiWbHFOJZRnRP+SQGb910Jhm35daZ87In4Am/SCAWmZWKpgos7eGvcRGd7rwMLeUfIhF1ik/hiLgYcQTDz1XnhXb9LCTRnE5DEHKeULdbG8SXQ65F1pUgGc+nnl4Ji0Izgz1pYv6oCK2uM9nYXbfC5yvQtvBSF5BN+0HNGw7skV+0d32LbNKaqVNjenbxLwHE4GkF7FLsZSr5HnC9mOs72agr1zIYguvYRDaUiwymM8uZLvTSa6WznBQ8ppmqcMThIeViD+MeVzBgkeBPPtpsof85NFLPW0l0T8+SoTt62HQyWuqprtQSK3RkGOSsVKiAaXOb8npYqT/RKm00RQ4NCyd a8eexBXr abdcfVGwiIbDz2xIM6+AVNT/GQzEjwRhWQH1lB18StHNcbTMA8w0SIMrF92yoiMOQnnyni/d8YXvDsypI1LqGAsbAI8F/VDDH1m3O5/wzIM+6lX862hcI9TOPdG/iPsAOvig/fAzVLbCCf+KQw6U1aK4fiNq+cGEsDfsKLfWd5f4GrDgIwN+JruzwQIPJQ7lxIdKsAo3Kerq2VAZB6dJn+nIFuuafvY7x/UPo3GAZLyPGJFpWFUSTiF+8rFNBcfzfKtpnWQeFzZQ/x/xht+EBEoMjnkWjv53fk8pE7R+y799Zmpdj9Nzi89iWKrQp7Q0/LMTgsidmzLVy6qgkeQPjpDAtfpohSlyPYsbkQ7pEkXYufqg1lOifEkzn2+c1AVkY0WpRM2F9lkxwP9Ol4upy/jQ7lAP/DffnupwNWx48RvkkdsRdj4naNdQHlg+qbs6Qt3cj6DrhnwBmFlU+/hoQwp/ooXeatN4elWcpOdTmRNMxa8IMV8SFtHJK7tlLaGpADxUUbjpM/Md+1YmPO/mucJlgnJOTJDR5Z+aFnqVDnuRtsNiPbroXRvwCiMmvdfpVv1uCOuKVy+2k0KrBAyEGZ9+enVH2DmRfG8cSKwxO/LnI9Pc7frKBg6G17g== 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: Adds the functionality to search a subpage's corresponding raw_hwp_page in hugetlb page's HWPOISON list. This functionality can also tell if a subpage is a raw HWPOISON page. Exports this functionality to be immediately used in the read operation for hugetlbfs. Signed-off-by: Jiaqi Yan Signed-off-by: Mike Kravetz --- include/linux/mm.h | 23 +++++++++++++++++++++++ mm/memory-failure.c | 26 ++++++++++++++++---------- 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index 27ce77080c79..f191a4119719 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -3683,6 +3683,29 @@ enum mf_action_page_type { */ extern const struct attribute_group memory_failure_attr_group; +#ifdef CONFIG_HUGETLB_PAGE +/* + * Struct raw_hwp_page represents information about "raw error page", + * constructing singly linked list from ->_hugetlb_hwpoison field of folio. + */ +struct raw_hwp_page { + struct llist_node node; + struct page *page; +}; + +static inline struct llist_head *raw_hwp_list_head(struct folio *folio) +{ + return (struct llist_head *)&folio->_hugetlb_hwpoison; +} + +/* + * Given @subpage, a raw page in a hugepage, find its location in @folio's + * _hugetlb_hwpoison list. Return NULL if @subpage is not in the list. + */ +struct raw_hwp_page *find_raw_hwp_page(struct folio *folio, + struct page *subpage); +#endif + #if defined(CONFIG_TRANSPARENT_HUGEPAGE) || defined(CONFIG_HUGETLBFS) extern void clear_huge_page(struct page *page, unsigned long addr_hint, diff --git a/mm/memory-failure.c b/mm/memory-failure.c index 5b663eca1f29..c49e6c2d1f07 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -1818,18 +1818,24 @@ EXPORT_SYMBOL_GPL(mf_dax_kill_procs); #endif /* CONFIG_FS_DAX */ #ifdef CONFIG_HUGETLB_PAGE -/* - * Struct raw_hwp_page represents information about "raw error page", - * constructing singly linked list from ->_hugetlb_hwpoison field of folio. - */ -struct raw_hwp_page { - struct llist_node node; - struct page *page; -}; -static inline struct llist_head *raw_hwp_list_head(struct folio *folio) +struct raw_hwp_page *find_raw_hwp_page(struct folio *folio, + struct page *subpage) { - return (struct llist_head *)&folio->_hugetlb_hwpoison; + struct llist_node *t, *tnode; + struct llist_head *raw_hwp_head = raw_hwp_list_head(folio); + struct raw_hwp_page *hwp_page = NULL; + struct raw_hwp_page *p; + + llist_for_each_safe(tnode, t, raw_hwp_head->first) { + p = container_of(tnode, struct raw_hwp_page, node); + if (subpage == p->page) { + hwp_page = p; + break; + } + } + + return hwp_page; } static unsigned long __folio_free_raw_hwp(struct folio *folio, bool move_flag)