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 D8196C3DA64 for ; Tue, 6 Aug 2024 09:46:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2DE8E6B007B; Tue, 6 Aug 2024 05:46:09 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 240406B0082; Tue, 6 Aug 2024 05:46:09 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0B9656B0083; Tue, 6 Aug 2024 05:46:09 -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 DE8A16B007B for ; Tue, 6 Aug 2024 05:46:08 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 54A441408F8 for ; Tue, 6 Aug 2024 09:46:08 +0000 (UTC) X-FDA: 82421339616.22.7B654C7 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf19.hostedemail.com (Postfix) with ESMTP id 55F901A0009 for ; Tue, 6 Aug 2024 09:46:06 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf19.hostedemail.com: domain of ryan.roberts@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=ryan.roberts@arm.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1722937558; a=rsa-sha256; cv=none; b=xFxJb1yyqcwMfuOl+DVlP5911d9yVzDhAzDnOIooW111bsep1UGqr4EcT/VOll0eiFNigp 5rmp0iAKN2J04JwINOTmkkcHwKy3pRyhwzLB1UHWEvFnRYJBuxFkH64GEO9yEAlpY+efaS Z5TnuTdQHLyPD6XBNwb9otHs5DmF8rs= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf19.hostedemail.com: domain of ryan.roberts@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=ryan.roberts@arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1722937558; 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; bh=Sm6ja9eqlWeiFEi+OVqDDaNXVQ5JqRMJBxYbShJkS54=; b=F5ZFfDfftER7pm0MuscMrKCV1OMuWTQpicts96B5Hb0MKlfGE6J8vYDErXhG/YTizkyv/b FMpMrx194VPJivxc0Rlv7RwrF/k9CIzfVtVWJXkSvx97UIVejqbcWHSk+68kNjpIy30pwk ZL5g+Qwxw7dGFgYHXK4fVJHvfTY/hs0= Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 205221063; Tue, 6 Aug 2024 02:46:31 -0700 (PDT) Received: from [10.57.81.200] (unknown [10.57.81.200]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 7451C3F6A8; Tue, 6 Aug 2024 02:46:02 -0700 (PDT) Message-ID: Date: Tue, 6 Aug 2024 10:46:00 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v1 07/11] mm/huge_memory: convert split_huge_pages_pid() from follow_page() to folio_walk Content-Language: en-GB To: David Hildenbrand , linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-s390@vger.kernel.org, linux-fsdevel@vger.kernel.org, Andrew Morton , "Matthew Wilcox (Oracle)" , Jonathan Corbet , Christian Borntraeger , Janosch Frank , Claudio Imbrenda , Heiko Carstens , Vasily Gorbik , Alexander Gordeev , Sven Schnelle , Gerald Schaefer , Mark Brown References: <20240802155524.517137-1-david@redhat.com> <20240802155524.517137-8-david@redhat.com> From: Ryan Roberts In-Reply-To: <20240802155524.517137-8-david@redhat.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Rspam-User: X-Rspamd-Queue-Id: 55F901A0009 X-Rspamd-Server: rspam01 X-Stat-Signature: qwdu3c89xhoiwbu6kma4nyquxr6xydqn X-HE-Tag: 1722937566-564159 X-HE-Meta: U2FsdGVkX18uZiMUWhTQoJ3CqKrmEEAaiIXlOiv4SLxJScmj3JeTvnG4xmW3BBPju4Lh/3BFFsrxMs+u2OzBs5ZDzbws+EB6F5Hx+PBIw20E8AaBZqNCk4ii3pEasDWoOMrejh+snh3U8SYDnbQVzV4mIs2gv/Lav7QDhHUxUvNS1UmXY5PtlwqETWt+aao2oOaoBojR/LYpHvlP47kPWuE6M20rD0lSUZfzqG4kwABFbBVM5SU/Mje3+QIEMxMn6OhmBJSWqQeKI7mSD6CZDeWs8xhVyeVK5x0uLZpcgPP1d0Wb0n5oF3vl/3fjulxC484NBe1oNpo2OaD8GgIafGdTuCWU7ODIk/MmDNHP1XpAN9QlKRAe7PHYUB1TzR2/bqTEgmj8gYqLrDyqPuTYxcFbU3DBWt01Rb4opeEer2YXNIFh3ZCCt/09IvwrvtV2cNfZlxfl3YEZKNjOlaiIH9UsQ1ZKWKhiltpHI94FclbVZzZ4QdZEhhVIQNJv5kNg84Ht62GNNMFHfjiZb1qKrSHAP4RQa8gP4m9WB4TiHUAv6b7uKZEMKgIO+jMu5FuDxd3Z38/Pge9rCgXXTQIo/vV/pC7J2ITrdtaj8OZIY3HeIQfOy87ASmRb8abJdVP5jFoYE9wDN+td3G/tbaN9DGIe14rG2AdB+ukfApAssFvXuLYdAE1sfgxLF0TwlrVIdPt7v23SEagLa3af8KA4ZiZZeHtJUNwI8y/UnjZsNOw/y+sSmj1S52sn+kUBWk5fUXAuCgCwI4kzwUpaXCTNht20IyFxjlq4c7DJjhCuyNozyL0tZX3jbxqt75yVKrp/rI2bMybXI5h04xH2M4MudGKzjIrhBDB+SckMPdSF2fCrz3V5i+33pG0xLjb20iBaWHsch8GFQ5Wx5zf1zrBzuW2Ljigk6OgDTJxrks9KTnF+gvF90znZC0NGT4y9y+6JHSO1D2+ZHwydKnqTcYH /oXnTqll tHx7hwb7YbFuvIhTkvqkSvb3ChFjk86bpUCckVAZu6ycLXt0QE/mqgp8rVc9csMTGUOAICOtDHH8qMNg1dKcr61zntxbGyYwXa2ihBW/JEQVBSUaotgdNbchzqKKF9k8mv+6a/Wm5YBK4dpvtusS5jK6Bo6XHGc8ofh51ZVLk2PP1ZRPcrDfwlcSSpo0jfJJthtXGeO5XtWKprwHp5E13Ph9RF9vHOB3CDrdwWcEqBcME/FDQhgac2EoGbouN90a6SkRj3zhPViGPYgW2wdhyjYyNSHiY6UHfLX7qbW8DUF0PAx9fUn96oVC9jx8x8a34adxOKlp5BkTuf2Dwb1jOTyARfx7Tt7a+FFUKWNhf3j3A1Oo= 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 02/08/2024 16:55, David Hildenbrand wrote: > Let's remove yet another follow_page() user. Note that we have to do the > split without holding the PTL, after folio_walk_end(). We don't care > about losing the secretmem check in follow_page(). Hi David, Our (arm64) CI is showing a regression in split_huge_page_test from mm selftests from next-20240805 onwards. Navigating around a couple of other lurking bugs, I was able to bisect to this change (which smells about right). Newly failing test: # # ------------------------------ # # running ./split_huge_page_test # # ------------------------------ # # TAP version 13 # # 1..12 # # Bail out! Still AnonHugePages not split # # # Planned tests != run tests (12 != 0) # # # Totals: pass:0 fail:0 xfail:0 xpass:0 skip:0 error:0 # # [FAIL] # not ok 52 split_huge_page_test # exit=1 It's trying to split some pmd-mapped THPs then checking and finding that they are not split. The split is requested via /sys/kernel/debug/split_huge_pages, which I believe ends up in this function you are modifying here. Although I'll admit that looking at the change, there is nothing obviously wrong! Any ideas? bisect log: # bad: [1e391b34f6aa043c7afa40a2103163a0ef06d179] Add linux-next specific files for 20240806 git bisect bad 1e391b34f6aa043c7afa40a2103163a0ef06d179 # good: [de9c2c66ad8e787abec7c9d7eff4f8c3cdd28aed] Linux 6.11-rc2 git bisect good de9c2c66ad8e787abec7c9d7eff4f8c3cdd28aed # bad: [01c2d56f2c52e8af01dfd91af1fe9affc76c4c9e] Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git git bisect bad 01c2d56f2c52e8af01dfd91af1fe9affc76c4c9e # bad: [01c2d56f2c52e8af01dfd91af1fe9affc76c4c9e] Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git git bisect bad 01c2d56f2c52e8af01dfd91af1fe9affc76c4c9e # bad: [3610638e967f32f02c56c7cc8f7d6a815972f8c2] Merge branch 'for-linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/sudeep.holla/linux.git git bisect bad 3610638e967f32f02c56c7cc8f7d6a815972f8c2 # bad: [3610638e967f32f02c56c7cc8f7d6a815972f8c2] Merge branch 'for-linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/sudeep.holla/linux.git git bisect bad 3610638e967f32f02c56c7cc8f7d6a815972f8c2 # bad: [d35ef6c9d106eedff36908c21699e1b7f3e55584] Merge branch 'clang-format' of https://github.com/ojeda/linux.git git bisect bad d35ef6c9d106eedff36908c21699e1b7f3e55584 # good: [e1a15959d75c9ba4b45e07e37bcf843c85750010] Merge branch 'for-linux-next-fixes' of https://gitlab.freedesktop.org/drm/misc/kernel.git git bisect good e1a15959d75c9ba4b45e07e37bcf843c85750010 # good: [6d66cb9bdeceb769ce62591f56580ebe80f6267a] mm: swap: add a adaptive full cluster cache reclaim git bisect good 6d66cb9bdeceb769ce62591f56580ebe80f6267a # bad: [2b820b576dfc4aa9b65f18b68f468cb5b38ece84] mm: optimization on page allocation when CMA enabled git bisect bad 2b820b576dfc4aa9b65f18b68f468cb5b38ece84 # bad: [ab70279848c8623027791799492a3f6e7c38a9b2] MIPS: sgi-ip27: drop HAVE_ARCH_NODEDATA_EXTENSION git bisect bad ab70279848c8623027791799492a3f6e7c38a9b2 # bad: [539bc09ff00b29eb60f3dc8ed2d82ad2050a582d] mm/huge_memory: convert split_huge_pages_pid() from follow_page() to folio_walk git bisect bad 539bc09ff00b29eb60f3dc8ed2d82ad2050a582d # good: [1a37544d0e35340ce740d377d7d6c746a84e2aae] include/linux/mmzone.h: clean up watermark accessors git bisect good 1a37544d0e35340ce740d377d7d6c746a84e2aae # good: [22adafb60d6e1a607a3d99da90927ddd7df928ad] mm/migrate: convert do_pages_stat_array() from follow_page() to folio_walk git bisect good 22adafb60d6e1a607a3d99da90927ddd7df928ad # good: [57e1ccf54dba4dda6d6f0264b76e2b86eec3d401] mm/ksm: convert get_mergeable_page() from follow_page() to folio_walk git bisect good 57e1ccf54dba4dda6d6f0264b76e2b86eec3d401 # good: [285aa1a963f310530351b0e4a2e64bc4b806e518] mm/ksm: convert scan_get_next_rmap_item() from follow_page() to folio_walk git bisect good 285aa1a963f310530351b0e4a2e64bc4b806e518 # first bad commit: [539bc09ff00b29eb60f3dc8ed2d82ad2050a582d] mm/huge_memory: convert split_huge_pages_pid() from follow_page() to folio_walk Thanks, Ryan > > Signed-off-by: David Hildenbrand > --- > mm/huge_memory.c | 18 +++++++++++------- > 1 file changed, 11 insertions(+), 7 deletions(-) > > diff --git a/mm/huge_memory.c b/mm/huge_memory.c > index 0167dc27e365..697fcf89f975 100644 > --- a/mm/huge_memory.c > +++ b/mm/huge_memory.c > @@ -40,6 +40,7 @@ > #include > #include > #include > +#include > > #include > #include > @@ -3507,7 +3508,7 @@ static int split_huge_pages_pid(int pid, unsigned long vaddr_start, > */ > for (addr = vaddr_start; addr < vaddr_end; addr += PAGE_SIZE) { > struct vm_area_struct *vma = vma_lookup(mm, addr); > - struct page *page; > + struct folio_walk fw; > struct folio *folio; > > if (!vma) > @@ -3519,13 +3520,10 @@ static int split_huge_pages_pid(int pid, unsigned long vaddr_start, > continue; > } > > - /* FOLL_DUMP to ignore special (like zero) pages */ > - page = follow_page(vma, addr, FOLL_GET | FOLL_DUMP); > - > - if (IS_ERR_OR_NULL(page)) > + folio = folio_walk_start(&fw, vma, addr, 0); > + if (!folio) > continue; > > - folio = page_folio(page); > if (!is_transparent_hugepage(folio)) > goto next; > > @@ -3544,13 +3542,19 @@ static int split_huge_pages_pid(int pid, unsigned long vaddr_start, > > if (!folio_trylock(folio)) > goto next; > + folio_get(folio); > + folio_walk_end(&fw, vma); > > if (!split_folio_to_order(folio, new_order)) > split++; > > folio_unlock(folio); > -next: > folio_put(folio); > + > + cond_resched(); > + continue; > +next: > + folio_walk_end(&fw, vma); > cond_resched(); > } > mmap_read_unlock(mm);