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 00BDBC021BE for ; Thu, 27 Feb 2025 07:44:50 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8537A6B007B; Thu, 27 Feb 2025 02:44:50 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 804276B0082; Thu, 27 Feb 2025 02:44:50 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6CB096B0085; Thu, 27 Feb 2025 02:44:50 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 5228D6B007B for ; Thu, 27 Feb 2025 02:44:50 -0500 (EST) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 0DCC912087A for ; Thu, 27 Feb 2025 07:44:50 +0000 (UTC) X-FDA: 83164937940.22.443E0BC Received: from out199-17.us.a.mail.aliyun.com (out199-17.us.a.mail.aliyun.com [47.90.199.17]) by imf15.hostedemail.com (Postfix) with ESMTP id B700DA0007 for ; Thu, 27 Feb 2025 07:44:45 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b=xZBVPxDc; dmarc=pass (policy=none) header.from=linux.alibaba.com; spf=pass (imf15.hostedemail.com: domain of baolin.wang@linux.alibaba.com designates 47.90.199.17 as permitted sender) smtp.mailfrom=baolin.wang@linux.alibaba.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740642288; a=rsa-sha256; cv=none; b=FJq4mbtP9hhs5v7PWSfw+t8o5RNH5RaT+Qynv9AOuCk7xrOvo0xcsHyjPNhGJ+D3ZzTp5F dFD7oyRpyqY64X7z/+pzzKIAXc/3ESpI1eSyGaX27O6W1X0JebB5cBAyyPE09hrliLElkk hwj+UH3hgCHD0TXMGHBgwdKSudSbe88= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740642288; 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=W0giOhonOAea6SPXR9+YI4nSj5chl0mPcUFI3Gguhr0=; b=c+l8Y0flq6Q63Vu2qXFOEpYhUGRrfkugvyDGJlEy+ysz1WwM7/FN2hkGELZyHgb9u0ze6X 2wXzBlUnU35eZ6yaniJObeU1kc9v/Tai3qN2+d9W1t+D8aGdEOpCJy3XovWYpSejlqcoaP rYsmQQBPzS3c+NpECSfFZN6RFLkgQC8= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b=xZBVPxDc; dmarc=pass (policy=none) header.from=linux.alibaba.com; spf=pass (imf15.hostedemail.com: domain of baolin.wang@linux.alibaba.com designates 47.90.199.17 as permitted sender) smtp.mailfrom=baolin.wang@linux.alibaba.com DKIM-Signature:v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1740641678; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type; bh=W0giOhonOAea6SPXR9+YI4nSj5chl0mPcUFI3Gguhr0=; b=xZBVPxDcOfsZ3pBd2sUpOkON5Yls6Uy7Bdk6FiMqBuU5noXvF97TPOBB3+EGxPc+ADyd2hn1LAZJkqmyxrh9u9l5pjJ9z23pPSfegTIzfGx1850e+yl1fYnj8ywSg8fiNl2c+MIML4yM9EL9ldBP4PECw8eniPNpw7bcWNLeYZk= Received: from 30.74.144.117(mailfrom:baolin.wang@linux.alibaba.com fp:SMTPD_---0WQLThRT_1740641676 cluster:ay36) by smtp.aliyun-inc.com; Thu, 27 Feb 2025 15:34:36 +0800 Message-ID: <19624e55-ba41-41e7-ba11-38b6ab3b96e5@linux.alibaba.com> Date: Thu, 27 Feb 2025 15:34:35 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2] mm: fix finish_fault() handling for large folios To: Brian Geffon , Andrew Morton Cc: Zi Yan , Kefeng Wang , Suren Baghdasaryan , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , David Hildenbrand , stable@vger.kernel.org, Hugh Dickins , Marek Maslanka References: <20250226114815.758217-1-bgeffon@google.com> <20250226162341.915535-1-bgeffon@google.com> From: Baolin Wang In-Reply-To: <20250226162341.915535-1-bgeffon@google.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: B700DA0007 X-Rspamd-Server: rspam08 X-Rspam-User: X-Stat-Signature: 3f7a64k4hd578pdpt5wi4osagkqqyo6d X-HE-Tag: 1740642285-520821 X-HE-Meta: U2FsdGVkX1+UvfjGTsGkzcbV5+5RX/nyOxWIz2UBRW6+DCe6/zyxHbsixap5mGp1/GxnmFddv3xSgNvF0WQKlcdnci4Vzgr7j0Mqky1ifXQUSd3rXAqLp5o7L+RGOQgkWOi94axsiJAtZApNfr1TAlaiqwcdIKSp7ZNDh+8BFgpNGqjQGF/9LmFZVC3bE0Eq8mVCyStfWd4dd4vlzI26AQ1atfZ41hNJn0k5r0CG0ZQtct5yNEaPTtRQ6z2lyrMlu0H9jDus8QU64XtQIpCssPQLQeMmpTbYEJ+d+wx/D1I6IFyjL2SfLWa8K/K+otn7Uokud117vmfpXFEi2b2IYLJtMd6ZuSxjhjMjbkSLnj7L50tHwXGqLsDZ7+rCwMj8ctcHW42HF3vWPfgkxlD9JA/kN3fI0A3xdqaSJKmDCtbxYKOIO8y8fdSYJ/3Kx6gVLYzdbILpgNAinaSN3YCN2CMNM/HzOH9gCFZ7aR/pLepRWKP0/NIlpiT3i11Iuu2k96tZJGLPcJ1ZOp7AkvtxslpkpWzeauQ7heE/Qmk3eCp12ly+Lidv6Rk6O+uspMExNHBQT2HM7C0nYMSYU3P+U+bN9Lr7RLYneNro+cs0KR/8iZSLNYdKf5QyBq98LnRAh93uj8UNnJSkkOFRxMuJC5+8ZIs/bRRO9eWCeAN9Ixn5A0wPWxDlViNJ6iXrcwvaCLGNdkyGFDOMA2OIw+lc8jlPtfeDmiWfLky9HB1WK+BBOphVSulvZQYhM4E2BzKHUlKZkXxC1CsMi8qBnkwpgOqIqJWWvlmGTwClyIOgF4s4irwYDCojYlYi9TS/EDr66LMlB7ckx6NlAUB766J2g6YGwDy9Nvx4Cf6hEOr1F7Hk5xX07n1kmAzSUBmMXzE4GD8wCjg9Ns+XFuyiQQekCL2abyR9Fb/50pBYh2ubQgl3DEjdQ7mCFrj1MCkaGjOWOpHEkifJVBD8x6tBa2o ybdjUBPZ JP/4eYwASIckYYORu/Rs7xQoRyIRPwKW9uPseAy5fpmp4r1UnMWiaCatVVn7M8HneJyGvJ+uqFxpjP4hxFUo3mVvlxyHAy8cURjL+PqBWaxmGAFwq+Iksf6gzu23dK+yiUtsRbJnBen5K8mGUSSa4tYjvWf7v+GaTV0mtNxnRyDKoIUyFiuSSnXpM6o1CGi6s7y17Az9fCzCX9ziWCRK2dpJ1qGP0Uu95U01kx+GaVz7DMuQ9KF7rCjOLDR3DnrK/98JkH+oyTmZirFEe3UXtedBPElA3JRCO1SL1RRBE2FNytt2uMUSubxlDVSUW3V2g0N5axu10VSQms6hbNsgnuropgE2ssvoO670Et1SrXZZEeogLHRYWvXgkvlY04VWvLjLBj5gUTr+Zak6P95EFMl+HGfHJYO+HSBoFrMiX+yL7nTkVysWUas2Qw6c6IgCs50hswZsIVtyj9XFip2cDJDNbtn7NVxvMqaVJA8p2f5kadWQ= 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: List-Subscribe: List-Unsubscribe: On 2025/2/27 00:23, Brian Geffon wrote: > When handling faults for anon shmem finish_fault() will attempt to install > ptes for the entire folio. Unfortunately if it encounters a single > non-pte_none entry in that range it will bail, even if the pte that > triggered the fault is still pte_none. When this situation happens the > fault will be retried endlessly never making forward progress. > > This patch fixes this behavior and if it detects that a pte in the range > is not pte_none it will fall back to setting a single pte. > > Cc: stable@vger.kernel.org > Cc: Hugh Dickins > Fixes: 43e027e41423 ("mm: memory: extend finish_fault() to support large folio") > Suggested-by: Baolin Wang > Reported-by: Marek Maslanka > Signed-off-by: Brian Geffon > --- > mm/memory.c | 15 ++++++++++----- > 1 file changed, 10 insertions(+), 5 deletions(-) > > diff --git a/mm/memory.c b/mm/memory.c > index b4d3d4893267..b6c467fdbfa4 100644 > --- a/mm/memory.c > +++ b/mm/memory.c > @@ -5183,7 +5183,11 @@ vm_fault_t finish_fault(struct vm_fault *vmf) > bool is_cow = (vmf->flags & FAULT_FLAG_WRITE) && > !(vma->vm_flags & VM_SHARED); > int type, nr_pages; > - unsigned long addr = vmf->address; > + unsigned long addr; > + bool needs_fallback = false; > + > +fallback: > + addr = vmf->address; > > /* Did we COW the page? */ > if (is_cow) > @@ -5222,7 +5226,8 @@ vm_fault_t finish_fault(struct vm_fault *vmf) > * approach also applies to non-anonymous-shmem faults to avoid > * inflating the RSS of the process. > */ > - if (!vma_is_anon_shmem(vma) || unlikely(userfaultfd_armed(vma))) { > + if (!vma_is_anon_shmem(vma) || unlikely(userfaultfd_armed(vma)) || > + unlikely(needs_fallback)) { Nit: can you align the code? Otherwise look good to me. > nr_pages = 1; > } else if (nr_pages > 1) { > pgoff_t idx = folio_page_idx(folio, page); > @@ -5258,9 +5263,9 @@ vm_fault_t finish_fault(struct vm_fault *vmf) > ret = VM_FAULT_NOPAGE; > goto unlock; > } else if (nr_pages > 1 && !pte_range_none(vmf->pte, nr_pages)) { > - update_mmu_tlb_range(vma, addr, vmf->pte, nr_pages); > - ret = VM_FAULT_NOPAGE; > - goto unlock; > + needs_fallback = true; > + pte_unmap_unlock(vmf->pte, vmf->ptl); > + goto fallback; > } > > folio_ref_add(folio, nr_pages - 1);