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 0A70CC02183 for ; Tue, 14 Jan 2025 07:51:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3431D6B007B; Tue, 14 Jan 2025 02:51:29 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 2CBC86B0083; Tue, 14 Jan 2025 02:51:29 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 16D5C6B0085; Tue, 14 Jan 2025 02:51:29 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id EBA496B007B for ; Tue, 14 Jan 2025 02:51:28 -0500 (EST) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 80061140776 for ; Tue, 14 Jan 2025 07:51:28 +0000 (UTC) X-FDA: 83005287456.28.95BEDEF Received: from out30-98.freemail.mail.aliyun.com (out30-98.freemail.mail.aliyun.com [115.124.30.98]) by imf02.hostedemail.com (Postfix) with ESMTP id 9A6D680013 for ; Tue, 14 Jan 2025 07:51:25 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b=Qa3w5aUp; spf=pass (imf02.hostedemail.com: domain of baolin.wang@linux.alibaba.com designates 115.124.30.98 as permitted sender) smtp.mailfrom=baolin.wang@linux.alibaba.com; dmarc=pass (policy=none) header.from=linux.alibaba.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1736841086; 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=+6aBypYiXpsnIYYHDG4FFvYm+u76PpmDT44lIRDZKQU=; b=nJs4wqZldAu+APnxy+2uAy86T3G6wTvTQ4BwgpuPPc7a4hMQE1h4JHDKTvK0O/ta0p586P NEDW8KSuulYDHSa2PSd7mGTEvV9ekbo7l1h7jOoQMoDfFOEo4yUrHMQOhGOydRX2WVIagS SlNBWW55/Gkpo3qNQASYmmjiiCvPXs0= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b=Qa3w5aUp; spf=pass (imf02.hostedemail.com: domain of baolin.wang@linux.alibaba.com designates 115.124.30.98 as permitted sender) smtp.mailfrom=baolin.wang@linux.alibaba.com; dmarc=pass (policy=none) header.from=linux.alibaba.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1736841086; a=rsa-sha256; cv=none; b=T2m40pR2DBwLmO0wuYg1sWXr2aDTnBsquTLLgUT5ZW3XaZnVQbYRBaSB7t/yAjkKJfEcdm 52H6YFZAJbkssImRpRBHoRbr420bSMo8zfP7dVEFuVeq7dHbStfwVnwL3RJPMs9tvnn+8F DEnAHy1mJ3ugWgHnVHreB+u6tCrBVhg= DKIM-Signature:v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1736841082; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type; bh=+6aBypYiXpsnIYYHDG4FFvYm+u76PpmDT44lIRDZKQU=; b=Qa3w5aUpJkypJx1xsS2Bbco+i35ASPgeJ+WqAIrXHxd3tBHShQ80IM8l79X2mpT/+DNXZ+2FQeCcHKWeQkEqNab7k5lsnpywgQgW8cFYmyNzWrN5sGBzVsQTRQMoMvVLgpwY4q9mB9V5aNLvy1QJ+8qw5SAkQMITVEo87YmS1cI= Received: from 30.74.144.113(mailfrom:baolin.wang@linux.alibaba.com fp:SMTPD_---0WNeTLfB_1736841079 cluster:ay36) by smtp.aliyun-inc.com; Tue, 14 Jan 2025 15:51:20 +0800 Message-ID: Date: Tue, 14 Jan 2025 15:51:19 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 4/4] mm: Avoid splitting pmd for lazyfree pmd-mapped THP in try_to_unmap To: Barry Song <21cnbao@gmail.com> Cc: akpm@linux-foundation.org, chrisl@kernel.org, david@redhat.com, ioworker0@gmail.com, kasong@tencent.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-riscv@lists.infradead.org, lorenzo.stoakes@oracle.com, ryan.roberts@arm.com, v-songbaohua@oppo.com, x86@kernel.org, ying.huang@intel.com, zhengtangquan@oppo.com References: <20250114040914.9986-1-21cnbao@gmail.com> <20250114060059.14058-1-21cnbao@gmail.com> From: Baolin Wang In-Reply-To: <20250114060059.14058-1-21cnbao@gmail.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam05 X-Stat-Signature: boxbjhy4aoi445ik1z3sohe7fb1wnxjj X-Rspamd-Queue-Id: 9A6D680013 X-Rspam-User: X-HE-Tag: 1736841085-571614 X-HE-Meta: U2FsdGVkX1+i58ofrThGjRyZDThRopXgKKVC9bcwtSV3DHA5HH5mvW0LbOSx9UDXyi7OyR65+9/8jTAgmc6I+FumnzSsyLUz8CyHydt7vpLiajMwnfW4iv3ruqnuGtZfdcbpp7M1POrFnucV2TCEmXOUkEMvW+HKt9Pj+ZhmN0SbwR+KLry0smwBrs9rvHAWJDjcGxskxt4Qi+WJrFU+BPs3ea2Z/N2h+tvu0Zl7G8v3cw8J9Z/sx7SMlajrlD0Uzq1bDpoku+8u/93EVGBJ68XRf1LzCZ1bcktKvFjp0pWFMwi4eXydFeQ/UgFEdJroyctnIjgdDL6jgxj4NkoGS0TiNS3kh5gEWK7elrSrlIORi2GpC7pGm74UmPl1ArQTLlPoCH8R0yXkZ0UFRfcGN0SRwqNSSCa/XdUXky1hTubggjQKtrhZy8SDU7NX41XDfRHGuxhaKK7M93nXJBXUUo5kOXGOfdAw6fzFEK69fed1PjrwlMJmHu3VD3opBitmojG34c8T7mgb5klFgxN1s52nG7O60oju97QU07PBubvuwgmxYzn9SmcUEROmPSOITzPtqXCgHNh4WZwivjQIAdK6/u/IduKFPWyLtP0y/M8tm4E8DOtMGfOgmoxVXQ5W/+JBtmRp80/9ubWrLI5xC3JmujyPfmkEuaOVSXo1xbCkhcpO1zSGdqn2RvipJ8XxRauwPqlDrjDeyshOkU4ypMfSYiQJKS6i8AbDamSthei+76WFw0WzGfjVxwVYgFlAHsDlYyrgmpxvop+rpOfODdg+x9YGKBuSKFTM671tByE52HAipG813TKDsxzYGKVoROohgmfOCAMWFQUgmVQ5hXmux/ekYyG+dOecqTH6cpbHBFxHpnLVTgHM8TNhyVUKUzJd5KnQ6ZDagk5qf+oWwOVRL7OMdujRQMUumBWxrsiRBE/T2e60X4Er5YVFDpid6gH9YuoYBKZ4nFgMNAo BmfFyv2e hSG7OLFGLXrWSU5VClKzvWqowEXZmDC28wVMAUIVVSq2FljCJn3pBmrTknA1zOfy0e16/vL/rUng0SBAELyRUPl9ioBme3FhGfFaYCHFweQ1WQOjEoDKM02bg7yO1WamKgkANJKrkNZm+Gfi7xNhmd/W3d5yR1XkbmSjicLOD2n617qLYgW9BHD79NWcuIV2gx/fL+AFzRTcZlQlHM8LZJqPiCq6Kvowvyd26Ti6qoGImAp1+/0QMoYP+/z8zzEvf/kN1EbMMB+KdWUdc8CWVBfVNZajKGYve920SLNc03N3PzD8/gGx94x0gBRSlR/KisZqB X-Bogosity: Ham, tests=bogofilter, spamicity=0.000089, 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/1/14 14:00, Barry Song wrote: >>>>               if (!pvmw.pte) { >>>> +                     lazyfree = folio_test_anon(folio) && !folio_test_swapbacked(folio); >>> >>> You've checked lazyfree here, so can we remove the duplicate check in >>> unmap_huge_pmd_locked()? Then the code should be: >>> >>>                 if (lazyfree && unmap_huge_pmd_locked(...)) >>>                         goto walk_done; >> >> >> right. it seems unmap_huge_pmd_locked() only handles lazyfree pmd-mapped >> thp. so i guess the code could be: >> >> diff --git a/mm/huge_memory.c b/mm/huge_memory.c >> index aea49f7125f1..c4c3a7896de4 100644 >> --- a/mm/huge_memory.c >> +++ b/mm/huge_memory.c >> @@ -3131,11 +3131,10 @@ bool unmap_huge_pmd_locked(struct vm_area_struct *vma, unsigned long addr, >>         VM_WARN_ON_FOLIO(!folio_test_pmd_mappable(folio), folio); >>         VM_WARN_ON_FOLIO(!folio_test_locked(folio), folio); >>         VM_WARN_ON_ONCE(!IS_ALIGNED(addr, HPAGE_PMD_SIZE)); >> +       VM_WARN_ON_FOLIO(!folio_test_anon(folio), folio); >> +       VM_WARN_ON_FOLIO(folio_test_swapbacked(folio), folio); >> >> -       if (folio_test_anon(folio) && !folio_test_swapbacked(folio)) >> -               return __discard_anon_folio_pmd_locked(vma, addr, pmdp, folio); >> - >> -       return false; >> +       return __discard_anon_folio_pmd_locked(vma, addr, pmdp, folio); >>  } >> >>  static void remap_page(struct folio *folio, unsigned long nr, int flags) >> diff --git a/mm/rmap.c b/mm/rmap.c >> index 02c4e4b2cd7b..72907eb1b8fe 100644 >> --- a/mm/rmap.c >> +++ b/mm/rmap.c >> @@ -1671,7 +1671,7 @@ static bool try_to_unmap_one(struct folio *folio, struct vm_area_struct *vma, >>         DEFINE_FOLIO_VMA_WALK(pvmw, folio, vma, address, 0); >>         pte_t pteval; >>         struct page *subpage; >> -       bool anon_exclusive, lazyfree, ret = true; >> +       bool anon_exclusive, ret = true; >>         struct mmu_notifier_range range; >>         enum ttu_flags flags = (enum ttu_flags)(long)arg; >>         int nr_pages = 1; >> @@ -1724,18 +1724,16 @@ static bool try_to_unmap_one(struct folio *folio, struct vm_area_struct *vma, >>                 } >> >>                 if (!pvmw.pte) { >> -                       lazyfree = folio_test_anon(folio) && !folio_test_swapbacked(folio); >> - >> -                       if (unmap_huge_pmd_locked(vma, pvmw.address, pvmw.pmd, >> -                                                 folio)) >> -                               goto walk_done; >> -                       /* >> -                        * unmap_huge_pmd_locked has either already marked >> -                        * the folio as swap-backed or decided to retain it >> -                        * due to GUP or speculative references. >> -                        */ >> -                       if (lazyfree) >> +                       if (folio_test_anon(folio) && !folio_test_swapbacked(folio)) { >> +                               if (unmap_huge_pmd_locked(vma, pvmw.address, pvmw.pmd, folio)) >> +                                       goto walk_done; >> +                               /* >> +                                * unmap_huge_pmd_locked has either already marked >> +                                * the folio as swap-backed or decided to retain it >> +                                * due to GUP or speculative references. >> +                                */ >>                                 goto walk_abort; >> +                       } >> >>                         if (flags & TTU_SPLIT_HUGE_PMD) { >>                                 /* >> >>> >>>>                       if (unmap_huge_pmd_locked(vma, pvmw.address, pvmw.pmd, >>>>                                                 folio)) >>>>                               goto walk_done; >>>> +                     /* >>>> +                      * unmap_huge_pmd_locked has either already marked >>>> +                      * the folio as swap-backed or decided to retain it >>>> +                      * due to GUP or speculative references. >>>> +                      */ >>>> +                     if (lazyfree) >>>> +                             goto walk_abort; >>>> >>>>                       if (flags & TTU_SPLIT_HUGE_PMD) { >>>>                               /* > > > > The final diff is as follows. > Baolin, do you have any additional comments before I send out v3? No other comments. Look good to me.