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 X-Spam-Level: X-Spam-Status: No, score=-15.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_RED, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 62662C433ED for ; Tue, 18 May 2021 09:01:33 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 7956160720 for ; Tue, 18 May 2021 09:01:32 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7956160720 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=csgroup.eu Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id E96B08E001D; Tue, 18 May 2021 05:01:31 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E463F8E000C; Tue, 18 May 2021 05:01:31 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CE7A28E001D; Tue, 18 May 2021 05:01:31 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0064.hostedemail.com [216.40.44.64]) by kanga.kvack.org (Postfix) with ESMTP id 9B7288E000C for ; Tue, 18 May 2021 05:01:31 -0400 (EDT) Received: from smtpin30.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 2A31418023441 for ; Tue, 18 May 2021 09:01:31 +0000 (UTC) X-FDA: 78153758382.30.D0F442C Received: from pegase2.c-s.fr (pegase2.c-s.fr [93.17.235.10]) by imf04.hostedemail.com (Postfix) with ESMTP id CDA303E4 for ; Tue, 18 May 2021 09:01:28 +0000 (UTC) Received: from localhost (mailhub3.si.c-s.fr [172.26.127.67]) by localhost (Postfix) with ESMTP id 4Fkqk01r05z9sbL; Tue, 18 May 2021 11:01:28 +0200 (CEST) X-Virus-Scanned: amavisd-new at c-s.fr Received: from pegase2.c-s.fr ([172.26.127.65]) by localhost (pegase2.c-s.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id LEGm9-PSOJWb; Tue, 18 May 2021 11:01:28 +0200 (CEST) Received: from messagerie.si.c-s.fr (messagerie.si.c-s.fr [192.168.25.192]) by pegase2.c-s.fr (Postfix) with ESMTP id 4Fkqjv3lNPz9sbT; Tue, 18 May 2021 11:01:23 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 5C4A58B819; Tue, 18 May 2021 11:01:22 +0200 (CEST) X-Virus-Scanned: amavisd-new at c-s.fr Received: from messagerie.si.c-s.fr ([127.0.0.1]) by localhost (messagerie.si.c-s.fr [127.0.0.1]) (amavisd-new, port 10023) with ESMTP id vKD_Uu4orUkb; Tue, 18 May 2021 11:01:22 +0200 (CEST) Received: from [192.168.4.90] (unknown [192.168.4.90]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 476D58B826; Tue, 18 May 2021 10:50:46 +0200 (CEST) Subject: Re: [PATCH] mm/debug_vm_pgtable: Ensure THP availability via has_transparent_hugepage() To: Anshuman Khandual , linux-mm@kvack.org, akpm@linux-foundation.org Cc: "Aneesh Kumar K . V" , linux-kernel@vger.kernel.org References: <1621325590-18199-1-git-send-email-anshuman.khandual@arm.com> From: Christophe Leroy Message-ID: <8b9cb771-8fa1-4fc2-bb45-20673240edd8@csgroup.eu> Date: Tue, 18 May 2021 10:50:18 +0200 User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 MIME-Version: 1.0 In-Reply-To: <1621325590-18199-1-git-send-email-anshuman.khandual@arm.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: fr X-Rspamd-Queue-Id: CDA303E4 Authentication-Results: imf04.hostedemail.com; dkim=none; spf=pass (imf04.hostedemail.com: domain of christophe.leroy@csgroup.eu designates 93.17.235.10 as permitted sender) smtp.mailfrom=christophe.leroy@csgroup.eu; dmarc=none X-Rspamd-Server: rspam03 X-Stat-Signature: eeuy4d8w1k5xxeucwd1nmckspp3fosz5 X-HE-Tag: 1621328488-486101 Content-Transfer-Encoding: quoted-printable 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: Le 18/05/2021 =C3=A0 10:13, Anshuman Khandual a =C3=A9crit=C2=A0: > On certain platforms, THP support could not just be validated via the b= uild > option CONFIG_TRANSPARENT_HUGEPAGE. Instead has_transparent_hugepage() = also > needs to be called upon to verify THP runtime support. Otherwise the de= bug > test might just run into unusable THP helpers like in the case of a 4K = hash s/might/will/ > config on powerpc platform [1]. This just moves all pfn_pmd() and pfn_p= ud() > after THP runtime validation with has_transparent_hugepage() which prev= ents > the mentioned problem. >=20 > [1] https://bugzilla.kernel.org/show_bug.cgi?id=3D213069 >=20 > Cc: Aneesh Kumar K.V > Cc: Christophe Leroy > Cc: Andrew Morton > Cc: linux-mm@kvack.org > Cc: linux-kernel@vger.kernel.org > Signed-off-by: Anshuman Khandual There should be a Fixes: tag > --- > This applies on v5.13-rc2 after the following patches. >=20 > [1] https://lore.kernel.org/linux-mm/20210419071820.750217-1-liushixin2= @huawei.com/ > [2] https://lore.kernel.org/linux-mm/20210419071820.750217-2-liushixin2= @huawei.com/ I can't see any fixes: tag in those patches, and their subject line even = targets them to -next. Are=20 they meant to go to 5.13 and stable ? If not, how do you coordinate between your patch that must go in 5.13 and= in stable, and those two=20 patches ? Shouldn't your patch go first and those other patches be rebase= d on top ? >=20 > mm/debug_vm_pgtable.c | 58 +++++++++++++++++++++++++++++++++++-------= - > 1 file changed, 48 insertions(+), 10 deletions(-) >=20 > diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c > index e2f35db8ba69..6ff92c8b0a00 100644 > --- a/mm/debug_vm_pgtable.c > +++ b/mm/debug_vm_pgtable.c > @@ -146,13 +146,14 @@ static void __init pte_savedwrite_tests(unsigned = long pfn, pgprot_t prot) > static void __init pmd_basic_tests(unsigned long pfn, int idx) > { > pgprot_t prot =3D protection_map[idx]; > - pmd_t pmd =3D pfn_pmd(pfn, prot); > unsigned long val =3D idx, *ptr =3D &val; > + pmd_t pmd; > =20 > if (!has_transparent_hugepage()) > return; > =20 > pr_debug("Validating PMD basic (%pGv)\n", ptr); > + pmd =3D pfn_pmd(pfn, prot); > =20 > /* > * This test needs to be executed after the given page table entry > @@ -232,9 +233,14 @@ static void __init pmd_advanced_tests(struct mm_st= ruct *mm, > =20 > static void __init pmd_leaf_tests(unsigned long pfn, pgprot_t prot) > { > - pmd_t pmd =3D pfn_pmd(pfn, prot); > + pmd_t pmd; > + > + if (!has_transparent_hugepage()) > + return; > =20 > pr_debug("Validating PMD leaf\n"); > + pmd =3D pfn_pmd(pfn, prot); > + > /* > * PMD based THP is a leaf entry. > */ > @@ -244,12 +250,16 @@ static void __init pmd_leaf_tests(unsigned long p= fn, pgprot_t prot) > =20 > static void __init pmd_savedwrite_tests(unsigned long pfn, pgprot_t p= rot) > { > - pmd_t pmd =3D pfn_pmd(pfn, prot); > + pmd_t pmd; > =20 > if (!IS_ENABLED(CONFIG_NUMA_BALANCING)) > return; > =20 > + if (!has_transparent_hugepage()) > + return; > + > pr_debug("Validating PMD saved write\n"); > + pmd =3D pfn_pmd(pfn, prot); > WARN_ON(!pmd_savedwrite(pmd_mk_savedwrite(pmd_clear_savedwrite(pmd))= )); > WARN_ON(pmd_savedwrite(pmd_clear_savedwrite(pmd_mk_savedwrite(pmd)))= ); > } > @@ -258,13 +268,14 @@ static void __init pmd_savedwrite_tests(unsigned = long pfn, pgprot_t prot) > static void __init pud_basic_tests(struct mm_struct *mm, unsigned lon= g pfn, int idx) > { > pgprot_t prot =3D protection_map[idx]; > - pud_t pud =3D pfn_pud(pfn, prot); > unsigned long val =3D idx, *ptr =3D &val; > + pud_t pud; > =20 > if (!has_transparent_hugepage()) > return; > =20 > pr_debug("Validating PUD basic (%pGv)\n", ptr); > + pud =3D pfn_pud(pfn, prot); > =20 > /* > * This test needs to be executed after the given page table entry > @@ -348,9 +359,13 @@ static void __init pud_advanced_tests(struct mm_st= ruct *mm, > =20 > static void __init pud_leaf_tests(unsigned long pfn, pgprot_t prot) > { > - pud_t pud =3D pfn_pud(pfn, prot); > + pud_t pud; > + > + if (!has_transparent_hugepage()) > + return; > =20 > pr_debug("Validating PUD leaf\n"); > + pud =3D pfn_pud(pfn, prot); > /* > * PUD based THP is a leaf entry. > */ > @@ -642,12 +657,16 @@ static void __init pte_protnone_tests(unsigned lo= ng pfn, pgprot_t prot) > #ifdef CONFIG_TRANSPARENT_HUGEPAGE > static void __init pmd_protnone_tests(unsigned long pfn, pgprot_t pro= t) > { > - pmd_t pmd =3D pmd_mkhuge(pfn_pmd(pfn, prot)); > + pmd_t pmd; > =20 > if (!IS_ENABLED(CONFIG_NUMA_BALANCING)) > return; > =20 > + if (!has_transparent_hugepage()) > + return; > + > pr_debug("Validating PMD protnone\n"); > + pmd =3D pmd_mkhuge(pfn_pmd(pfn, prot)); > WARN_ON(!pmd_protnone(pmd)); > WARN_ON(!pmd_present(pmd)); > } > @@ -667,18 +686,26 @@ static void __init pte_devmap_tests(unsigned long= pfn, pgprot_t prot) > #ifdef CONFIG_TRANSPARENT_HUGEPAGE > static void __init pmd_devmap_tests(unsigned long pfn, pgprot_t prot) > { > - pmd_t pmd =3D pfn_pmd(pfn, prot); > + pmd_t pmd; > + > + if (!has_transparent_hugepage()) > + return; > =20 > pr_debug("Validating PMD devmap\n"); > + pmd =3D pfn_pmd(pfn, prot); > WARN_ON(!pmd_devmap(pmd_mkdevmap(pmd))); > } > =20 > #ifdef CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD > static void __init pud_devmap_tests(unsigned long pfn, pgprot_t prot) > { > - pud_t pud =3D pfn_pud(pfn, prot); > + pud_t pud; > + > + if (!has_transparent_hugepage()) > + return; > =20 > pr_debug("Validating PUD devmap\n"); > + pud =3D pfn_pud(pfn, prot); > WARN_ON(!pud_devmap(pud_mkdevmap(pud))); > } > #else /* !CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD */ > @@ -721,25 +748,33 @@ static void __init pte_swap_soft_dirty_tests(unsi= gned long pfn, pgprot_t prot) > #ifdef CONFIG_TRANSPARENT_HUGEPAGE > static void __init pmd_soft_dirty_tests(unsigned long pfn, pgprot_t p= rot) > { > - pmd_t pmd =3D pfn_pmd(pfn, prot); > + pmd_t pmd; > =20 > if (!IS_ENABLED(CONFIG_MEM_SOFT_DIRTY)) > return; > =20 > + if (!has_transparent_hugepage()) > + return; > + > pr_debug("Validating PMD soft dirty\n"); > + pmd =3D pfn_pmd(pfn, prot); > WARN_ON(!pmd_soft_dirty(pmd_mksoft_dirty(pmd))); > WARN_ON(pmd_soft_dirty(pmd_clear_soft_dirty(pmd))); > } > =20 > static void __init pmd_swap_soft_dirty_tests(unsigned long pfn, pgpro= t_t prot) > { > - pmd_t pmd =3D pfn_pmd(pfn, prot); > + pmd_t pmd; > =20 > if (!IS_ENABLED(CONFIG_MEM_SOFT_DIRTY) || > !IS_ENABLED(CONFIG_ARCH_ENABLE_THP_MIGRATION)) > return; > =20 > + if (!has_transparent_hugepage()) > + return; > + > pr_debug("Validating PMD swap soft dirty\n"); > + pmd =3D pfn_pmd(pfn, prot); > WARN_ON(!pmd_swp_soft_dirty(pmd_swp_mksoft_dirty(pmd))); > WARN_ON(pmd_swp_soft_dirty(pmd_swp_clear_soft_dirty(pmd))); > } > @@ -768,6 +803,9 @@ static void __init pmd_swap_tests(unsigned long pfn= , pgprot_t prot) > swp_entry_t swp; > pmd_t pmd; > =20 > + if (!has_transparent_hugepage()) > + return; > + > pr_debug("Validating PMD swap\n"); > pmd =3D pfn_pmd(pfn, prot); > swp =3D __pmd_to_swp_entry(pmd); >=20