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 CCA3BEB64DC for ; Mon, 10 Jul 2023 15:17:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3D4DA6B0072; Mon, 10 Jul 2023 11:17:10 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 384BF6B0075; Mon, 10 Jul 2023 11:17:10 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 227086B0078; Mon, 10 Jul 2023 11:17:10 -0400 (EDT) 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 105E06B0072 for ; Mon, 10 Jul 2023 11:17:10 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id AA252AF926 for ; Mon, 10 Jul 2023 15:17:09 +0000 (UTC) X-FDA: 80996055378.23.E90DEEE Received: from mail-yw1-f174.google.com (mail-yw1-f174.google.com [209.85.128.174]) by imf28.hostedemail.com (Postfix) with ESMTP id AA2D9C0019 for ; Mon, 10 Jul 2023 15:17:07 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=UXvy2lXu; spf=pass (imf28.hostedemail.com: domain of jiaqiyan@google.com designates 209.85.128.174 as permitted sender) smtp.mailfrom=jiaqiyan@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=1689002227; 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:dkim-signature; bh=ev9w8qY5qeXK6l96dBjt1M0c/nck2SlIA1nfO//2Cvg=; b=og620ua5YsKt7hgbhOqN9Q2O9+BWtUXPkGBnPDl68lo6s6Sh50cfZlk6EwdCH/rOqXRViN C/GvjKLx/gT0Q+k7yU55yveTcOwePgt7KVLv0GWpb4MU9bM3ZqLpdXavvpnxwp8C3WQb4I tYoa4IyViP13VphdYwb83EIk8jIw15E= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1689002227; a=rsa-sha256; cv=none; b=KU3KVlBQKld2rPcQEyaO2axr5jPqn8gu3vWQLpQdKflMCrm0ImOq8lL9fs1BQVveRaTYX3 lEAWhLnEegOlt2oqFaNXesWyGHJREhHco/QlrcJ9xwhJQ6Dpenkomc7J7w+MaqhJhdhh88 ewj0C8VP/3UEEgz9DNxDqfF3UtvOK20= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=UXvy2lXu; spf=pass (imf28.hostedemail.com: domain of jiaqiyan@google.com designates 209.85.128.174 as permitted sender) smtp.mailfrom=jiaqiyan@google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-yw1-f174.google.com with SMTP id 00721157ae682-57012b2973eso59829167b3.2 for ; Mon, 10 Jul 2023 08:17:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1689002227; x=1691594227; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=ev9w8qY5qeXK6l96dBjt1M0c/nck2SlIA1nfO//2Cvg=; b=UXvy2lXuacyPSAIEDq5qk/QFhDP0pWrsvmHQao1FdXfgkWCCTkvztAJoL4KblYUUIn Id6XFTfQ7pGHNwDVV0tIbF3GxZp5av38rOxIT6RcYIEhgy4qlSnbmn/zrnLUvwzPWO0Y WYU6B8NWzON02+L61fxZmg49WwdNMkUrzaCU3ws366Y1MNmH4VJ3/IozxXvyFjnCM5Rv 8tJzfW4PTjiifwQ0kUJ6+yrqLA7N9CGXNOpufniE4821v5bcmEe2cP6YitHieT7uRIBW 7UWH+6fhv8DJJL9XxsmXLAEqeQaVt/0wfaTD+1WUG3ujlv6L5G6kjyH9qwzAVkrFBAdV AIjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689002227; x=1691594227; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ev9w8qY5qeXK6l96dBjt1M0c/nck2SlIA1nfO//2Cvg=; b=K4DyZQqPyQVd9Ya5B2J2A6SH7ksPBmsqtUgxGn4y7fOOY2Gj5xco/xA7SgzROw6rtV pjq46Gr43xFE6cuA9+JxcEVkmaYoa4dmZdHgLOhW2+zn2ywuecu0IOEhlVPVw13+KS2Y crD4x9T1NNetGCa1oZKp1wgiM95+FmBuvwTirOEG+QhJw92H8Va63Q48Y9qP5u4pOmSp tn4NRW/OD0PuxaCnQdxHMm+VDwx2+MI78eH6Vl1IulCz6K5sgiZKB4pd+NDVCS0YRhMx prx6wCzEN8pDAGK1rRj9VFWl5g61riBMpXBgdn3A73X2T565rK/ya/TfvvArrmjJngjy zYhw== X-Gm-Message-State: ABy/qLZFhYd3Eef0rM5h8COpTUIjvqd4Mz4dQKfYYji9QpfYYLDcvmE1 2cxUDfSPtojqZbL7xsZanP/m4sewAcA4ufvGTW+2Wg== X-Google-Smtp-Source: APBJJlH/mdYwBePFgE2xPEQJ8BWpSbYER3+V0l6Dh7xD0Ej6k2tSZSaudJZCmfy3XG72u8/rjHDCdvJ288fZPdgHje4= X-Received: by 2002:a0d:ca0e:0:b0:56d:28b:8042 with SMTP id m14-20020a0dca0e000000b0056d028b8042mr11153655ywd.40.1689002226674; Mon, 10 Jul 2023 08:17:06 -0700 (PDT) MIME-Version: 1.0 References: <20230707201904.953262-1-jiaqiyan@google.com> <20230707201904.953262-3-jiaqiyan@google.com> <6682284d-7ad3-9b59-687d-899f4d08d911@huawei.com> In-Reply-To: <6682284d-7ad3-9b59-687d-899f4d08d911@huawei.com> From: Jiaqi Yan Date: Mon, 10 Jul 2023 08:16:53 -0700 Message-ID: Subject: Re: [PATCH v3 2/4] mm/hwpoison: check if a subpage of a hugetlb folio is raw HWPOISON To: Miaohe Lin Cc: akpm@linux-foundation.org, mike.kravetz@oracle.com, naoya.horiguchi@nec.com, songmuchun@bytedance.com, shy828301@gmail.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, duenwen@google.com, axelrasmussen@google.com, jthoughton@google.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: AA2D9C0019 X-Rspam-User: X-Stat-Signature: 8yitoerct7jwhb44zn95faabjdamaswn X-Rspamd-Server: rspam03 X-HE-Tag: 1689002227-459905 X-HE-Meta: U2FsdGVkX18Z+ZZ5ncirw7xRtfZwJvkuXwZlzPyBTqmls99z5hXfrmB9S3d2039E9jgYWC4VDRO5HyykC2hCYkDtrY7e9wJFu7ejrhqZX60CpOzcs54Fw8IKdj5lRbxLOEGb8XvL63rb4e8alDOvk2pLq8xLtScA8WpEqBBc41larsDPPNAp3suymX/H4zqdpOi9Oka+8kg+jAunvc45tDx6jTXhUsUprfNANwHTP3XCCAbr4RDnjMtOQBUACvp9vNBsdTfDg3ljdCsirJ1zD+e9MICHaVb6dsmSfz33GemnM9yE4AIQWgUWzEt4qyetTOYThgVR3478yMVa2XUWTiHnwaiCIfv89vK1LdC7sQlw82ZAuxUSjjNMPzOK+sPLvsdg1Rw9nWAiYlazGsxKpCekYnf4jIaskjsMRTstWFqPYtz5Pt0SgcaRSpxOABnoLNW5VjhrnK5RuWOhs6F23vGScwbNpugmIBn5Kk5juxHD95STatLFCKlq8VrcGFyI1f9mVp9n1b9JLhuQne0T45rzal+pKvSRJTF2Vi2H+qZkt50e7WyXE0ESP8QX+YLO6iwcu9reepGrgVOgjYzJdc/BAEJSFrn4ii+/lsGHclmJO5eevaIg0ptuwZuad3lLNwlxlDtYETJ+nxtBgYEvpdIwsuInPmaGe7KKWxC+WJ5e73EZ7lAgoSdVuqRspdyClPl+cTlOtYA6M0riE0ZulrYNnetyTQe5vfGTXNkingS7c46yP6rEMAsTci64upJuzTxK0x9bJJxLwD63s1BbCsqSq8FPqU9QJeCb7YLbJFpn8dOeacAshdvgNgzF/s2BqPWnTFhbrxmSRWYGFqF8dxGjv1Avy3VBycA2FqynebwWyl+diBuBq8ZL6Na8KmWBxyuFD2nkl59VGV24KJsAPGxj8aeWE/bCg1XOYDTpQKQyNm0Ib4Ceca9Eec7ov88odqHXsqw4LDmRj/A8kgM YWnmNzPj qyAy+vd6/JwqFbbU+P2+YOsG0KC4iSg3LFRofzlx29imHJvsUaJbSS+21M+jDgMkdbpRZsyp+pRpYSWi3DZobp8Or94W7tOHKxslWuJ7SGiDWLcwVi0kkEKzA5/nXcKvUmtp4C+Rr0of24mDaEQNJ8oFiSlFGBHTj09Fwwuojy30A8/MWz+Q6qOW/3zkoGHNaLizGH9+9udYNZOEcUGv0MPtaa9AndVbLf43YBynM77Tz0fFjoGDeqifOrQBYgVagomn+W62nU5NsGlH7X2KdubiOkA3yTaDgZtz3mvgk0uCqSjQ1iHU4xtG6OhmxJvgGn7Gu 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: On Fri, Jul 7, 2023 at 7:57=E2=80=AFPM Miaohe Lin wr= ote: > > On 2023/7/8 4:19, Jiaqi Yan wrote: > > Add the functionality, is_raw_hwp_subpage, to tell if a subpage of a > > hugetlb folio is a raw HWPOISON page. This functionality relies on > > RawHwpUnreliable to be not set; otherwise hugepage's raw HWPOISON list > > becomes meaningless. > > > > is_raw_hwp_subpage needs to hold hugetlb_lock in order to synchronize > > with __get_huge_page_for_hwpoison, who iterates and inserts an entry to > > raw_hwp_list. llist itself doesn't ensure insertion is synchornized wit= h > > the iterating used by __is_raw_hwp_list. Caller can minimize the > > overhead of lock cycles by first checking if folio / head page's > > HWPOISON flag is set. > > > > Exports this functionality to be immediately used in the read operation > > for hugetlbfs. > > > > Reviewed-by: Mike Kravetz > > Reviewed-by: Naoya Horiguchi > > Signed-off-by: Jiaqi Yan > > --- > > include/linux/hugetlb.h | 19 +++++++++++++++++++ > > include/linux/mm.h | 7 +++++++ > > mm/hugetlb.c | 10 ++++++++++ > > mm/memory-failure.c | 34 ++++++++++++++++++++++++---------- > > 4 files changed, 60 insertions(+), 10 deletions(-) > > ... > > -static inline struct llist_head *raw_hwp_list_head(struct folio *folio= ) > > +bool __is_raw_hwp_subpage(struct folio *folio, struct page *subpage) > > { > > - return (struct llist_head *)&folio->_hugetlb_hwpoison; > > + struct llist_head *raw_hwp_head; > > + struct raw_hwp_page *p, *tmp; > > + bool ret =3D false; > > + > > + if (!folio_test_hwpoison(folio)) > > + return false; > > + > > + /* > > + * When RawHwpUnreliable is set, kernel lost track of which subpa= ges > > + * are HWPOISON. So return as if ALL subpages are HWPOISONed. > > + */ > > + if (folio_test_hugetlb_raw_hwp_unreliable(folio)) > > + return true; > > + > > + raw_hwp_head =3D raw_hwp_list_head(folio); > > + llist_for_each_entry_safe(p, tmp, raw_hwp_head->first, node) { > > Since we don't free the raw_hwp_list, does llist_for_each_entry works sam= e as llist_for_each_entry_safe? > > > + if (subpage =3D=3D p->page) { > > + ret =3D true; > > + break; > > + } > > + } > > + > > + return ret; > > } > > It seems there's a race between __is_raw_hwp_subpage and unpoison_memory: > unpoison_memory __is_raw_hwp_subpage > if (!folio_test_hwpoison(folio)) -- hwp= oison is set > folio_free_raw_hwp llist_for_each_entry_safe raw_hwp_list > llist_del_all .. > folio_test_clear_hwpoison > Thanks Miaohe for raising this concern. > But __is_raw_hwp_subpage is used in hugetlbfs, unpoison_memory couldn't r= each here because there's a > folio_mapping =3D=3D NULL check before folio_free_raw_hwp. I agree. But in near future I do want to make __is_raw_hwp_subpage work for shared-mapping hugetlb, so it would be nice to work with unpoison_memory. It doesn't seem to me that holding mf_mutex in __is_raw_hwp_subpage is nice or even absolutely correct. Let me think if I can come up with something in v4. > > Anyway, this patch looks good to me. > > Reviewed-by: Miaohe Lin > Thanks. >