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.5 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,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 EAB2EC6377D for ; Thu, 22 Jul 2021 07:10:41 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 6B7D861106 for ; Thu, 22 Jul 2021 07:10:41 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6B7D861106 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id E31D66B006C; Thu, 22 Jul 2021 03:10:40 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id DE14A6B0071; Thu, 22 Jul 2021 03:10:40 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CD28F6B0072; Thu, 22 Jul 2021 03:10:40 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id AEFF56B006C for ; Thu, 22 Jul 2021 03:10:40 -0400 (EDT) Received: from smtpin15.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 595C6181AF5C7 for ; Thu, 22 Jul 2021 07:10:40 +0000 (UTC) X-FDA: 78389351040.15.01FF0C2 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf20.hostedemail.com (Postfix) with ESMTP id 80910D0028C7 for ; Thu, 22 Jul 2021 07:10:39 +0000 (UTC) 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 BF665D6E; Thu, 22 Jul 2021 00:10:38 -0700 (PDT) Received: from [10.163.65.134] (unknown [10.163.65.134]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 86CE83F66F; Thu, 22 Jul 2021 00:10:36 -0700 (PDT) Subject: Re: [PATCH v3 08/12] mm/debug_vm_pgtable: Use struct pgtable_debug_args in PMD modifying tests To: Gavin Shan , linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org, catalin.marinas@arm.com, will@kernel.org, akpm@linux-foundation.org, chuhu@redhat.com, shan.gavin@gmail.com References: <20210719130613.334901-1-gshan@redhat.com> <20210719130613.334901-9-gshan@redhat.com> <52a61d4a-f93d-af9e-4a34-d8ea7c476838@arm.com> From: Anshuman Khandual Message-ID: <876f9722-c307-560d-5efd-3613c312c7bd@arm.com> Date: Thu, 22 Jul 2021 12:41:26 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Authentication-Results: imf20.hostedemail.com; dkim=none; spf=pass (imf20.hostedemail.com: domain of anshuman.khandual@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=anshuman.khandual@arm.com; dmarc=pass (policy=none) header.from=arm.com X-Stat-Signature: e17wstwjthktnxsemowj5siw9obbk6om X-Rspamd-Queue-Id: 80910D0028C7 X-Rspamd-Server: rspam01 X-HE-Tag: 1626937839-677363 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: On 7/22/21 12:11 PM, Gavin Shan wrote: > Hi Anshuman, >=20 > On 7/22/21 3:45 PM, Anshuman Khandual wrote: >> On 7/19/21 6:36 PM, Gavin Shan wrote: >>> This uses struct pgtable_debug_args in PMD modifying tests. The alloc= ated >>> huge page is used when set_pmd_at() is used. The corresponding tests >>> are skipped if the huge page doesn't exist. Besides, the unused varia= ble >>> @pmd_aligned in debug_vm_pgtable() is dropped. >> >> Please dont drop @pmd_aligned just yet. >> >=20 > We need do so. Otherwise, there is build warning to complain > something like 'unused variable' after this patch is applied. >=20 >>> >>> Signed-off-by: Gavin Shan >>> --- >>> =C2=A0 mm/debug_vm_pgtable.c | 102 ++++++++++++++++++++--------------= -------- >>> =C2=A0 1 file changed, 48 insertions(+), 54 deletions(-) >>> >>> diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c >>> index eb6dda88e0d9..cec3cbf99a6b 100644 >>> --- a/mm/debug_vm_pgtable.c >>> +++ b/mm/debug_vm_pgtable.c >>> @@ -213,54 +213,54 @@ static void __init pmd_basic_tests(struct pgtab= le_debug_args *args, int idx) >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 WARN_ON(!pmd_bad(pmd_mkhuge(pmd))); >>> =C2=A0 } >>> =C2=A0 -static void __init pmd_advanced_tests(struct mm_struct *mm, >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 struct vm_area_= struct *vma, pmd_t *pmdp, >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 unsigned long p= fn, unsigned long vaddr, >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 pgprot_t prot, = pgtable_t pgtable) >>> +static void __init pmd_advanced_tests(struct pgtable_debug_args *arg= s) >>> =C2=A0 { >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 pmd_t pmd; >>> +=C2=A0=C2=A0=C2=A0 unsigned long vaddr =3D (args->vaddr & HPAGE_PMD_= MASK); >>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (!has_transparent_hugepage()= ) >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return; >>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 pr_debug("Validating PMD advanc= ed\n"); >>> -=C2=A0=C2=A0=C2=A0 /* Align the address wrt HPAGE_PMD_SIZE */ >>> -=C2=A0=C2=A0=C2=A0 vaddr &=3D HPAGE_PMD_MASK; >> >> Please just leave these unchanged. If has_transparent_hugepage() evalu= ates >> negative, it skips the masking operation. As mentioned earlier please = avoid >> changing the test in any manner during these transition patches. >> >=20 > Ok. >=20 >>> +=C2=A0=C2=A0=C2=A0 if (args->pmd_pfn =3D=3D ULONG_MAX) { >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 pr_debug("%s: Skipped\n",= __func__); >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return; >>> +=C2=A0=C2=A0=C2=A0 } >> >> Just return. Please dont call out "Skipped". >> >=20 > Ok. >=20 >>> =C2=A0 -=C2=A0=C2=A0=C2=A0 pgtable_trans_huge_deposit(mm, pmdp, pgtab= le); >>> +=C2=A0=C2=A0=C2=A0 pgtable_trans_huge_deposit(args->mm, args->pmdp, = args->start_ptep); >>> =C2=A0 -=C2=A0=C2=A0=C2=A0 pmd =3D pfn_pmd(pfn, prot); >>> -=C2=A0=C2=A0=C2=A0 set_pmd_at(mm, vaddr, pmdp, pmd); >>> -=C2=A0=C2=A0=C2=A0 pmdp_set_wrprotect(mm, vaddr, pmdp); >>> -=C2=A0=C2=A0=C2=A0 pmd =3D READ_ONCE(*pmdp); >>> +=C2=A0=C2=A0=C2=A0 pmd =3D pfn_pmd(args->pmd_pfn, args->page_prot); >>> +=C2=A0=C2=A0=C2=A0 set_pmd_at(args->mm, vaddr, args->pmdp, pmd); >>> +=C2=A0=C2=A0=C2=A0 pmdp_set_wrprotect(args->mm, vaddr, args->pmdp); >>> +=C2=A0=C2=A0=C2=A0 pmd =3D READ_ONCE(*(args->pmdp)); >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 WARN_ON(pmd_write(pmd)); >>> -=C2=A0=C2=A0=C2=A0 pmdp_huge_get_and_clear(mm, vaddr, pmdp); >>> -=C2=A0=C2=A0=C2=A0 pmd =3D READ_ONCE(*pmdp); >>> +=C2=A0=C2=A0=C2=A0 pmdp_huge_get_and_clear(args->mm, vaddr, args->pm= dp); >>> +=C2=A0=C2=A0=C2=A0 pmd =3D READ_ONCE(*(args->pmdp)); >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 WARN_ON(!pmd_none(pmd)); >>> =C2=A0 -=C2=A0=C2=A0=C2=A0 pmd =3D pfn_pmd(pfn, prot); >>> +=C2=A0=C2=A0=C2=A0 pmd =3D pfn_pmd(args->pmd_pfn, args->page_prot); >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 pmd =3D pmd_wrprotect(pmd); >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 pmd =3D pmd_mkclean(pmd); >>> -=C2=A0=C2=A0=C2=A0 set_pmd_at(mm, vaddr, pmdp, pmd); >>> +=C2=A0=C2=A0=C2=A0 set_pmd_at(args->mm, vaddr, args->pmdp, pmd); >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 pmd =3D pmd_mkwrite(pmd); >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 pmd =3D pmd_mkdirty(pmd); >>> -=C2=A0=C2=A0=C2=A0 pmdp_set_access_flags(vma, vaddr, pmdp, pmd, 1); >>> -=C2=A0=C2=A0=C2=A0 pmd =3D READ_ONCE(*pmdp); >>> +=C2=A0=C2=A0=C2=A0 pmdp_set_access_flags(args->vma, vaddr, args->pmd= p, pmd, 1); >>> +=C2=A0=C2=A0=C2=A0 pmd =3D READ_ONCE(*(args->pmdp)); >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 WARN_ON(!(pmd_write(pmd) && pmd_dirty(= pmd))); >>> -=C2=A0=C2=A0=C2=A0 pmdp_huge_get_and_clear_full(vma, vaddr, pmdp, 1)= ; >>> -=C2=A0=C2=A0=C2=A0 pmd =3D READ_ONCE(*pmdp); >>> +=C2=A0=C2=A0=C2=A0 pmdp_huge_get_and_clear_full(args->vma, vaddr, ar= gs->pmdp, 1); >>> +=C2=A0=C2=A0=C2=A0 pmd =3D READ_ONCE(*(args->pmdp)); >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 WARN_ON(!pmd_none(pmd)); >>> =C2=A0 -=C2=A0=C2=A0=C2=A0 pmd =3D pmd_mkhuge(pfn_pmd(pfn, prot)); >>> +=C2=A0=C2=A0=C2=A0 pmd =3D pmd_mkhuge(pfn_pmd(args->pmd_pfn, args->p= age_prot)); >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 pmd =3D pmd_mkyoung(pmd); >>> -=C2=A0=C2=A0=C2=A0 set_pmd_at(mm, vaddr, pmdp, pmd); >>> -=C2=A0=C2=A0=C2=A0 pmdp_test_and_clear_young(vma, vaddr, pmdp); >>> -=C2=A0=C2=A0=C2=A0 pmd =3D READ_ONCE(*pmdp); >>> +=C2=A0=C2=A0=C2=A0 set_pmd_at(args->mm, vaddr, args->pmdp, pmd); >>> +=C2=A0=C2=A0=C2=A0 pmdp_test_and_clear_young(args->vma, vaddr, args-= >pmdp); >>> +=C2=A0=C2=A0=C2=A0 pmd =3D READ_ONCE(*(args->pmdp)); >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 WARN_ON(pmd_young(pmd)); >>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /*=C2=A0 Clear the pte entries=C2= =A0 */ >>> -=C2=A0=C2=A0=C2=A0 pmdp_huge_get_and_clear(mm, vaddr, pmdp); >>> -=C2=A0=C2=A0=C2=A0 pgtable =3D pgtable_trans_huge_withdraw(mm, pmdp)= ; >>> +=C2=A0=C2=A0=C2=A0 pmdp_huge_get_and_clear(args->mm, vaddr, args->pm= dp); >>> +=C2=A0=C2=A0=C2=A0 pgtable_trans_huge_withdraw(args->mm, args->pmdp)= ; >>> =C2=A0 } >>> =C2=A0 =C2=A0 static void __init pmd_leaf_tests(struct pgtable_debug_= args *args) >>> @@ -417,12 +417,7 @@ static void __init pud_leaf_tests(struct pgtable= _debug_args *args) { } >>> =C2=A0 #else=C2=A0 /* !CONFIG_TRANSPARENT_HUGEPAGE */ >>> =C2=A0 static void __init pmd_basic_tests(struct pgtable_debug_args *= args, int idx) { } >>> =C2=A0 static void __init pud_basic_tests(struct pgtable_debug_args *= args, int idx) { } >>> -static void __init pmd_advanced_tests(struct mm_struct *mm, >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 struct vm_area_= struct *vma, pmd_t *pmdp, >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 unsigned long p= fn, unsigned long vaddr, >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 pgprot_t prot, = pgtable_t pgtable) >>> -{ >>> -} >>> +static void __init pmd_advanced_tests(struct pgtable_debug_args *arg= s) { } >>> =C2=A0 static void __init pud_advanced_tests(struct mm_struct *mm, >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 str= uct vm_area_struct *vma, pud_t *pudp, >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 uns= igned long pfn, unsigned long vaddr, >>> @@ -435,11 +430,11 @@ static void __init pmd_savedwrite_tests(struct = pgtable_debug_args *args) { } >>> =C2=A0 #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ >>> =C2=A0 =C2=A0 #ifdef CONFIG_HAVE_ARCH_HUGE_VMAP >>> -static void __init pmd_huge_tests(pmd_t *pmdp, unsigned long pfn, pg= prot_t prot) >>> +static void __init pmd_huge_tests(struct pgtable_debug_args *args) >>> =C2=A0 { >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 pmd_t pmd; >>> =C2=A0 -=C2=A0=C2=A0=C2=A0 if (!arch_vmap_pmd_supported(prot)) >>> +=C2=A0=C2=A0=C2=A0 if (!arch_vmap_pmd_supported(args->page_prot)) >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return; >>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 pr_debug("Validating PMD huge\n= "); >>> @@ -447,10 +442,11 @@ static void __init pmd_huge_tests(pmd_t *pmdp, = unsigned long pfn, pgprot_t prot) >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 * X86 defined pmd_set_huge() ver= ifies that the given >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 * PMD is not a populated non-lea= f entry. >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 */ >>> -=C2=A0=C2=A0=C2=A0 WRITE_ONCE(*pmdp, __pmd(0)); >>> -=C2=A0=C2=A0=C2=A0 WARN_ON(!pmd_set_huge(pmdp, __pfn_to_phys(pfn), p= rot)); >>> -=C2=A0=C2=A0=C2=A0 WARN_ON(!pmd_clear_huge(pmdp)); >>> -=C2=A0=C2=A0=C2=A0 pmd =3D READ_ONCE(*pmdp); >>> +=C2=A0=C2=A0=C2=A0 WRITE_ONCE(*(args->pmdp), __pmd(0)); >> >> Possible extra braces. >> >=20 > Will drop it in v4, thanks! >=20 >>> +=C2=A0=C2=A0=C2=A0 WARN_ON(!pmd_set_huge(args->pmdp, __pfn_to_phys(a= rgs->fixed_pmd_pfn), >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 args->page_prot)); >> >> Dont break the line. >> >=20 > Ok. >=20 >>> +=C2=A0=C2=A0=C2=A0 WARN_ON(!pmd_clear_huge(args->pmdp)); >>> +=C2=A0=C2=A0=C2=A0 pmd =3D READ_ONCE(*(args->pmdp)); >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 WARN_ON(!pmd_none(pmd)); >>> =C2=A0 } >>> =C2=A0 @@ -473,7 +469,7 @@ static void __init pud_huge_tests(pud_t *p= udp, unsigned long pfn, pgprot_t prot) >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 WARN_ON(!pud_none(pud)); >>> =C2=A0 } >>> =C2=A0 #else /* !CONFIG_HAVE_ARCH_HUGE_VMAP */ >>> -static void __init pmd_huge_tests(pmd_t *pmdp, unsigned long pfn, pg= prot_t prot) { } >>> +static void __init pmd_huge_tests(struct pgtable_debug_args *args) {= } >>> =C2=A0 static void __init pud_huge_tests(pud_t *pudp, unsigned long p= fn, pgprot_t prot) { } >>> =C2=A0 #endif /* CONFIG_HAVE_ARCH_HUGE_VMAP */ >>> =C2=A0 @@ -640,20 +636,19 @@ static void __init pte_clear_tests(struc= t pgtable_debug_args *args) >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 WARN_ON(!pte_none(pte)); >>> =C2=A0 } >>> =C2=A0 -static void __init pmd_clear_tests(struct mm_struct *mm, pmd_= t *pmdp) >>> +static void __init pmd_clear_tests(struct pgtable_debug_args *args) >>> =C2=A0 { >>> -=C2=A0=C2=A0=C2=A0 pmd_t pmd =3D READ_ONCE(*pmdp); >>> +=C2=A0=C2=A0=C2=A0 pmd_t pmd =3D READ_ONCE(*(args->pmdp)); >>> =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 pr_debug("Validating PMD clear\= n"); >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 pmd =3D __pmd(pmd_val(pmd) | RANDOM_OR= VALUE); >>> -=C2=A0=C2=A0=C2=A0 WRITE_ONCE(*pmdp, pmd); >>> -=C2=A0=C2=A0=C2=A0 pmd_clear(pmdp); >>> -=C2=A0=C2=A0=C2=A0 pmd =3D READ_ONCE(*pmdp); >>> +=C2=A0=C2=A0=C2=A0 WRITE_ONCE(*(args->pmdp), pmd); >>> +=C2=A0=C2=A0=C2=A0 pmd_clear(args->pmdp); >>> +=C2=A0=C2=A0=C2=A0 pmd =3D READ_ONCE(*(args->pmdp)); >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 WARN_ON(!pmd_none(pmd)); >>> =C2=A0 } >>> =C2=A0 -static void __init pmd_populate_tests(struct mm_struct *mm, p= md_t *pmdp, >>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 pgtable_t pgtab= le) >>> +static void __init pmd_populate_tests(struct pgtable_debug_args *arg= s) >>> =C2=A0 { >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 pmd_t pmd; >>> =C2=A0 @@ -662,8 +657,8 @@ static void __init pmd_populate_tests(stru= ct mm_struct *mm, pmd_t *pmdp, >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 * This entry points to next leve= l page table page. >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 * Hence this must not qualify as= pmd_bad(). >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 */ >>> -=C2=A0=C2=A0=C2=A0 pmd_populate(mm, pmdp, pgtable); >>> -=C2=A0=C2=A0=C2=A0 pmd =3D READ_ONCE(*pmdp); >>> +=C2=A0=C2=A0=C2=A0 pmd_populate(args->mm, args->pmdp, args->start_pt= ep); >>> +=C2=A0=C2=A0=C2=A0 pmd =3D READ_ONCE(*(args->pmdp)); >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 WARN_ON(pmd_bad(pmd)); >>> =C2=A0 } >>> =C2=A0 @@ -1159,7 +1154,7 @@ static int __init debug_vm_pgtable(void) >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 pgtable_t saved_ptep; >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 pgprot_t prot; >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 phys_addr_t paddr; >>> -=C2=A0=C2=A0=C2=A0 unsigned long vaddr, pmd_aligned; >>> +=C2=A0=C2=A0=C2=A0 unsigned long vaddr; >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 unsigned long pud_aligned; >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 spinlock_t *ptl =3D NULL; >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 int idx, ret; >>> @@ -1194,7 +1189,6 @@ static int __init debug_vm_pgtable(void) >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 */ >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 paddr =3D __pa_symbol(&start_kernel); >>> =C2=A0 -=C2=A0=C2=A0=C2=A0 pmd_aligned =3D (paddr & PMD_MASK) >> PAGE= _SHIFT; >> >> Please dont drop these just yet and wait until [PATCH 11/12]. >> >=20 > Otherwise, it causes build warning: 'unused variable'. Why ? Just the evaluation of 'pmd_aligned' from 'paddr' should be enough to avoid such warning. 'pmd_aligned' need not be used afterwards.