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=-5.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,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 3EDFBC5DF60 for ; Wed, 6 Nov 2019 03:03:52 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id B51CA21D7F for ; Wed, 6 Nov 2019 03:03:51 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B51CA21D7F Authentication-Results: mail.kernel.org; dmarc=none (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 61A026B0007; Tue, 5 Nov 2019 22:03:51 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 5CA436B0008; Tue, 5 Nov 2019 22:03:51 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4B7CD6B000A; Tue, 5 Nov 2019 22:03:51 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0074.hostedemail.com [216.40.44.74]) by kanga.kvack.org (Postfix) with ESMTP id 322ED6B0007 for ; Tue, 5 Nov 2019 22:03:51 -0500 (EST) Received: from smtpin05.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with SMTP id E69B9181AEF15 for ; Wed, 6 Nov 2019 03:03:50 +0000 (UTC) X-FDA: 76124357820.05.bell28_3e5bca5196953 X-HE-Tag: bell28_3e5bca5196953 X-Filterd-Recvd-Size: 8555 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf43.hostedemail.com (Postfix) with ESMTP for ; Wed, 6 Nov 2019 03:03:48 +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 1394D30E; Tue, 5 Nov 2019 19:03:44 -0800 (PST) Received: from [192.168.225.149] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id EAE593F719; Tue, 5 Nov 2019 19:03:20 -0800 (PST) Subject: Re: [PATCH V8] mm/debug: Add tests validating architecture page table helpers To: Vineet Gupta , "linux-mm@kvack.org" , Andrew Morton Cc: Vlastimil Babka , Greg Kroah-Hartman , Thomas Gleixner , Mike Rapoport , Jason Gunthorpe , Dan Williams , Peter Zijlstra , Michal Hocko , Mark Rutland , Mark Brown , Steven Price , Ard Biesheuvel , Masahiro Yamada , Kees Cook , Tetsuo Handa , Matthew Wilcox , Sri Krishna chowdary , Dave Hansen , Russell King - ARM Linux , Michael Ellerman , Paul Mackerras , Martin Schwidefsky , Heiko Carstens , "David S. Miller" , James Hogan , Paul Burton , Ralf Baechle , "Kirill A . Shutemov" , Gerald Schaefer , Christophe Leroy , Ingo Molnar , "linux-snps-arc@lists.infradead.org" , "linux-mips@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-ia64@vger.kernel.org" , "linuxppc-dev@lists.ozlabs.org" , "linux-s390@vger.kernel.org" , "linux-sh@vger.kernel.org" , "sparclinux@vger.kernel.org" , "x86@kernel.org" , "linux-kernel@vger.kernel.org" References: <1572240562-23630-1-git-send-email-anshuman.khandual@arm.com> From: Anshuman Khandual Message-ID: Date: Wed, 6 Nov 2019 08:33:52 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US 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 11/06/2019 04:00 AM, Vineet Gupta wrote: > Hi Anshuman, Hello Vineet, >=20 > On 11/4/19 4:00 PM, Anshuman Khandual wrote: >> On 10/28/2019 10:59 AM, Anshuman Khandual wrote: >>> This adds tests which will validate architecture page table helpers a= nd >>> other accessors in their compliance with expected generic MM semantic= s. >>> This will help various architectures in validating changes to existin= g >>> page table helpers or addition of new ones. >>> >>> This test covers basic page table entry transformations including but= not >>> limited to old, young, dirty, clean, write, write protect etc at vari= ous >>> level along with populating intermediate entries with next page table= page >>> and validating them. >>> >>> Test page table pages are allocated from system memory with required = size >>> and alignments. The mapped pfns at page table levels are derived from= a >>> real pfn representing a valid kernel text symbol. This test gets call= ed >>> right after page_alloc_init_late(). >>> >>> This gets build and run when CONFIG_DEBUG_VM_PGTABLE is selected alon= g with >>> CONFIG_VM_DEBUG. Architectures willing to subscribe this test also ne= ed to >>> select CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE which for now is limited to x= 86 and >>> arm64. Going forward, other architectures too can enable this after f= ixing >>> build or runtime problems (if any) with their page table helpers. >>> >>> Folks interested in making sure that a given platform's page table he= lpers >>> conform to expected generic MM semantics should enable the above conf= ig >>> which will just trigger this test during boot. Any non conformity her= e will >>> be reported as an warning which would need to be fixed. This test wil= l help >>> catch any changes to the agreed upon semantics expected from generic = MM and >>> enable platforms to accommodate it thereafter. >>> >=20 > I tried enabling this on ARC and ran into a build issue >=20 > ../mm/debug_vm_pgtable.c: In function =E2=80=98pmd_basic_tests=E2=80=99= : > ../mm/debug_vm_pgtable.c:73:14: error: implicit declaration of function= =E2=80=98pfn_pmd=E2=80=99; > did you mean =E2=80=98pfn_pte=E2=80=99? [-Werror=3Dimplicit-function-de= claration] > =C2=A0 pmd_t pmd =3D pfn_pmd(pfn, prot); > =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 ^~~~~~~ >=20 > The reason being THP was not enabled (although ARC supports THP) - for = the > combination below > CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=3Dy > # CONFIG_TRANSPARENT_HUGEPAGE is not set >=20 > I think you need to use latter for guarding pmd_basic_tests() So the build complains that pfn_pmd() is not defined when the following c= onfig combination is in place. CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=3Dy CONFIG_TRANSPARENT_HUGEPAGE=3Dn But should not pfn_pmd() be encapsulated inside HAVE_ARCH_TRANSPARENT_HUG= EPAGE at the minimum (but I would say it should be available always, nonetheles= s) when the platform subscribes to THP irrespective of whether THP is enabled or = not. I could see in the file (arch/arc/include/asm/pgtable.h) that fetching pf= n_pmd() and all other basic PMD definitions is conditional on CONFIG_TRANSPARENT_= HUGEPAGE. #ifdef CONFIG_TRANSPARENT_HUGEPAGE #include #endif IIUC, CONFIG_TRANSPARENT_HUGEPAGE should only encapsulate PMD page table = helpers which are expected from generic THP code (pmd_trans_huge, pmdp_set_access= _flags etc) but not the basic PMD helpers like pmd_pfn, pmd_mkyoung, pmd_mkdirty= , pmd_mkclean etc. Hence wondering will it be possible to accommodate follo= wing code change on arc platform (not even compiled) in order to fix the probl= em ? diff --git a/arch/arc/include/asm/hugepage.h b/arch/arc/include/asm/hugep= age.h index 9a74ce7..2ae15a8 100644 --- a/arch/arc/include/asm/hugepage.h +++ b/arch/arc/include/asm/hugepage.h @@ -36,11 +36,11 @@ static inline pmd_t pte_pmd(pte_t pte) #define pmd_dirty(pmd) pte_dirty(pmd_pte(pmd)) =20 #define mk_pmd(page, prot) pte_pmd(mk_pte(page, prot)) +#define pfn_pmd(pfn, prot) (__pmd(((pfn) << PAGE_SHIFT) | pgprot_val= (prot))) =20 +#ifdef CONFIG_TRANSPARENT_HUGEPAGE #define pmd_trans_huge(pmd) (pmd_val(pmd) & _PAGE_HW_SZ) =20 -#define pfn_pmd(pfn, prot) (__pmd(((pfn) << PAGE_SHIFT) | pgprot_val= (prot))) - static inline pmd_t pmd_modify(pmd_t pmd, pgprot_t newprot) { /* @@ -73,5 +73,6 @@ extern void flush_pmd_tlb_range(struct vm_area_struct *= vma, unsigned long start, =20 /* We don't have hardware dirty/accessed bits, generic_pmdp_establish is= fine.*/ #define pmdp_establish generic_pmdp_establish +#endif =20 #endif diff --git a/arch/arc/include/asm/pgtable.h b/arch/arc/include/asm/pgtabl= e.h index 9019ed9..20395f1 100644 --- a/arch/arc/include/asm/pgtable.h +++ b/arch/arc/include/asm/pgtable.h @@ -385,7 +385,7 @@ void update_mmu_cache(struct vm_area_struct *vma, uns= igned long address, * remap a physical page `pfn' of size `size' with page protection `prot= ' * into virtual address `from' */ -#ifdef CONFIG_TRANSPARENT_HUGEPAGE +#ifdef CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE #include #endif >=20 > Other than that the tests pass for !THP and THP too. So once fixed, you= could Glad that it works on arc platform as well. > enable that for ARC as well> Thx for doing this. >=20 > -Vineet >=20