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 D7030C4167B for ; Fri, 30 Dec 2022 01:36:35 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4D8DD8E0003; Thu, 29 Dec 2022 20:36:35 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 489988E0001; Thu, 29 Dec 2022 20:36:35 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 351F68E0003; Thu, 29 Dec 2022 20:36:35 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 26B408E0001 for ; Thu, 29 Dec 2022 20:36:35 -0500 (EST) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 7B28D8094D for ; Fri, 30 Dec 2022 01:36:34 +0000 (UTC) X-FDA: 80297257908.20.D6DC0E9 Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by imf21.hostedemail.com (Postfix) with ESMTP id 465E31C0005 for ; Fri, 30 Dec 2022 01:36:30 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf21.hostedemail.com: domain of wangkefeng.wang@huawei.com designates 45.249.212.188 as permitted sender) smtp.mailfrom=wangkefeng.wang@huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1672364192; 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=AOX6paqs7YZVBwQRIUJVUSvr73pvUG1Bt7kd3DucYno=; b=mWJhSXUguFyXN2ulZ65XxRQEv/sF3x/BXDoPJq1wK4k2ZErUZpKx7mqUWC2Tbfqsj9C+4r rg9HEaT+8nn+Go9LnntP64DUe4xtT9IxoRhbqrPt/ncxOIkfcoh7Kh6Ls0KYdEZKs+tjCF ZDM6LKLVR+dLtB5NfFK0nlIVjYnpYj4= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf21.hostedemail.com: domain of wangkefeng.wang@huawei.com designates 45.249.212.188 as permitted sender) smtp.mailfrom=wangkefeng.wang@huawei.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1672364192; a=rsa-sha256; cv=none; b=DlTPPij5yBbyw27inSxj7aPj+CmyAJsTcz8YvTMd8V8ebCVPFEEt1DLWte8ajgxdFTP5Ad RCCbKX5aNM80FOG/0Q/jmbQDDsWCLJYTIGz0BYfH1sotu6IoxpEvR9FEqyYlmxjXncucJr ayeBYuVGvT0G8De07vM/BJvoyX13b3U= Received: from dggpemm500001.china.huawei.com (unknown [172.30.72.56]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4Njnr60fBkzRqNt; Fri, 30 Dec 2022 09:35:02 +0800 (CST) Received: from [10.174.177.243] (10.174.177.243) by dggpemm500001.china.huawei.com (7.185.36.107) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Fri, 30 Dec 2022 09:36:25 +0800 Message-ID: Date: Fri, 30 Dec 2022 09:36:25 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.5.1 Subject: Re: [PATCH] mm: huge_memory: convert split_huge_pages_all() to use a folio Content-Language: en-US To: Andrew Morton CC: , , References: <20221229122503.149083-1-wangkefeng.wang@huawei.com> <20221229152822.a283198e5df331caaac88a55@linux-foundation.org> From: Kefeng Wang In-Reply-To: <20221229152822.a283198e5df331caaac88a55@linux-foundation.org> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.174.177.243] X-ClientProxiedBy: dggems705-chm.china.huawei.com (10.3.19.182) To dggpemm500001.china.huawei.com (7.185.36.107) X-CFilter-Loop: Reflected X-Rspamd-Queue-Id: 465E31C0005 X-Rspamd-Server: rspam09 X-Rspam-User: X-Stat-Signature: 4r1cu7s46d94rjxqcpufbb9i97jn8fmx X-HE-Tag: 1672364190-124212 X-HE-Meta: U2FsdGVkX1/+Gf0wdnLmoGmKx2hednfTZN75O7hplXk/1ZtFZD6Fi3M6njd7tNYVhy+rKGG4RKCY/BO0SCh/Bz8p2I72PtoWYq7j/0yULIkwP/GxpG/bDoVZrQ2O0fin1RicfQgNMKuPwBDV/CAUnta+U2MLZ7chuMw7S5E81JdqS+z3MPeWq3PjN5YASOG+ZSJ0kSa/+ra4hbM+LqXkqONdN1/T4pozliOWGeq2fcTp8IzXyPwcTY/EPyz6qUsLMyQSRP44DPuW5bjkgX2KEYVioB2/LSOFHEejzVi9QitQnCjpCbfaiknidnJ5PsQ+fj/benDR0dosmItRHOEHnvPNvrVB2Prs3hHG0uV9q77sLZPJ97TTkWiBrnbaGOnMEmHcXGajFmBbg0i36vkh0GaREGdYTzGPcjpAikg5Y5tYt4mMWk3mhQ0KVl4Qr3/pAoY9Z7yGGNQa75PdNX0M/snokQnk2zAilzvcNSLZ9uq4yxMPg7m/Su5lLHjW6fIdWiX0sJ4oi64wDQONT6vT30+cFzSiZc4pnpgRjWiErkqPOoq7SUGkTfXhS6gIDbNCbP45fIfO3gNti7hDFX+PYqD67kUp3QmsuFb3ylL95abPzRYlP/B/oDBZ4KJfmL3AuN9XnEvNB3amIH3PC+l53O+ML0m80I5sSkR8FJvEBaWdE0yTsTY8dmwAHkjS8wMFmWiz/dQg0VEteCdVKMPbS4WiCCvMMkfNNaVrOhFrPtkacCDDDnOy8mQvFq+T3oHDbdDXX9/QohRX+tCKY67dRs1sAPWn5T0XHkN93nMtD3R9ZCI9v1I4MKJvzFXkROTWSdScR/D4KancIrvtl20R291dVRHootlQgGJEpHWdprgoNHBWK/X1pQ== 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 2022/12/30 7:28, Andrew Morton wrote: > On Thu, 29 Dec 2022 20:25:03 +0800 Kefeng Wang wrote: > >> Straightforwardly convert split_huge_pages_all() to use a folio. >> >> Signed-off-by: Kefeng Wang >> --- >> mm/huge_memory.c | 25 +++++++++++++++++-------- >> 1 file changed, 17 insertions(+), 8 deletions(-) >> >> diff --git a/mm/huge_memory.c b/mm/huge_memory.c >> index 266c4b557946..c8cbe7f62eaa 100644 >> --- a/mm/huge_memory.c >> +++ b/mm/huge_memory.c >> @@ -2932,6 +2932,7 @@ static void split_huge_pages_all(void) >> { >> struct zone *zone; >> struct page *page; >> + struct folio *folio; >> unsigned long pfn, max_zone_pfn; >> unsigned long total = 0, split = 0; >> >> @@ -2944,24 +2945,32 @@ static void split_huge_pages_all(void) >> int nr_pages; >> >> page = pfn_to_online_page(pfn); >> - if (!page || !get_page_unless_zero(page)) >> + if (!page || PageTail(page)) >> + continue; > > Why is the PageTail() test added? This function is trying to split huge pages, it traverse all the pfn, the huge page already split when we met Head page, most importantly, get_page_unless_zero() will do nothing on Tail page too. > >> + folio = page_folio(page); >> + if (!folio_try_get(folio)) >> continue; >> >> - if (zone != page_zone(page)) >> + if (unlikely(page_folio(page) != folio)) > > And this? I think this is a double check in case of page is already changed by someone else, suggested by Matthew[1] [1] https://lore.kernel.org/linux-mm/20221227195004.2809-1-sj@kernel.org/T/#m33047c152f6793bfebaa55cb1f4662fed73508d2