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 93791EB64D9 for ; Tue, 4 Jul 2023 20:58:02 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F3F022800B7; Tue, 4 Jul 2023 16:58:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EEF7E2800B2; Tue, 4 Jul 2023 16:58:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D90122800B7; Tue, 4 Jul 2023 16:58:01 -0400 (EDT) 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 CABA02800B2 for ; Tue, 4 Jul 2023 16:58:01 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 9120580720 for ; Tue, 4 Jul 2023 20:58:01 +0000 (UTC) X-FDA: 80975141562.06.E6FC95F Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf23.hostedemail.com (Postfix) with ESMTP id 64625140016 for ; Tue, 4 Jul 2023 20:57:59 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=iV0DQRDE; spf=pass (imf23.hostedemail.com: domain of peterx@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=peterx@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1688504279; 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=1xoQAy1k59UO+UqvJlN8ZZmc0nx2ezBp5tE6xHVc6K0=; b=loGyambO+CJABtnHbIPZZFeRncjQpeEiBBRcrHNGQfBHh8Yz0WE/HgB9DWFAaR5r42mpBR lTYGDeYmSIOwc5M9797DMvsEeuo7tmTd/X+3pwPx02FYYYdmxhdJFunnmsKwzn4GvgeAWe +vMvMFQsDo85BxgXqPdyhOxuExh3JGE= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=iV0DQRDE; spf=pass (imf23.hostedemail.com: domain of peterx@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=peterx@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1688504279; a=rsa-sha256; cv=none; b=ZPqMTbee2aVWDyFV3NpEBjYAq1H3D0V0eTo52gt2i4moHBegRlKbajp64mLJYMVaw+cFyd phydhIj1AccxxzhAdOVwVVGA8A1p/04A7flAG7BXpuirKNNAkqKEyoemG6VEK3EnT9/KEc r5SjTMkvPIfwPOl6nwyjS9D0udG6tm8= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1688504278; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=1xoQAy1k59UO+UqvJlN8ZZmc0nx2ezBp5tE6xHVc6K0=; b=iV0DQRDEKDPBv/p0zk6qlr0fByaf8SI6loNCI52i/SzdLXp0FRuASHiuEcV/1kXukdS4Im NAOVJN+4EdN59LvPr9wweSG6427YSQ74NVNPtWq0alVl0v8fOFC0iGmH0TwiDQez3cyjth V2X+dwaO6Fu/TYJI1eyJn+f9X74W9Fw= Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-135-9NnC9VAKPYm8qRX1ajzxUw-1; Tue, 04 Jul 2023 16:57:57 -0400 X-MC-Unique: 9NnC9VAKPYm8qRX1ajzxUw-1 Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-7673887b2cfso163867785a.1 for ; Tue, 04 Jul 2023 13:57:57 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688504277; x=1691096277; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=1xoQAy1k59UO+UqvJlN8ZZmc0nx2ezBp5tE6xHVc6K0=; b=FOkBg9Tskbmo0SyOtuqcCZVWL3PQLIivVk0m4wEpPEmIkzDLMRIJ8a7MGp/dyPYmaR 2KMc4aBe4lOOWZDYhdDtZY2AdocNuUVhLczctf8M3pjOj1cwYZef+9z4SmDFeiBba87q ho1Eb5B2JTdnao20LGqD7l/oZ7OwbA91hjpUo8gQD4Te2Fy2/jNhXJFPdsmp7zPXdazI 4aXq1eEfj5LiBsITu6YLb9V9fQ2N3UTO6gzIHOcMT3cAPUnin4REaxWu+X/cPm3J3Ueo 9cT+55Jtv+2nJ+4PjREZSQW7bZsrU04zw5YGrv0ue5inY9N+z0oUNRnAODx3Za5wJxkZ 61Mw== X-Gm-Message-State: AC+VfDyGMBenyclBy+brgLd/rIHF+ZslibdtoOJylYhOpchxL3jE+I3r B7hpMo5BYou7upaOBjjgcnTiOr6vHXNwVFfOs6XBBplX810vxrAeRixim7cwTmt+ZsnfcYd4Hgk Q3butBdnJjHU= X-Received: by 2002:a05:620a:4010:b0:766:3190:8052 with SMTP id h16-20020a05620a401000b0076631908052mr19696477qko.0.1688504277097; Tue, 04 Jul 2023 13:57:57 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7xb/vKX4Rf7OqmF2BqOllmu9tYbp/Y6WuIpnjmyfb54972lZs3nKCcbwYgzWdfzXNLzOF8cQ== X-Received: by 2002:a05:620a:4010:b0:766:3190:8052 with SMTP id h16-20020a05620a401000b0076631908052mr19696444qko.0.1688504276815; Tue, 04 Jul 2023 13:57:56 -0700 (PDT) Received: from x1n (cpe5c7695f3aee0-cm5c7695f3aede.cpe.net.cable.rogers.com. [99.254.144.39]) by smtp.gmail.com with ESMTPSA id 19-20020a05620a06d300b007621bdc9d98sm91846qky.87.2023.07.04.13.57.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Jul 2023 13:57:56 -0700 (PDT) Date: Tue, 4 Jul 2023 16:57:54 -0400 From: Peter Xu To: Axel Rasmussen Cc: Alexander Viro , Andrew Morton , Christian Brauner , David Hildenbrand , Huang Ying , Hugh Dickins , James Houghton , Jiaqi Yan , Jonathan Corbet , "Liam R. Howlett" , Miaohe Lin , Mike Kravetz , "Mike Rapoport (IBM)" , Muchun Song , Nadav Amit , Naoya Horiguchi , Shuah Khan , ZhangPeng , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org Subject: Re: [PATCH v2 2/6] mm: userfaultfd: refactor hugetlb folio allocation / lookup code Message-ID: References: <20230629205040.665834-1-axelrasmussen@google.com> <20230629205040.665834-2-axelrasmussen@google.com> MIME-Version: 1.0 In-Reply-To: <20230629205040.665834-2-axelrasmussen@google.com> X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=utf-8 Content-Disposition: inline X-Rspamd-Queue-Id: 64625140016 X-Rspam-User: X-Stat-Signature: f8bsy5m5ik4dxbderr5krkeaqc5tfa6h X-Rspamd-Server: rspam01 X-HE-Tag: 1688504279-907491 X-HE-Meta: U2FsdGVkX1/LCw6vQ2+sOejq8J+qP+JGG9rf7iCusgxtScLPmEHTfR3EO+cRco0BNL90n2rplTSg9J0vduiQgO+6PovsIhQmm40MS+2aHPhoO+L2oMrKn6rR5fL4UJ/Dp1EY9ZKBW2rCH5ar6/r4mclmEUGl5sVQSwenUtGr8YBnExfAFLKsnHEDtJr78sXQm45tu01HBf6sesCy7QOpSnELDOYDeW25+MCODgDGfRiFJI7SKPq+XXo9WdGTRWhfoPKWDaTaWguf8cuFn3ZiqFVNFVsB5C/ldBPLooFM0rBeWtvgQeGY+0D/u3QIIC7v2bNjA9ybMDWvPlV6w280+Ae2uuIxnnpD61ayW2wUFv4hzdSfcKcbMO8F97tlR97ew6y2Ron6pUsiGEqsjGCR2T1ndPQe8MFx+uC9Kl2uTV7K0TBbMUJrf5IdZUBmt2HeYg7ihk0NKFGLaUadkKsx6oeX8z30/SAe60Rx9FHeQPhNffAzV4YmL2Nu9NWbGJq/Dcn9b2ICcOrMfk5xJrsf2+RhuMNLPTsvPDpmzPtTJB620YPnLpmkPaVjVgI4gGFQRWk2d0Wy2dO/lwx5COC/SVNq5ywQAjAuFMGVWoKU/uHjjKRwcUhx5XpkQ27ITK5Qwlb9sauOJDE8H6Z0gOg3Cq8TkJ8M52B4pYuYebSMX1dRQd9FpyP9kDKHgMDHGaCqkJGEWmsvpZfSWnW9A6e3XXO1aGPIoAtD4qxv9ZADYpcYzEb6OztBKxA5iq9WHyJibxsQt+WxrcBrjs1v+JlVrSxN+t13jjti23PEP2TnHQw+K8UHwpt62EsjpZu9iiAAdeTBMTmffNqbgu63OPdUthZB+ElSqU4k9At2XJRn7Jz04EwaA1IjLN606j3vQkh/rEqcMmZE9s3asu2ggHOcFt+CySyc9wdnEVz0Qhy+wEonB0VXzk0MAIjn++tDb5j/Vetayf7mOMuHEWKwQZI Nhf0R12a GmbcSNlsxQb+8scxdYnlWhV7usYqDKnHuPg8Pl1I9FQxuou1KL8yjHnWrTwon9xfV6bGsdCzSY3uw3FSYgX2fjVB9Qt5lPWUvDKtC8g+N3wLvKWCZHTa0Hie2Wtj1TC+sZXr5pbrWz2jX1hFeMsahJpjOZU1yhPoam/1T/athN7dS7eFSJLhWVEMZiEE9p6p9x0q5ObQKmwbJPoPkhn2nJUUAa+s5VG3F74T5u3yC8lSzUzHDHMbmr9FgOYIcP9y/VyPe9cc0IeFJmLFK3DkFlkrCZlwz9mMvRAzfw5Y7jjmFb0mxNN5hETBtBycDP3qW5+pXe6m0/kOO7kRsf2h3ejgZ4NFf5SZZsMO1Qj5gCQA12ASuVfg3LFFq0W7X1RDOVys4 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 Thu, Jun 29, 2023 at 01:50:36PM -0700, Axel Rasmussen wrote: > At the top of `hugetlb_mfill_atomic_pte`, we need to get the folio we're > going to be mapping. There are three basic cases we're dealing with > here: > > 1. We're doing a UFFDIO_CONTINUE, in which case we lookup an existing > folio in the pagecache, instead of allocating a new one. > 2. We need to allocate a new folio. > 3. We previously failed while populating our new folio, so we "returned" > a temporary folio using `foliop` and had our caller retry. > > In a future commit I'm going to add a fourth case for UFFDIO_POISON, > where we aren't going to map a folio at all (newly allocated or > otherwise). This end state will be simpler, and we can re-use a bit more > code, if we stop using `if (...)` to distinguish the cases. > > So, refactor the cases so they share most of the same code, and instead > switch to `goto` to skip some parts depending on the case at hand. > > Signed-off-by: Axel Rasmussen I didn't get why this patch is needed.. IIUC you added MFILL_ATOMIC_POISON handling at the entry of hugetlb_mfill_atomic_pte() anyway. Maybe it can even have its own hugetlb_mfill_atomic_poison()? Did I miss something? > --- > mm/hugetlb.c | 53 +++++++++++++++++++++++++--------------------------- > 1 file changed, 25 insertions(+), 28 deletions(-) > > diff --git a/mm/hugetlb.c b/mm/hugetlb.c > index bce28cca73a1..38711d49e4db 100644 > --- a/mm/hugetlb.c > +++ b/mm/hugetlb.c > @@ -6259,22 +6259,32 @@ int hugetlb_mfill_atomic_pte(pte_t *dst_pte, > if (IS_ERR(folio)) > goto out; > folio_in_pagecache = true; > - } else if (!*foliop) { > - /* If a folio already exists, then it's UFFDIO_COPY for > - * a non-missing case. Return -EEXIST. > - */ > - if (vm_shared && > - hugetlbfs_pagecache_present(h, dst_vma, dst_addr)) { > - ret = -EEXIST; > - goto out; > + goto ready; > + } > + > + /* If a folio already exists, then it's UFFDIO_COPY for > + * a non-missing case. Return -EEXIST. > + */ > + if (vm_shared && hugetlbfs_pagecache_present(h, dst_vma, dst_addr)) { > + ret = -EEXIST; > + if (*foliop) { > + folio_put(*foliop); > + *foliop = NULL; > } > + goto out; > + } > > - folio = alloc_hugetlb_folio(dst_vma, dst_addr, 0); > - if (IS_ERR(folio)) { > - ret = -ENOMEM; > - goto out; > + folio = alloc_hugetlb_folio(dst_vma, dst_addr, 0); > + if (IS_ERR(folio)) { > + ret = -ENOMEM; > + if (*foliop) { > + folio_put(*foliop); > + *foliop = NULL; > } > + goto out; > + } > > + if (!*foliop) { > ret = copy_folio_from_user(folio, (const void __user *) src_addr, > false); > > @@ -6302,22 +6312,7 @@ int hugetlb_mfill_atomic_pte(pte_t *dst_pte, > */ > goto out; > } > - } else { > - if (vm_shared && > - hugetlbfs_pagecache_present(h, dst_vma, dst_addr)) { > - folio_put(*foliop); > - ret = -EEXIST; > - *foliop = NULL; > - goto out; > - } > - > - folio = alloc_hugetlb_folio(dst_vma, dst_addr, 0); > - if (IS_ERR(folio)) { > - folio_put(*foliop); > - ret = -ENOMEM; > - *foliop = NULL; > - goto out; > - } > + } else { /* Caller retried because we set *foliop previously */ > ret = copy_user_large_folio(folio, *foliop, dst_addr, dst_vma); > folio_put(*foliop); > *foliop = NULL; > @@ -6327,6 +6322,8 @@ int hugetlb_mfill_atomic_pte(pte_t *dst_pte, > } > } > > +ready: /* `folio` ready to map (non-NULL, populated) */ > + > /* > * The memory barrier inside __folio_mark_uptodate makes sure that > * preceding stores to the page contents become visible before > -- > 2.41.0.255.g8b1d071c50-goog > -- Peter Xu