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=-8.5 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 autolearn=unavailable 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 276DCC433E7 for ; Mon, 29 Jun 2020 18:55:07 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id EDECB20656 for ; Mon, 29 Jun 2020 18:55:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729921AbgF2SzE (ORCPT ); Mon, 29 Jun 2020 14:55:04 -0400 Received: from foss.arm.com ([217.140.110.172]:36804 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729295AbgF2Sy5 (ORCPT ); Mon, 29 Jun 2020 14:54:57 -0400 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 9498131B; Mon, 29 Jun 2020 01:15:58 -0700 (PDT) Received: from [10.163.83.176] (unknown [10.163.83.176]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 9CA863F71E; Mon, 29 Jun 2020 01:15:47 -0700 (PDT) Subject: Re: [PATCH V3 2/4] mm/debug_vm_pgtable: Add tests validating advanced arch page table helpers To: Christophe Leroy , linux-mm@kvack.org Cc: ziy@nvidia.com, gerald.schaefer@de.ibm.com, Andrew Morton , Mike Rapoport , Vineet Gupta , Catalin Marinas , Will Deacon , Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , Heiko Carstens , Vasily Gorbik , Christian Borntraeger , Thomas Gleixner , Ingo Molnar , Borislav Petkov , "H. Peter Anvin" , "Kirill A . Shutemov" , Paul Walmsley , Palmer Dabbelt , linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org, linux-riscv@lists.infradead.org, x86@kernel.org, linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org References: <1592192277-8421-1-git-send-email-anshuman.khandual@arm.com> <1592192277-8421-3-git-send-email-anshuman.khandual@arm.com> <4da41eee-5ce0-2a5e-40eb-4424655b3489@csgroup.eu> From: Anshuman Khandual Message-ID: <1a6138ca-40b0-5076-2f09-4ce6b7ee8d36@arm.com> Date: Mon, 29 Jun 2020 13:45:37 +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: <4da41eee-5ce0-2a5e-40eb-4424655b3489@csgroup.eu> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 06/27/2020 12:56 PM, Christophe Leroy wrote: > > > Le 15/06/2020 à 05:37, Anshuman Khandual a écrit : >> This adds new tests validating for these following arch advanced page table >> helpers. These tests create and test specific mapping types at various page >> table levels. >> >> 1. pxxp_set_wrprotect() >> 2. pxxp_get_and_clear() >> 3. pxxp_set_access_flags() >> 4. pxxp_get_and_clear_full() >> 5. pxxp_test_and_clear_young() >> 6. pxx_leaf() >> 7. pxx_set_huge() >> 8. pxx_(clear|mk)_savedwrite() >> 9. huge_pxxp_xxx() >> >> Cc: Andrew Morton >> Cc: Mike Rapoport >> Cc: Vineet Gupta >> Cc: Catalin Marinas >> Cc: Will Deacon >> Cc: Benjamin Herrenschmidt >> Cc: Paul Mackerras >> Cc: Michael Ellerman >> Cc: Heiko Carstens >> Cc: Vasily Gorbik >> Cc: Christian Borntraeger >> Cc: Thomas Gleixner >> Cc: Ingo Molnar >> Cc: Borislav Petkov >> Cc: "H. Peter Anvin" >> Cc: Kirill A. Shutemov >> Cc: Paul Walmsley >> Cc: Palmer Dabbelt >> Cc: linux-snps-arc@lists.infradead.org >> Cc: linux-arm-kernel@lists.infradead.org >> Cc: linuxppc-dev@lists.ozlabs.org >> Cc: linux-s390@vger.kernel.org >> Cc: linux-riscv@lists.infradead.org >> Cc: x86@kernel.org >> Cc: linux-mm@kvack.org >> Cc: linux-arch@vger.kernel.org >> Cc: linux-kernel@vger.kernel.org >> Suggested-by: Catalin Marinas >> Signed-off-by: Anshuman Khandual >> --- >>   mm/debug_vm_pgtable.c | 306 ++++++++++++++++++++++++++++++++++++++++++ >>   1 file changed, 306 insertions(+) >> >> diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c >> index ffa163d4c63c..e3f9f8317a98 100644 >> --- a/mm/debug_vm_pgtable.c >> +++ b/mm/debug_vm_pgtable.c >> @@ -21,6 +21,7 @@ >>   #include >>   #include >>   #include >> +#include >>   #include >>   #include >>   #include >> @@ -28,6 +29,7 @@ >>   #include >>   #include >>   #include >> +#include >>     #define VMFLAGS    (VM_READ|VM_WRITE|VM_EXEC) >>   @@ -55,6 +57,54 @@ static void __init pte_basic_tests(unsigned long pfn, pgprot_t prot) >>       WARN_ON(pte_write(pte_wrprotect(pte_mkwrite(pte)))); >>   } >>   +static void __init pte_advanced_tests(struct mm_struct *mm, >> +            struct vm_area_struct *vma, pte_t *ptep, >> +            unsigned long pfn, unsigned long vaddr, pgprot_t prot) > > Align args properly. > >> +{ >> +    pte_t pte = pfn_pte(pfn, prot); >> + >> +    pte = pfn_pte(pfn, prot); >> +    set_pte_at(mm, vaddr, ptep, pte); >> +    ptep_set_wrprotect(mm, vaddr, ptep); >> +    pte = READ_ONCE(*ptep); >> +    WARN_ON(pte_write(pte)); >> + >> +    pte = pfn_pte(pfn, prot); >> +    set_pte_at(mm, vaddr, ptep, pte); >> +    ptep_get_and_clear(mm, vaddr, ptep); >> +    pte = READ_ONCE(*ptep); >> +    WARN_ON(!pte_none(pte)); >> + >> +    pte = pfn_pte(pfn, prot); >> +    pte = pte_wrprotect(pte); >> +    pte = pte_mkclean(pte); >> +    set_pte_at(mm, vaddr, ptep, pte); >> +    pte = pte_mkwrite(pte); >> +    pte = pte_mkdirty(pte); >> +    ptep_set_access_flags(vma, vaddr, ptep, pte, 1); >> +    pte = READ_ONCE(*ptep); >> +    WARN_ON(!(pte_write(pte) && pte_dirty(pte))); >> + >> +    pte = pfn_pte(pfn, prot); >> +    set_pte_at(mm, vaddr, ptep, pte); >> +    ptep_get_and_clear_full(mm, vaddr, ptep, 1); >> +    pte = READ_ONCE(*ptep); >> +    WARN_ON(!pte_none(pte)); >> + >> +    pte = pte_mkyoung(pte); >> +    set_pte_at(mm, vaddr, ptep, pte); >> +    ptep_test_and_clear_young(vma, vaddr, ptep); >> +    pte = READ_ONCE(*ptep); >> +    WARN_ON(pte_young(pte)); >> +} >> + >> +static void __init pte_savedwrite_tests(unsigned long pfn, pgprot_t prot) >> +{ >> +    pte_t pte = pfn_pte(pfn, prot); >> + >> +    WARN_ON(!pte_savedwrite(pte_mk_savedwrite(pte_clear_savedwrite(pte)))); >> +    WARN_ON(pte_savedwrite(pte_clear_savedwrite(pte_mk_savedwrite(pte)))); >> +} >>   #ifdef CONFIG_TRANSPARENT_HUGEPAGE >>   static void __init pmd_basic_tests(unsigned long pfn, pgprot_t prot) >>   { >> @@ -77,6 +127,89 @@ static void __init pmd_basic_tests(unsigned long pfn, pgprot_t prot) >>       WARN_ON(!pmd_bad(pmd_mkhuge(pmd))); >>   } >>   +static void __init pmd_advanced_tests(struct mm_struct *mm, >> +        struct vm_area_struct *vma, pmd_t *pmdp, >> +        unsigned long pfn, unsigned long vaddr, pgprot_t prot) > > Align args properly > >> +{ >> +    pmd_t pmd = pfn_pmd(pfn, prot); >> + >> +    if (!has_transparent_hugepage()) >> +        return; >> + >> +    /* Align the address wrt HPAGE_PMD_SIZE */ >> +    vaddr = (vaddr & HPAGE_PMD_MASK) + HPAGE_PMD_SIZE; >> + >> +    pmd = pfn_pmd(pfn, prot); >> +    set_pmd_at(mm, vaddr, pmdp, pmd); >> +    pmdp_set_wrprotect(mm, vaddr, pmdp); >> +    pmd = READ_ONCE(*pmdp); >> +    WARN_ON(pmd_write(pmd)); >> + >> +    pmd = pfn_pmd(pfn, prot); >> +    set_pmd_at(mm, vaddr, pmdp, pmd); >> +    pmdp_huge_get_and_clear(mm, vaddr, pmdp); >> +    pmd = READ_ONCE(*pmdp); >> +    WARN_ON(!pmd_none(pmd)); >> + >> +    pmd = pfn_pmd(pfn, prot); >> +    pmd = pmd_wrprotect(pmd); >> +    pmd = pmd_mkclean(pmd); >> +    set_pmd_at(mm, vaddr, pmdp, pmd); >> +    pmd = pmd_mkwrite(pmd); >> +    pmd = pmd_mkdirty(pmd); >> +    pmdp_set_access_flags(vma, vaddr, pmdp, pmd, 1); >> +    pmd = READ_ONCE(*pmdp); >> +    WARN_ON(!(pmd_write(pmd) && pmd_dirty(pmd))); >> + >> +    pmd = pmd_mkhuge(pfn_pmd(pfn, prot)); >> +    set_pmd_at(mm, vaddr, pmdp, pmd); >> +    pmdp_huge_get_and_clear_full(vma, vaddr, pmdp, 1); >> +    pmd = READ_ONCE(*pmdp); >> +    WARN_ON(!pmd_none(pmd)); >> + >> +    pmd = pmd_mkyoung(pmd); >> +    set_pmd_at(mm, vaddr, pmdp, pmd); >> +    pmdp_test_and_clear_young(vma, vaddr, pmdp); >> +    pmd = READ_ONCE(*pmdp); >> +    WARN_ON(pmd_young(pmd)); >> +} >> + >> +static void __init pmd_leaf_tests(unsigned long pfn, pgprot_t prot) >> +{ >> +    pmd_t pmd = pfn_pmd(pfn, prot); >> + >> +    /* >> +     * PMD based THP is a leaf entry. >> +     */ >> +    pmd = pmd_mkhuge(pmd); >> +    WARN_ON(!pmd_leaf(pmd)); >> +} >> + >> +static void __init pmd_huge_tests(pmd_t *pmdp, unsigned long pfn, pgprot_t prot) >> +{ >> +    pmd_t pmd; >> + >> +    if (!IS_ENABLED(CONFIG_HAVE_ARCH_HUGE_VMAP)) >> +        return; >> +    /* >> +     * X86 defined pmd_set_huge() verifies that the given >> +     * PMD is not a populated non-leaf entry. >> +     */ >> +    WRITE_ONCE(*pmdp, __pmd(0)); >> +    WARN_ON(!pmd_set_huge(pmdp, __pfn_to_phys(pfn), prot)); >> +    WARN_ON(!pmd_clear_huge(pmdp)); >> +    pmd = READ_ONCE(*pmdp); >> +    WARN_ON(!pmd_none(pmd)); >> +} >> + >> +static void __init pmd_savedwrite_tests(unsigned long pfn, pgprot_t prot) >> +{ >> +    pmd_t pmd = 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)))); >> +} >> + >>   #ifdef CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD >>   static void __init pud_basic_tests(unsigned long pfn, pgprot_t prot) >>   { >> @@ -100,12 +233,115 @@ static void __init pud_basic_tests(unsigned long pfn, pgprot_t prot) >>        */ >>       WARN_ON(!pud_bad(pud_mkhuge(pud))); >>   } >> + >> +static void pud_advanced_tests(struct mm_struct *mm, >> +        struct vm_area_struct *vma, pud_t *pudp, >> +        unsigned long pfn, unsigned long vaddr, pgprot_t prot) > > Align args properly > >> +{ >> +    pud_t pud = pfn_pud(pfn, prot); >> + >> +    if (!has_transparent_hugepage()) >> +        return; >> + >> +    /* Align the address wrt HPAGE_PUD_SIZE */ >> +    vaddr = (vaddr & HPAGE_PUD_MASK) + HPAGE_PUD_SIZE; >> + >> +    set_pud_at(mm, vaddr, pudp, pud); >> +    pudp_set_wrprotect(mm, vaddr, pudp); >> +    pud = READ_ONCE(*pudp); >> +    WARN_ON(pud_write(pud)); >> + >> +#ifndef __PAGETABLE_PMD_FOLDED >> +    pud = pfn_pud(pfn, prot); >> +    set_pud_at(mm, vaddr, pudp, pud); >> +    pudp_huge_get_and_clear(mm, vaddr, pudp); >> +    pud = READ_ONCE(*pudp); >> +    WARN_ON(!pud_none(pud)); >> + >> +    pud = pfn_pud(pfn, prot); >> +    set_pud_at(mm, vaddr, pudp, pud); >> +    pudp_huge_get_and_clear_full(mm, vaddr, pudp, 1); >> +    pud = READ_ONCE(*pudp); >> +    WARN_ON(!pud_none(pud)); >> +#endif /* __PAGETABLE_PMD_FOLDED */ >> +    pud = pfn_pud(pfn, prot); >> +    pud = pud_wrprotect(pud); >> +    pud = pud_mkclean(pud); >> +    set_pud_at(mm, vaddr, pudp, pud); >> +    pud = pud_mkwrite(pud); >> +    pud = pud_mkdirty(pud); >> +    pudp_set_access_flags(vma, vaddr, pudp, pud, 1); >> +    pud = READ_ONCE(*pudp); >> +    WARN_ON(!(pud_write(pud) && pud_dirty(pud))); >> + >> +    pud = pud_mkyoung(pud); >> +    set_pud_at(mm, vaddr, pudp, pud); >> +    pudp_test_and_clear_young(vma, vaddr, pudp); >> +    pud = READ_ONCE(*pudp); >> +    WARN_ON(pud_young(pud)); >> +} >> + >> +static void __init pud_leaf_tests(unsigned long pfn, pgprot_t prot) >> +{ >> +    pud_t pud = pfn_pud(pfn, prot); >> + >> +    /* >> +     * PUD based THP is a leaf entry. >> +     */ >> +    pud = pud_mkhuge(pud); >> +    WARN_ON(!pud_leaf(pud)); >> +} >> + >> +static void __init pud_huge_tests(pud_t *pudp, unsigned long pfn, pgprot_t prot) >> +{ >> +    pud_t pud; >> + >> +    if (!IS_ENABLED(CONFIG_HAVE_ARCH_HUGE_VMAP)) >> +        return; >> +    /* >> +     * X86 defined pud_set_huge() verifies that the given >> +     * PUD is not a populated non-leaf entry. >> +     */ >> +    WRITE_ONCE(*pudp, __pud(0)); >> +    WARN_ON(!pud_set_huge(pudp, __pfn_to_phys(pfn), prot)); >> +    WARN_ON(!pud_clear_huge(pudp)); >> +    pud = READ_ONCE(*pudp); >> +    WARN_ON(!pud_none(pud)); >> +} >>   #else  /* !CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD */ >>   static void __init pud_basic_tests(unsigned long pfn, pgprot_t prot) { } >> +static void pud_advanced_tests(struct mm_struct *mm, >> +        struct vm_area_struct *vma, pud_t *pudp, >> +        unsigned long pfn, unsigned long vaddr, pgprot_t prot) > > Align args properly > >> +{ >> +} >> +static void __init pud_leaf_tests(unsigned long pfn, pgprot_t prot) { } >> +static void __init pud_huge_tests(pud_t *pudp, unsigned long pfn, pgprot_t prot) >> +{ >> +} >>   #endif /* CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD */ >>   #else  /* !CONFIG_TRANSPARENT_HUGEPAGE */ >>   static void __init pmd_basic_tests(unsigned long pfn, pgprot_t prot) { } >>   static void __init pud_basic_tests(unsigned long pfn, pgprot_t prot) { } >> +static void __init pmd_advanced_tests(struct mm_struct *mm, >> +        struct vm_area_struct *vma, pmd_t *pmdp, >> +        unsigned long pfn, unsigned long vaddr, pgprot_t prot) > > Align args properly > >> +{ >> +} >> +static void __init pud_advanced_tests(struct mm_struct *mm, >> +        struct vm_area_struct *vma, pud_t *pudp, >> +        unsigned long pfn, unsigned long vaddr, pgprot_t prot) > > Align args properly > Sure, will fix the arguments alignment in the above mentioned places. From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anshuman Khandual Subject: Re: [PATCH V3 2/4] mm/debug_vm_pgtable: Add tests validating advanced arch page table helpers Date: Mon, 29 Jun 2020 13:45:37 +0530 Message-ID: <1a6138ca-40b0-5076-2f09-4ce6b7ee8d36@arm.com> References: <1592192277-8421-1-git-send-email-anshuman.khandual@arm.com> <1592192277-8421-3-git-send-email-anshuman.khandual@arm.com> <4da41eee-5ce0-2a5e-40eb-4424655b3489@csgroup.eu> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Return-path: In-Reply-To: <4da41eee-5ce0-2a5e-40eb-4424655b3489@csgroup.eu> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linuxppc-dev-bounces+glppe-linuxppc-embedded-2=m.gmane-mx.org@lists.ozlabs.org Sender: "Linuxppc-dev" To: Christophe Leroy , linux-mm@kvack.org Cc: Heiko Carstens , Paul Mackerras , "H. Peter Anvin" , linux-riscv@lists.infradead.org, Will Deacon , linux-arch@vger.kernel.org, linux-s390@vger.kernel.org, x86@kernel.org, Mike Rapoport , Christian Borntraeger , Ingo Molnar , gerald.schaefer@de.ibm.com, ziy@nvidia.com, Catalin Marinas , linux-snps-arc@lists.infradead.org, Vasily Gorbik , Borislav Petkov , Paul Walmsley , "Kirill A . Shutemov" , Thomas Gleixner , linux-arm-kernel@lists.infradead.org, Vineet Gupta , linux-kernel@vger.kernel.org, Palmer Dabbelt , Andrew Morton , linuxppc-dev@list List-Id: linux-arch.vger.kernel.org On 06/27/2020 12:56 PM, Christophe Leroy wrote: > > > Le 15/06/2020 à 05:37, Anshuman Khandual a écrit : >> This adds new tests validating for these following arch advanced page table >> helpers. These tests create and test specific mapping types at various page >> table levels. >> >> 1. pxxp_set_wrprotect() >> 2. pxxp_get_and_clear() >> 3. pxxp_set_access_flags() >> 4. pxxp_get_and_clear_full() >> 5. pxxp_test_and_clear_young() >> 6. pxx_leaf() >> 7. pxx_set_huge() >> 8. pxx_(clear|mk)_savedwrite() >> 9. huge_pxxp_xxx() >> >> Cc: Andrew Morton >> Cc: Mike Rapoport >> Cc: Vineet Gupta >> Cc: Catalin Marinas >> Cc: Will Deacon >> Cc: Benjamin Herrenschmidt >> Cc: Paul Mackerras >> Cc: Michael Ellerman >> Cc: Heiko Carstens >> Cc: Vasily Gorbik >> Cc: Christian Borntraeger >> Cc: Thomas Gleixner >> Cc: Ingo Molnar >> Cc: Borislav Petkov >> Cc: "H. Peter Anvin" >> Cc: Kirill A. Shutemov >> Cc: Paul Walmsley >> Cc: Palmer Dabbelt >> Cc: linux-snps-arc@lists.infradead.org >> Cc: linux-arm-kernel@lists.infradead.org >> Cc: linuxppc-dev@lists.ozlabs.org >> Cc: linux-s390@vger.kernel.org >> Cc: linux-riscv@lists.infradead.org >> Cc: x86@kernel.org >> Cc: linux-mm@kvack.org >> Cc: linux-arch@vger.kernel.org >> Cc: linux-kernel@vger.kernel.org >> Suggested-by: Catalin Marinas >> Signed-off-by: Anshuman Khandual >> --- >>   mm/debug_vm_pgtable.c | 306 ++++++++++++++++++++++++++++++++++++++++++ >>   1 file changed, 306 insertions(+) >> >> diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c >> index ffa163d4c63c..e3f9f8317a98 100644 >> --- a/mm/debug_vm_pgtable.c >> +++ b/mm/debug_vm_pgtable.c >> @@ -21,6 +21,7 @@ >>   #include >>   #include >>   #include >> +#include >>   #include >>   #include >>   #include >> @@ -28,6 +29,7 @@ >>   #include >>   #include >>   #include >> +#include >>     #define VMFLAGS    (VM_READ|VM_WRITE|VM_EXEC) >>   @@ -55,6 +57,54 @@ static void __init pte_basic_tests(unsigned long pfn, pgprot_t prot) >>       WARN_ON(pte_write(pte_wrprotect(pte_mkwrite(pte)))); >>   } >>   +static void __init pte_advanced_tests(struct mm_struct *mm, >> +            struct vm_area_struct *vma, pte_t *ptep, >> +            unsigned long pfn, unsigned long vaddr, pgprot_t prot) > > Align args properly. > >> +{ >> +    pte_t pte = pfn_pte(pfn, prot); >> + >> +    pte = pfn_pte(pfn, prot); >> +    set_pte_at(mm, vaddr, ptep, pte); >> +    ptep_set_wrprotect(mm, vaddr, ptep); >> +    pte = READ_ONCE(*ptep); >> +    WARN_ON(pte_write(pte)); >> + >> +    pte = pfn_pte(pfn, prot); >> +    set_pte_at(mm, vaddr, ptep, pte); >> +    ptep_get_and_clear(mm, vaddr, ptep); >> +    pte = READ_ONCE(*ptep); >> +    WARN_ON(!pte_none(pte)); >> + >> +    pte = pfn_pte(pfn, prot); >> +    pte = pte_wrprotect(pte); >> +    pte = pte_mkclean(pte); >> +    set_pte_at(mm, vaddr, ptep, pte); >> +    pte = pte_mkwrite(pte); >> +    pte = pte_mkdirty(pte); >> +    ptep_set_access_flags(vma, vaddr, ptep, pte, 1); >> +    pte = READ_ONCE(*ptep); >> +    WARN_ON(!(pte_write(pte) && pte_dirty(pte))); >> + >> +    pte = pfn_pte(pfn, prot); >> +    set_pte_at(mm, vaddr, ptep, pte); >> +    ptep_get_and_clear_full(mm, vaddr, ptep, 1); >> +    pte = READ_ONCE(*ptep); >> +    WARN_ON(!pte_none(pte)); >> + >> +    pte = pte_mkyoung(pte); >> +    set_pte_at(mm, vaddr, ptep, pte); >> +    ptep_test_and_clear_young(vma, vaddr, ptep); >> +    pte = READ_ONCE(*ptep); >> +    WARN_ON(pte_young(pte)); >> +} >> + >> +static void __init pte_savedwrite_tests(unsigned long pfn, pgprot_t prot) >> +{ >> +    pte_t pte = pfn_pte(pfn, prot); >> + >> +    WARN_ON(!pte_savedwrite(pte_mk_savedwrite(pte_clear_savedwrite(pte)))); >> +    WARN_ON(pte_savedwrite(pte_clear_savedwrite(pte_mk_savedwrite(pte)))); >> +} >>   #ifdef CONFIG_TRANSPARENT_HUGEPAGE >>   static void __init pmd_basic_tests(unsigned long pfn, pgprot_t prot) >>   { >> @@ -77,6 +127,89 @@ static void __init pmd_basic_tests(unsigned long pfn, pgprot_t prot) >>       WARN_ON(!pmd_bad(pmd_mkhuge(pmd))); >>   } >>   +static void __init pmd_advanced_tests(struct mm_struct *mm, >> +        struct vm_area_struct *vma, pmd_t *pmdp, >> +        unsigned long pfn, unsigned long vaddr, pgprot_t prot) > > Align args properly > >> +{ >> +    pmd_t pmd = pfn_pmd(pfn, prot); >> + >> +    if (!has_transparent_hugepage()) >> +        return; >> + >> +    /* Align the address wrt HPAGE_PMD_SIZE */ >> +    vaddr = (vaddr & HPAGE_PMD_MASK) + HPAGE_PMD_SIZE; >> + >> +    pmd = pfn_pmd(pfn, prot); >> +    set_pmd_at(mm, vaddr, pmdp, pmd); >> +    pmdp_set_wrprotect(mm, vaddr, pmdp); >> +    pmd = READ_ONCE(*pmdp); >> +    WARN_ON(pmd_write(pmd)); >> + >> +    pmd = pfn_pmd(pfn, prot); >> +    set_pmd_at(mm, vaddr, pmdp, pmd); >> +    pmdp_huge_get_and_clear(mm, vaddr, pmdp); >> +    pmd = READ_ONCE(*pmdp); >> +    WARN_ON(!pmd_none(pmd)); >> + >> +    pmd = pfn_pmd(pfn, prot); >> +    pmd = pmd_wrprotect(pmd); >> +    pmd = pmd_mkclean(pmd); >> +    set_pmd_at(mm, vaddr, pmdp, pmd); >> +    pmd = pmd_mkwrite(pmd); >> +    pmd = pmd_mkdirty(pmd); >> +    pmdp_set_access_flags(vma, vaddr, pmdp, pmd, 1); >> +    pmd = READ_ONCE(*pmdp); >> +    WARN_ON(!(pmd_write(pmd) && pmd_dirty(pmd))); >> + >> +    pmd = pmd_mkhuge(pfn_pmd(pfn, prot)); >> +    set_pmd_at(mm, vaddr, pmdp, pmd); >> +    pmdp_huge_get_and_clear_full(vma, vaddr, pmdp, 1); >> +    pmd = READ_ONCE(*pmdp); >> +    WARN_ON(!pmd_none(pmd)); >> + >> +    pmd = pmd_mkyoung(pmd); >> +    set_pmd_at(mm, vaddr, pmdp, pmd); >> +    pmdp_test_and_clear_young(vma, vaddr, pmdp); >> +    pmd = READ_ONCE(*pmdp); >> +    WARN_ON(pmd_young(pmd)); >> +} >> + >> +static void __init pmd_leaf_tests(unsigned long pfn, pgprot_t prot) >> +{ >> +    pmd_t pmd = pfn_pmd(pfn, prot); >> + >> +    /* >> +     * PMD based THP is a leaf entry. >> +     */ >> +    pmd = pmd_mkhuge(pmd); >> +    WARN_ON(!pmd_leaf(pmd)); >> +} >> + >> +static void __init pmd_huge_tests(pmd_t *pmdp, unsigned long pfn, pgprot_t prot) >> +{ >> +    pmd_t pmd; >> + >> +    if (!IS_ENABLED(CONFIG_HAVE_ARCH_HUGE_VMAP)) >> +        return; >> +    /* >> +     * X86 defined pmd_set_huge() verifies that the given >> +     * PMD is not a populated non-leaf entry. >> +     */ >> +    WRITE_ONCE(*pmdp, __pmd(0)); >> +    WARN_ON(!pmd_set_huge(pmdp, __pfn_to_phys(pfn), prot)); >> +    WARN_ON(!pmd_clear_huge(pmdp)); >> +    pmd = READ_ONCE(*pmdp); >> +    WARN_ON(!pmd_none(pmd)); >> +} >> + >> +static void __init pmd_savedwrite_tests(unsigned long pfn, pgprot_t prot) >> +{ >> +    pmd_t pmd = 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)))); >> +} >> + >>   #ifdef CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD >>   static void __init pud_basic_tests(unsigned long pfn, pgprot_t prot) >>   { >> @@ -100,12 +233,115 @@ static void __init pud_basic_tests(unsigned long pfn, pgprot_t prot) >>        */ >>       WARN_ON(!pud_bad(pud_mkhuge(pud))); >>   } >> + >> +static void pud_advanced_tests(struct mm_struct *mm, >> +        struct vm_area_struct *vma, pud_t *pudp, >> +        unsigned long pfn, unsigned long vaddr, pgprot_t prot) > > Align args properly > >> +{ >> +    pud_t pud = pfn_pud(pfn, prot); >> + >> +    if (!has_transparent_hugepage()) >> +        return; >> + >> +    /* Align the address wrt HPAGE_PUD_SIZE */ >> +    vaddr = (vaddr & HPAGE_PUD_MASK) + HPAGE_PUD_SIZE; >> + >> +    set_pud_at(mm, vaddr, pudp, pud); >> +    pudp_set_wrprotect(mm, vaddr, pudp); >> +    pud = READ_ONCE(*pudp); >> +    WARN_ON(pud_write(pud)); >> + >> +#ifndef __PAGETABLE_PMD_FOLDED >> +    pud = pfn_pud(pfn, prot); >> +    set_pud_at(mm, vaddr, pudp, pud); >> +    pudp_huge_get_and_clear(mm, vaddr, pudp); >> +    pud = READ_ONCE(*pudp); >> +    WARN_ON(!pud_none(pud)); >> + >> +    pud = pfn_pud(pfn, prot); >> +    set_pud_at(mm, vaddr, pudp, pud); >> +    pudp_huge_get_and_clear_full(mm, vaddr, pudp, 1); >> +    pud = READ_ONCE(*pudp); >> +    WARN_ON(!pud_none(pud)); >> +#endif /* __PAGETABLE_PMD_FOLDED */ >> +    pud = pfn_pud(pfn, prot); >> +    pud = pud_wrprotect(pud); >> +    pud = pud_mkclean(pud); >> +    set_pud_at(mm, vaddr, pudp, pud); >> +    pud = pud_mkwrite(pud); >> +    pud = pud_mkdirty(pud); >> +    pudp_set_access_flags(vma, vaddr, pudp, pud, 1); >> +    pud = READ_ONCE(*pudp); >> +    WARN_ON(!(pud_write(pud) && pud_dirty(pud))); >> + >> +    pud = pud_mkyoung(pud); >> +    set_pud_at(mm, vaddr, pudp, pud); >> +    pudp_test_and_clear_young(vma, vaddr, pudp); >> +    pud = READ_ONCE(*pudp); >> +    WARN_ON(pud_young(pud)); >> +} >> + >> +static void __init pud_leaf_tests(unsigned long pfn, pgprot_t prot) >> +{ >> +    pud_t pud = pfn_pud(pfn, prot); >> + >> +    /* >> +     * PUD based THP is a leaf entry. >> +     */ >> +    pud = pud_mkhuge(pud); >> +    WARN_ON(!pud_leaf(pud)); >> +} >> + >> +static void __init pud_huge_tests(pud_t *pudp, unsigned long pfn, pgprot_t prot) >> +{ >> +    pud_t pud; >> + >> +    if (!IS_ENABLED(CONFIG_HAVE_ARCH_HUGE_VMAP)) >> +        return; >> +    /* >> +     * X86 defined pud_set_huge() verifies that the given >> +     * PUD is not a populated non-leaf entry. >> +     */ >> +    WRITE_ONCE(*pudp, __pud(0)); >> +    WARN_ON(!pud_set_huge(pudp, __pfn_to_phys(pfn), prot)); >> +    WARN_ON(!pud_clear_huge(pudp)); >> +    pud = READ_ONCE(*pudp); >> +    WARN_ON(!pud_none(pud)); >> +} >>   #else  /* !CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD */ >>   static void __init pud_basic_tests(unsigned long pfn, pgprot_t prot) { } >> +static void pud_advanced_tests(struct mm_struct *mm, >> +        struct vm_area_struct *vma, pud_t *pudp, >> +        unsigned long pfn, unsigned long vaddr, pgprot_t prot) > > Align args properly > >> +{ >> +} >> +static void __init pud_leaf_tests(unsigned long pfn, pgprot_t prot) { } >> +static void __init pud_huge_tests(pud_t *pudp, unsigned long pfn, pgprot_t prot) >> +{ >> +} >>   #endif /* CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD */ >>   #else  /* !CONFIG_TRANSPARENT_HUGEPAGE */ >>   static void __init pmd_basic_tests(unsigned long pfn, pgprot_t prot) { } >>   static void __init pud_basic_tests(unsigned long pfn, pgprot_t prot) { } >> +static void __init pmd_advanced_tests(struct mm_struct *mm, >> +        struct vm_area_struct *vma, pmd_t *pmdp, >> +        unsigned long pfn, unsigned long vaddr, pgprot_t prot) > > Align args properly > >> +{ >> +} >> +static void __init pud_advanced_tests(struct mm_struct *mm, >> +        struct vm_area_struct *vma, pud_t *pudp, >> +        unsigned long pfn, unsigned long vaddr, pgprot_t prot) > > Align args properly > Sure, will fix the arguments alignment in the above mentioned places. 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=-8.5 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable 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 BBD68C433DF for ; Mon, 29 Jun 2020 08:16:27 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 783D123355 for ; Mon, 29 Jun 2020 08:16:27 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="JwAeVXr/" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 783D123355 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=IIMe23bBiBG5gws9ontAgvu/XFhfqn+TA49DulgpZH8=; b=JwAeVXr/MV+SdNv3OQBJ8LUv0 Wr/vMBvPXvDI8qrwZCZXuKp6EafFCAOzoz92kpsD6h/l/eSDpNSw/Gh/vN1RydjekJiJgrhs/uFR2 h+kDWcwrjDQ9PwoKs2woA3VaRm5isN5ZhuC64vY9A738uVrVtn7dY0CCNcI3KRZ6n5i8GCWZUCILq EZ1jRypRzcw4DT7C4M+UVH4gQsnxheX8pKZ+f7g3etdnob2fjQ1hHCfSKpZR7SjGLR8s4eNMpit6D AGjN6kOQlJpYnAQOIoakwIzcwNmWtZ6OsUxsmYvAW/zUZmdv9RuurldZYbtBNnRokRwgkAE4O4N87 1d/a1QtyQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jpoxh-00022u-Ne; Mon, 29 Jun 2020 08:16:21 +0000 Received: from foss.arm.com ([217.140.110.172]) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jpoxM-0001uP-KW; Mon, 29 Jun 2020 08:16:02 +0000 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 9498131B; Mon, 29 Jun 2020 01:15:58 -0700 (PDT) Received: from [10.163.83.176] (unknown [10.163.83.176]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 9CA863F71E; Mon, 29 Jun 2020 01:15:47 -0700 (PDT) Subject: Re: [PATCH V3 2/4] mm/debug_vm_pgtable: Add tests validating advanced arch page table helpers To: Christophe Leroy , linux-mm@kvack.org References: <1592192277-8421-1-git-send-email-anshuman.khandual@arm.com> <1592192277-8421-3-git-send-email-anshuman.khandual@arm.com> <4da41eee-5ce0-2a5e-40eb-4424655b3489@csgroup.eu> From: Anshuman Khandual Message-ID: <1a6138ca-40b0-5076-2f09-4ce6b7ee8d36@arm.com> Date: Mon, 29 Jun 2020 13:45:37 +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: <4da41eee-5ce0-2a5e-40eb-4424655b3489@csgroup.eu> Content-Language: en-US X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Benjamin Herrenschmidt , Heiko Carstens , Paul Mackerras , "H. Peter Anvin" , linux-riscv@lists.infradead.org, Will Deacon , linux-arch@vger.kernel.org, linux-s390@vger.kernel.org, Michael Ellerman , x86@kernel.org, Mike Rapoport , Christian Borntraeger , Ingo Molnar , gerald.schaefer@de.ibm.com, ziy@nvidia.com, Catalin Marinas , linux-snps-arc@lists.infradead.org, Vasily Gorbik , Borislav Petkov , Paul Walmsley , "Kirill A . Shutemov" , Thomas Gleixner , linux-arm-kernel@lists.infradead.org, Vineet Gupta , linux-kernel@vger.kernel.org, Palmer Dabbelt , Andrew Morton , linuxppc-dev@lists.ozlabs.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org CgpPbiAwNi8yNy8yMDIwIDEyOjU2IFBNLCBDaHJpc3RvcGhlIExlcm95IHdyb3RlOgo+IAo+IAo+ IExlIDE1LzA2LzIwMjAgw6AgMDU6MzcsIEFuc2h1bWFuIEtoYW5kdWFsIGEgw6ljcml0wqA6Cj4+ IFRoaXMgYWRkcyBuZXcgdGVzdHMgdmFsaWRhdGluZyBmb3IgdGhlc2UgZm9sbG93aW5nIGFyY2gg YWR2YW5jZWQgcGFnZSB0YWJsZQo+PiBoZWxwZXJzLiBUaGVzZSB0ZXN0cyBjcmVhdGUgYW5kIHRl c3Qgc3BlY2lmaWMgbWFwcGluZyB0eXBlcyBhdCB2YXJpb3VzIHBhZ2UKPj4gdGFibGUgbGV2ZWxz Lgo+Pgo+PiAxLiBweHhwX3NldF93cnByb3RlY3QoKQo+PiAyLiBweHhwX2dldF9hbmRfY2xlYXIo KQo+PiAzLiBweHhwX3NldF9hY2Nlc3NfZmxhZ3MoKQo+PiA0LiBweHhwX2dldF9hbmRfY2xlYXJf ZnVsbCgpCj4+IDUuIHB4eHBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKQo+PiA2LiBweHhfbGVhZigp Cj4+IDcuIHB4eF9zZXRfaHVnZSgpCj4+IDguIHB4eF8oY2xlYXJ8bWspX3NhdmVkd3JpdGUoKQo+ PiA5LiBodWdlX3B4eHBfeHh4KCkKPj4KPj4gQ2M6IEFuZHJldyBNb3J0b24gPGFrcG1AbGludXgt Zm91bmRhdGlvbi5vcmc+Cj4+IENjOiBNaWtlIFJhcG9wb3J0IDxycHB0QGxpbnV4LmlibS5jb20+ Cj4+IENjOiBWaW5lZXQgR3VwdGEgPHZndXB0YUBzeW5vcHN5cy5jb20+Cj4+IENjOiBDYXRhbGlu IE1hcmluYXMgPGNhdGFsaW4ubWFyaW5hc0Bhcm0uY29tPgo+PiBDYzogV2lsbCBEZWFjb24gPHdp bGxAa2VybmVsLm9yZz4KPj4gQ2M6IEJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmhAa2VybmVs LmNyYXNoaW5nLm9yZz4KPj4gQ2M6IFBhdWwgTWFja2VycmFzIDxwYXVsdXNAc2FtYmEub3JnPgo+ PiBDYzogTWljaGFlbCBFbGxlcm1hbiA8bXBlQGVsbGVybWFuLmlkLmF1Pgo+PiBDYzogSGVpa28g Q2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+Cj4+IENjOiBWYXNpbHkgR29yYmlr IDxnb3JAbGludXguaWJtLmNvbT4KPj4gQ2M6IENocmlzdGlhbiBCb3JudHJhZWdlciA8Ym9ybnRy YWVnZXJAZGUuaWJtLmNvbT4KPj4gQ2M6IFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4 LmRlPgo+PiBDYzogSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+Cj4+IENjOiBCb3Jpc2xh diBQZXRrb3YgPGJwQGFsaWVuOC5kZT4KPj4gQ2M6ICJILiBQZXRlciBBbnZpbiIgPGhwYUB6eXRv ci5jb20+Cj4+IENjOiBLaXJpbGwgQS4gU2h1dGVtb3YgPGtpcmlsbEBzaHV0ZW1vdi5uYW1lPgo+ PiBDYzogUGF1bCBXYWxtc2xleSA8cGF1bC53YWxtc2xleUBzaWZpdmUuY29tPgo+PiBDYzogUGFs bWVyIERhYmJlbHQgPHBhbG1lckBkYWJiZWx0LmNvbT4KPj4gQ2M6IGxpbnV4LXNucHMtYXJjQGxp c3RzLmluZnJhZGVhZC5vcmcKPj4gQ2M6IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFk Lm9yZwo+PiBDYzogbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcKPj4gQ2M6IGxpbnV4LXMz OTBAdmdlci5rZXJuZWwub3JnCj4+IENjOiBsaW51eC1yaXNjdkBsaXN0cy5pbmZyYWRlYWQub3Jn Cj4+IENjOiB4ODZAa2VybmVsLm9yZwo+PiBDYzogbGludXgtbW1Aa3ZhY2sub3JnCj4+IENjOiBs aW51eC1hcmNoQHZnZXIua2VybmVsLm9yZwo+PiBDYzogbGludXgta2VybmVsQHZnZXIua2VybmVs Lm9yZwo+PiBTdWdnZXN0ZWQtYnk6IENhdGFsaW4gTWFyaW5hcyA8Y2F0YWxpbi5tYXJpbmFzQGFy bS5jb20+Cj4+IFNpZ25lZC1vZmYtYnk6IEFuc2h1bWFuIEtoYW5kdWFsIDxhbnNodW1hbi5raGFu ZHVhbEBhcm0uY29tPgo+PiAtLS0KPj4gwqAgbW0vZGVidWdfdm1fcGd0YWJsZS5jIHwgMzA2ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+PiDCoCAxIGZpbGUgY2hh bmdlZCwgMzA2IGluc2VydGlvbnMoKykKPj4KPj4gZGlmZiAtLWdpdCBhL21tL2RlYnVnX3ZtX3Bn dGFibGUuYyBiL21tL2RlYnVnX3ZtX3BndGFibGUuYwo+PiBpbmRleCBmZmExNjNkNGM2M2MuLmUz ZjlmODMxN2E5OCAxMDA2NDQKPj4gLS0tIGEvbW0vZGVidWdfdm1fcGd0YWJsZS5jCj4+ICsrKyBi L21tL2RlYnVnX3ZtX3BndGFibGUuYwo+PiBAQCAtMjEsNiArMjEsNyBAQAo+PiDCoCAjaW5jbHVk ZSA8bGludXgvbW9kdWxlLmg+Cj4+IMKgICNpbmNsdWRlIDxsaW51eC9wZm5fdC5oPgo+PiDCoCAj aW5jbHVkZSA8bGludXgvcHJpbnRrLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvcGd0YWJsZS5oPgo+ PiDCoCAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+Cj4+IMKgICNpbmNsdWRlIDxsaW51eC9zcGlu bG9jay5oPgo+PiDCoCAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgo+PiBAQCAtMjgsNiArMjksNyBA QAo+PiDCoCAjaW5jbHVkZSA8bGludXgvc3RhcnRfa2VybmVsLmg+Cj4+IMKgICNpbmNsdWRlIDxs aW51eC9zY2hlZC9tbS5oPgo+PiDCoCAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KPj4gKyNpbmNs dWRlIDxhc20vdGxiZmx1c2guaD4KPj4gwqAgwqAgI2RlZmluZSBWTUZMQUdTwqDCoMKgIChWTV9S RUFEfFZNX1dSSVRFfFZNX0VYRUMpCj4+IMKgIEBAIC01NSw2ICs1Nyw1NCBAQCBzdGF0aWMgdm9p ZCBfX2luaXQgcHRlX2Jhc2ljX3Rlc3RzKHVuc2lnbmVkIGxvbmcgcGZuLCBwZ3Byb3RfdCBwcm90 KQo+PiDCoMKgwqDCoMKgIFdBUk5fT04ocHRlX3dyaXRlKHB0ZV93cnByb3RlY3QocHRlX21rd3Jp dGUocHRlKSkpKTsKPj4gwqAgfQo+PiDCoCArc3RhdGljIHZvaWQgX19pbml0IHB0ZV9hZHZhbmNl ZF90ZXN0cyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHB0ZV90ICpwdGVwLAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB2YWRkciwgcGdwcm90 X3QgcHJvdCkKPiAKPiBBbGlnbiBhcmdzIHByb3Blcmx5Lgo+IAo+PiArewo+PiArwqDCoMKgIHB0 ZV90IHB0ZSA9IHBmbl9wdGUocGZuLCBwcm90KTsKPj4gKwo+PiArwqDCoMKgIHB0ZSA9IHBmbl9w dGUocGZuLCBwcm90KTsKPj4gK8KgwqDCoCBzZXRfcHRlX2F0KG1tLCB2YWRkciwgcHRlcCwgcHRl KTsKPj4gK8KgwqDCoCBwdGVwX3NldF93cnByb3RlY3QobW0sIHZhZGRyLCBwdGVwKTsKPj4gK8Kg wqDCoCBwdGUgPSBSRUFEX09OQ0UoKnB0ZXApOwo+PiArwqDCoMKgIFdBUk5fT04ocHRlX3dyaXRl KHB0ZSkpOwo+PiArCj4+ICvCoMKgwqAgcHRlID0gcGZuX3B0ZShwZm4sIHByb3QpOwo+PiArwqDC oMKgIHNldF9wdGVfYXQobW0sIHZhZGRyLCBwdGVwLCBwdGUpOwo+PiArwqDCoMKgIHB0ZXBfZ2V0 X2FuZF9jbGVhcihtbSwgdmFkZHIsIHB0ZXApOwo+PiArwqDCoMKgIHB0ZSA9IFJFQURfT05DRSgq cHRlcCk7Cj4+ICvCoMKgwqAgV0FSTl9PTighcHRlX25vbmUocHRlKSk7Cj4+ICsKPj4gK8KgwqDC oCBwdGUgPSBwZm5fcHRlKHBmbiwgcHJvdCk7Cj4+ICvCoMKgwqAgcHRlID0gcHRlX3dycHJvdGVj dChwdGUpOwo+PiArwqDCoMKgIHB0ZSA9IHB0ZV9ta2NsZWFuKHB0ZSk7Cj4+ICvCoMKgwqAgc2V0 X3B0ZV9hdChtbSwgdmFkZHIsIHB0ZXAsIHB0ZSk7Cj4+ICvCoMKgwqAgcHRlID0gcHRlX21rd3Jp dGUocHRlKTsKPj4gK8KgwqDCoCBwdGUgPSBwdGVfbWtkaXJ0eShwdGUpOwo+PiArwqDCoMKgIHB0 ZXBfc2V0X2FjY2Vzc19mbGFncyh2bWEsIHZhZGRyLCBwdGVwLCBwdGUsIDEpOwo+PiArwqDCoMKg IHB0ZSA9IFJFQURfT05DRSgqcHRlcCk7Cj4+ICvCoMKgwqAgV0FSTl9PTighKHB0ZV93cml0ZShw dGUpICYmIHB0ZV9kaXJ0eShwdGUpKSk7Cj4+ICsKPj4gK8KgwqDCoCBwdGUgPSBwZm5fcHRlKHBm biwgcHJvdCk7Cj4+ICvCoMKgwqAgc2V0X3B0ZV9hdChtbSwgdmFkZHIsIHB0ZXAsIHB0ZSk7Cj4+ ICvCoMKgwqAgcHRlcF9nZXRfYW5kX2NsZWFyX2Z1bGwobW0sIHZhZGRyLCBwdGVwLCAxKTsKPj4g K8KgwqDCoCBwdGUgPSBSRUFEX09OQ0UoKnB0ZXApOwo+PiArwqDCoMKgIFdBUk5fT04oIXB0ZV9u b25lKHB0ZSkpOwo+PiArCj4+ICvCoMKgwqAgcHRlID0gcHRlX21reW91bmcocHRlKTsKPj4gK8Kg wqDCoCBzZXRfcHRlX2F0KG1tLCB2YWRkciwgcHRlcCwgcHRlKTsKPj4gK8KgwqDCoCBwdGVwX3Rl c3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgdmFkZHIsIHB0ZXApOwo+PiArwqDCoMKgIHB0ZSA9IFJF QURfT05DRSgqcHRlcCk7Cj4+ICvCoMKgwqAgV0FSTl9PTihwdGVfeW91bmcocHRlKSk7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIF9faW5pdCBwdGVfc2F2ZWR3cml0ZV90ZXN0cyh1bnNpZ25l ZCBsb25nIHBmbiwgcGdwcm90X3QgcHJvdCkKPj4gK3sKPj4gK8KgwqDCoCBwdGVfdCBwdGUgPSBw Zm5fcHRlKHBmbiwgcHJvdCk7Cj4+ICsKPj4gK8KgwqDCoCBXQVJOX09OKCFwdGVfc2F2ZWR3cml0 ZShwdGVfbWtfc2F2ZWR3cml0ZShwdGVfY2xlYXJfc2F2ZWR3cml0ZShwdGUpKSkpOwo+PiArwqDC oMKgIFdBUk5fT04ocHRlX3NhdmVkd3JpdGUocHRlX2NsZWFyX3NhdmVkd3JpdGUocHRlX21rX3Nh dmVkd3JpdGUocHRlKSkpKTsKPj4gK30KPj4gwqAgI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9I VUdFUEFHRQo+PiDCoCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHVuc2lnbmVk IGxvbmcgcGZuLCBwZ3Byb3RfdCBwcm90KQo+PiDCoCB7Cj4+IEBAIC03Nyw2ICsxMjcsODkgQEAg c3RhdGljIHZvaWQgX19pbml0IHBtZF9iYXNpY190ZXN0cyh1bnNpZ25lZCBsb25nIHBmbiwgcGdw cm90X3QgcHJvdCkKPj4gwqDCoMKgwqDCoCBXQVJOX09OKCFwbWRfYmFkKHBtZF9ta2h1Z2UocG1k KSkpOwo+PiDCoCB9Cj4+IMKgICtzdGF0aWMgdm9pZCBfX2luaXQgcG1kX2FkdmFuY2VkX3Rlc3Rz KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAo+PiArwqDCoMKgwqDCoMKgwqAgc3RydWN0IHZtX2FyZWFf c3RydWN0ICp2bWEsIHBtZF90ICpwbWRwLAo+PiArwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9u ZyBwZm4sIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHBncHJvdF90IHByb3QpCj4gCj4gQWxpZ24gYXJn cyBwcm9wZXJseQo+IAo+PiArewo+PiArwqDCoMKgIHBtZF90IHBtZCA9IHBmbl9wbWQocGZuLCBw cm90KTsKPj4gKwo+PiArwqDCoMKgIGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpCj4+ ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+ICsKPj4gK8KgwqDCoCAvKiBBbGlnbiB0aGUgYWRk cmVzcyB3cnQgSFBBR0VfUE1EX1NJWkUgKi8KPj4gK8KgwqDCoCB2YWRkciA9ICh2YWRkciAmIEhQ QUdFX1BNRF9NQVNLKSArIEhQQUdFX1BNRF9TSVpFOwo+PiArCj4+ICvCoMKgwqAgcG1kID0gcGZu X3BtZChwZm4sIHByb3QpOwo+PiArwqDCoMKgIHNldF9wbWRfYXQobW0sIHZhZGRyLCBwbWRwLCBw bWQpOwo+PiArwqDCoMKgIHBtZHBfc2V0X3dycHJvdGVjdChtbSwgdmFkZHIsIHBtZHApOwo+PiAr wqDCoMKgIHBtZCA9IFJFQURfT05DRSgqcG1kcCk7Cj4+ICvCoMKgwqAgV0FSTl9PTihwbWRfd3Jp dGUocG1kKSk7Cj4+ICsKPj4gK8KgwqDCoCBwbWQgPSBwZm5fcG1kKHBmbiwgcHJvdCk7Cj4+ICvC oMKgwqAgc2V0X3BtZF9hdChtbSwgdmFkZHIsIHBtZHAsIHBtZCk7Cj4+ICvCoMKgwqAgcG1kcF9o dWdlX2dldF9hbmRfY2xlYXIobW0sIHZhZGRyLCBwbWRwKTsKPj4gK8KgwqDCoCBwbWQgPSBSRUFE X09OQ0UoKnBtZHApOwo+PiArwqDCoMKgIFdBUk5fT04oIXBtZF9ub25lKHBtZCkpOwo+PiArCj4+ ICvCoMKgwqAgcG1kID0gcGZuX3BtZChwZm4sIHByb3QpOwo+PiArwqDCoMKgIHBtZCA9IHBtZF93 cnByb3RlY3QocG1kKTsKPj4gK8KgwqDCoCBwbWQgPSBwbWRfbWtjbGVhbihwbWQpOwo+PiArwqDC oMKgIHNldF9wbWRfYXQobW0sIHZhZGRyLCBwbWRwLCBwbWQpOwo+PiArwqDCoMKgIHBtZCA9IHBt ZF9ta3dyaXRlKHBtZCk7Cj4+ICvCoMKgwqAgcG1kID0gcG1kX21rZGlydHkocG1kKTsKPj4gK8Kg wqDCoCBwbWRwX3NldF9hY2Nlc3NfZmxhZ3Modm1hLCB2YWRkciwgcG1kcCwgcG1kLCAxKTsKPj4g K8KgwqDCoCBwbWQgPSBSRUFEX09OQ0UoKnBtZHApOwo+PiArwqDCoMKgIFdBUk5fT04oIShwbWRf d3JpdGUocG1kKSAmJiBwbWRfZGlydHkocG1kKSkpOwo+PiArCj4+ICvCoMKgwqAgcG1kID0gcG1k X21raHVnZShwZm5fcG1kKHBmbiwgcHJvdCkpOwo+PiArwqDCoMKgIHNldF9wbWRfYXQobW0sIHZh ZGRyLCBwbWRwLCBwbWQpOwo+PiArwqDCoMKgIHBtZHBfaHVnZV9nZXRfYW5kX2NsZWFyX2Z1bGwo dm1hLCB2YWRkciwgcG1kcCwgMSk7Cj4+ICvCoMKgwqAgcG1kID0gUkVBRF9PTkNFKCpwbWRwKTsK Pj4gK8KgwqDCoCBXQVJOX09OKCFwbWRfbm9uZShwbWQpKTsKPj4gKwo+PiArwqDCoMKgIHBtZCA9 IHBtZF9ta3lvdW5nKHBtZCk7Cj4+ICvCoMKgwqAgc2V0X3BtZF9hdChtbSwgdmFkZHIsIHBtZHAs IHBtZCk7Cj4+ICvCoMKgwqAgcG1kcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh2bWEsIHZhZGRyLCBw bWRwKTsKPj4gK8KgwqDCoCBwbWQgPSBSRUFEX09OQ0UoKnBtZHApOwo+PiArwqDCoMKgIFdBUk5f T04ocG1kX3lvdW5nKHBtZCkpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBfX2luaXQgcG1k X2xlYWZfdGVzdHModW5zaWduZWQgbG9uZyBwZm4sIHBncHJvdF90IHByb3QpCj4+ICt7Cj4+ICvC oMKgwqAgcG1kX3QgcG1kID0gcGZuX3BtZChwZm4sIHByb3QpOwo+PiArCj4+ICvCoMKgwqAgLyoK Pj4gK8KgwqDCoMKgICogUE1EIGJhc2VkIFRIUCBpcyBhIGxlYWYgZW50cnkuCj4+ICvCoMKgwqDC oCAqLwo+PiArwqDCoMKgIHBtZCA9IHBtZF9ta2h1Z2UocG1kKTsKPj4gK8KgwqDCoCBXQVJOX09O KCFwbWRfbGVhZihwbWQpKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgX19pbml0IHBtZF9o dWdlX3Rlc3RzKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHBmbiwgcGdwcm90X3QgcHJvdCkK Pj4gK3sKPj4gK8KgwqDCoCBwbWRfdCBwbWQ7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIUlTX0VOQUJM RUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVApKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu Owo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAqIFg4NiBkZWZpbmVkIHBtZF9zZXRfaHVnZSgp IHZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuCj4+ICvCoMKgwqDCoCAqIFBNRCBpcyBub3QgYSBwb3B1 bGF0ZWQgbm9uLWxlYWYgZW50cnkuCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgIFdSSVRFX09O Q0UoKnBtZHAsIF9fcG1kKDApKTsKPj4gK8KgwqDCoCBXQVJOX09OKCFwbWRfc2V0X2h1Z2UocG1k cCwgX19wZm5fdG9fcGh5cyhwZm4pLCBwcm90KSk7Cj4+ICvCoMKgwqAgV0FSTl9PTighcG1kX2Ns ZWFyX2h1Z2UocG1kcCkpOwo+PiArwqDCoMKgIHBtZCA9IFJFQURfT05DRSgqcG1kcCk7Cj4+ICvC oMKgwqAgV0FSTl9PTighcG1kX25vbmUocG1kKSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lk IF9faW5pdCBwbWRfc2F2ZWR3cml0ZV90ZXN0cyh1bnNpZ25lZCBsb25nIHBmbiwgcGdwcm90X3Qg cHJvdCkKPj4gK3sKPj4gK8KgwqDCoCBwbWRfdCBwbWQgPSBwZm5fcG1kKHBmbiwgcHJvdCk7Cj4+ ICsKPj4gK8KgwqDCoCBXQVJOX09OKCFwbWRfc2F2ZWR3cml0ZShwbWRfbWtfc2F2ZWR3cml0ZShw bWRfY2xlYXJfc2F2ZWR3cml0ZShwbWQpKSkpOwo+PiArwqDCoMKgIFdBUk5fT04ocG1kX3NhdmVk d3JpdGUocG1kX2NsZWFyX3NhdmVkd3JpdGUocG1kX21rX3NhdmVkd3JpdGUocG1kKSkpKTsKPj4g K30KPj4gKwo+PiDCoCAjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFH RV9QVUQKPj4gwqAgc3RhdGljIHZvaWQgX19pbml0IHB1ZF9iYXNpY190ZXN0cyh1bnNpZ25lZCBs b25nIHBmbiwgcGdwcm90X3QgcHJvdCkKPj4gwqAgewo+PiBAQCAtMTAwLDEyICsyMzMsMTE1IEBA IHN0YXRpYyB2b2lkIF9faW5pdCBwdWRfYmFzaWNfdGVzdHModW5zaWduZWQgbG9uZyBwZm4sIHBn cHJvdF90IHByb3QpCj4+IMKgwqDCoMKgwqDCoCAqLwo+PiDCoMKgwqDCoMKgIFdBUk5fT04oIXB1 ZF9iYWQocHVkX21raHVnZShwdWQpKSk7Cj4+IMKgIH0KPj4gKwo+PiArc3RhdGljIHZvaWQgcHVk X2FkdmFuY2VkX3Rlc3RzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAo+PiArwqDCoMKgwqDCoMKgwqAg c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHB1ZF90ICpwdWRwLAo+PiArwqDCoMKgwqDCoMKg wqAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHBncHJvdF90IHByb3Qp Cj4gCj4gQWxpZ24gYXJncyBwcm9wZXJseQo+IAo+PiArewo+PiArwqDCoMKgIHB1ZF90IHB1ZCA9 IHBmbl9wdWQocGZuLCBwcm90KTsKPj4gKwo+PiArwqDCoMKgIGlmICghaGFzX3RyYW5zcGFyZW50 X2h1Z2VwYWdlKCkpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+ICsKPj4gK8KgwqDCoCAv KiBBbGlnbiB0aGUgYWRkcmVzcyB3cnQgSFBBR0VfUFVEX1NJWkUgKi8KPj4gK8KgwqDCoCB2YWRk ciA9ICh2YWRkciAmIEhQQUdFX1BVRF9NQVNLKSArIEhQQUdFX1BVRF9TSVpFOwo+PiArCj4+ICvC oMKgwqAgc2V0X3B1ZF9hdChtbSwgdmFkZHIsIHB1ZHAsIHB1ZCk7Cj4+ICvCoMKgwqAgcHVkcF9z ZXRfd3Jwcm90ZWN0KG1tLCB2YWRkciwgcHVkcCk7Cj4+ICvCoMKgwqAgcHVkID0gUkVBRF9PTkNF KCpwdWRwKTsKPj4gK8KgwqDCoCBXQVJOX09OKHB1ZF93cml0ZShwdWQpKTsKPj4gKwo+PiArI2lm bmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECj4+ICvCoMKgwqAgcHVkID0gcGZuX3B1ZChwZm4s IHByb3QpOwo+PiArwqDCoMKgIHNldF9wdWRfYXQobW0sIHZhZGRyLCBwdWRwLCBwdWQpOwo+PiAr wqDCoMKgIHB1ZHBfaHVnZV9nZXRfYW5kX2NsZWFyKG1tLCB2YWRkciwgcHVkcCk7Cj4+ICvCoMKg wqAgcHVkID0gUkVBRF9PTkNFKCpwdWRwKTsKPj4gK8KgwqDCoCBXQVJOX09OKCFwdWRfbm9uZShw dWQpKTsKPj4gKwo+PiArwqDCoMKgIHB1ZCA9IHBmbl9wdWQocGZuLCBwcm90KTsKPj4gK8KgwqDC oCBzZXRfcHVkX2F0KG1tLCB2YWRkciwgcHVkcCwgcHVkKTsKPj4gK8KgwqDCoCBwdWRwX2h1Z2Vf Z2V0X2FuZF9jbGVhcl9mdWxsKG1tLCB2YWRkciwgcHVkcCwgMSk7Cj4+ICvCoMKgwqAgcHVkID0g UkVBRF9PTkNFKCpwdWRwKTsKPj4gK8KgwqDCoCBXQVJOX09OKCFwdWRfbm9uZShwdWQpKTsKPj4g KyNlbmRpZiAvKiBfX1BBR0VUQUJMRV9QTURfRk9MREVEICovCj4+ICvCoMKgwqAgcHVkID0gcGZu X3B1ZChwZm4sIHByb3QpOwo+PiArwqDCoMKgIHB1ZCA9IHB1ZF93cnByb3RlY3QocHVkKTsKPj4g K8KgwqDCoCBwdWQgPSBwdWRfbWtjbGVhbihwdWQpOwo+PiArwqDCoMKgIHNldF9wdWRfYXQobW0s IHZhZGRyLCBwdWRwLCBwdWQpOwo+PiArwqDCoMKgIHB1ZCA9IHB1ZF9ta3dyaXRlKHB1ZCk7Cj4+ ICvCoMKgwqAgcHVkID0gcHVkX21rZGlydHkocHVkKTsKPj4gK8KgwqDCoCBwdWRwX3NldF9hY2Nl c3NfZmxhZ3Modm1hLCB2YWRkciwgcHVkcCwgcHVkLCAxKTsKPj4gK8KgwqDCoCBwdWQgPSBSRUFE X09OQ0UoKnB1ZHApOwo+PiArwqDCoMKgIFdBUk5fT04oIShwdWRfd3JpdGUocHVkKSAmJiBwdWRf ZGlydHkocHVkKSkpOwo+PiArCj4+ICvCoMKgwqAgcHVkID0gcHVkX21reW91bmcocHVkKTsKPj4g K8KgwqDCoCBzZXRfcHVkX2F0KG1tLCB2YWRkciwgcHVkcCwgcHVkKTsKPj4gK8KgwqDCoCBwdWRw X3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgdmFkZHIsIHB1ZHApOwo+PiArwqDCoMKgIHB1ZCA9 IFJFQURfT05DRSgqcHVkcCk7Cj4+ICvCoMKgwqAgV0FSTl9PTihwdWRfeW91bmcocHVkKSk7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIF9faW5pdCBwdWRfbGVhZl90ZXN0cyh1bnNpZ25lZCBs b25nIHBmbiwgcGdwcm90X3QgcHJvdCkKPj4gK3sKPj4gK8KgwqDCoCBwdWRfdCBwdWQgPSBwZm5f cHVkKHBmbiwgcHJvdCk7Cj4+ICsKPj4gK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBQVUQgYmFz ZWQgVEhQIGlzIGEgbGVhZiBlbnRyeS4KPj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgcHVkID0g cHVkX21raHVnZShwdWQpOwo+PiArwqDCoMKgIFdBUk5fT04oIXB1ZF9sZWFmKHB1ZCkpOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgdm9pZCBfX2luaXQgcHVkX2h1Z2VfdGVzdHMocHVkX3QgKnB1ZHAs IHVuc2lnbmVkIGxvbmcgcGZuLCBwZ3Byb3RfdCBwcm90KQo+PiArewo+PiArwqDCoMKgIHB1ZF90 IHB1ZDsKPj4gKwo+PiArwqDCoMKgIGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX0hV R0VfVk1BUCkpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+ICvCoMKgwqAgLyoKPj4gK8Kg wqDCoMKgICogWDg2IGRlZmluZWQgcHVkX3NldF9odWdlKCkgdmVyaWZpZXMgdGhhdCB0aGUgZ2l2 ZW4KPj4gK8KgwqDCoMKgICogUFVEIGlzIG5vdCBhIHBvcHVsYXRlZCBub24tbGVhZiBlbnRyeS4K Pj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgV1JJVEVfT05DRSgqcHVkcCwgX19wdWQoMCkpOwo+ PiArwqDCoMKgIFdBUk5fT04oIXB1ZF9zZXRfaHVnZShwdWRwLCBfX3Bmbl90b19waHlzKHBmbiks IHByb3QpKTsKPj4gK8KgwqDCoCBXQVJOX09OKCFwdWRfY2xlYXJfaHVnZShwdWRwKSk7Cj4+ICvC oMKgwqAgcHVkID0gUkVBRF9PTkNFKCpwdWRwKTsKPj4gK8KgwqDCoCBXQVJOX09OKCFwdWRfbm9u ZShwdWQpKTsKPj4gK30KPj4gwqAgI2Vsc2XCoCAvKiAhQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BB UkVOVF9IVUdFUEFHRV9QVUQgKi8KPj4gwqAgc3RhdGljIHZvaWQgX19pbml0IHB1ZF9iYXNpY190 ZXN0cyh1bnNpZ25lZCBsb25nIHBmbiwgcGdwcm90X3QgcHJvdCkgeyB9Cj4+ICtzdGF0aWMgdm9p ZCBwdWRfYWR2YW5jZWRfdGVzdHMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCj4+ICvCoMKgwqDCoMKg wqDCoCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcHVkX3QgKnB1ZHAsCj4+ICvCoMKgwqDC oMKgwqDCoCB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB2YWRkciwgcGdwcm90X3Qg cHJvdCkKPiAKPiBBbGlnbiBhcmdzIHByb3Blcmx5Cj4gCj4+ICt7Cj4+ICt9Cj4+ICtzdGF0aWMg dm9pZCBfX2luaXQgcHVkX2xlYWZfdGVzdHModW5zaWduZWQgbG9uZyBwZm4sIHBncHJvdF90IHBy b3QpIHsgfQo+PiArc3RhdGljIHZvaWQgX19pbml0IHB1ZF9odWdlX3Rlc3RzKHB1ZF90ICpwdWRw LCB1bnNpZ25lZCBsb25nIHBmbiwgcGdwcm90X3QgcHJvdCkKPj4gK3sKPj4gK30KPj4gwqAgI2Vu ZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovCj4+IMKg ICNlbHNlwqAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqLwo+PiDCoCBzdGF0aWMg dm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHVuc2lnbmVkIGxvbmcgcGZuLCBwZ3Byb3RfdCBw cm90KSB7IH0KPj4gwqAgc3RhdGljIHZvaWQgX19pbml0IHB1ZF9iYXNpY190ZXN0cyh1bnNpZ25l ZCBsb25nIHBmbiwgcGdwcm90X3QgcHJvdCkgeyB9Cj4+ICtzdGF0aWMgdm9pZCBfX2luaXQgcG1k X2FkdmFuY2VkX3Rlc3RzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAo+PiArwqDCoMKgwqDCoMKgwqAg c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWRwLAo+PiArwqDCoMKgwqDCoMKg wqAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHBncHJvdF90IHByb3Qp Cj4gCj4gQWxpZ24gYXJncyBwcm9wZXJseQo+IAo+PiArewo+PiArfQo+PiArc3RhdGljIHZvaWQg X19pbml0IHB1ZF9hZHZhbmNlZF90ZXN0cyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPj4gK8KgwqDC oMKgwqDCoMKgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdWRfdCAqcHVkcCwKPj4gK8Kg wqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHZhZGRyLCBwZ3By b3RfdCBwcm90KQo+IAo+IEFsaWduIGFyZ3MgcHJvcGVybHkKPiAKClN1cmUsIHdpbGwgZml4IHRo ZSBhcmd1bWVudHMgYWxpZ25tZW50IGluIHRoZSBhYm92ZSBtZW50aW9uZWQgcGxhY2VzLgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtcmlzY3Yg bWFpbGluZyBsaXN0CmxpbnV4LXJpc2N2QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yaXNjdgo= 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=-8.5 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,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 A9911C433E1 for ; Mon, 29 Jun 2020 08:17:44 +0000 (UTC) Received: from lists.ozlabs.org (lists.ozlabs.org [203.11.71.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0259723371 for ; Mon, 29 Jun 2020 08:17:43 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0259723371 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Received: from bilbo.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 49wL2Z1YJvzDqNK for ; Mon, 29 Jun 2020 18:17:42 +1000 (AEST) Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=arm.com (client-ip=217.140.110.172; helo=foss.arm.com; envelope-from=anshuman.khandual@arm.com; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=none (p=none dis=none) header.from=arm.com Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lists.ozlabs.org (Postfix) with ESMTP id 49wL0d3MXZzDqDd for ; Mon, 29 Jun 2020 18:16:00 +1000 (AEST) 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 9498131B; Mon, 29 Jun 2020 01:15:58 -0700 (PDT) Received: from [10.163.83.176] (unknown [10.163.83.176]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 9CA863F71E; Mon, 29 Jun 2020 01:15:47 -0700 (PDT) Subject: Re: [PATCH V3 2/4] mm/debug_vm_pgtable: Add tests validating advanced arch page table helpers To: Christophe Leroy , linux-mm@kvack.org References: <1592192277-8421-1-git-send-email-anshuman.khandual@arm.com> <1592192277-8421-3-git-send-email-anshuman.khandual@arm.com> <4da41eee-5ce0-2a5e-40eb-4424655b3489@csgroup.eu> From: Anshuman Khandual Message-ID: <1a6138ca-40b0-5076-2f09-4ce6b7ee8d36@arm.com> Date: Mon, 29 Jun 2020 13:45:37 +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: <4da41eee-5ce0-2a5e-40eb-4424655b3489@csgroup.eu> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Heiko Carstens , Paul Mackerras , "H. Peter Anvin" , linux-riscv@lists.infradead.org, Will Deacon , linux-arch@vger.kernel.org, linux-s390@vger.kernel.org, x86@kernel.org, Mike Rapoport , Christian Borntraeger , Ingo Molnar , gerald.schaefer@de.ibm.com, ziy@nvidia.com, Catalin Marinas , linux-snps-arc@lists.infradead.org, Vasily Gorbik , Borislav Petkov , Paul Walmsley , "Kirill A . Shutemov" , Thomas Gleixner , linux-arm-kernel@lists.infradead.org, Vineet Gupta , linux-kernel@vger.kernel.org, Palmer Dabbelt , Andrew Morton , linuxppc-dev@lists.ozlabs.org Errors-To: linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Sender: "Linuxppc-dev" On 06/27/2020 12:56 PM, Christophe Leroy wrote: > > > Le 15/06/2020 à 05:37, Anshuman Khandual a écrit : >> This adds new tests validating for these following arch advanced page table >> helpers. These tests create and test specific mapping types at various page >> table levels. >> >> 1. pxxp_set_wrprotect() >> 2. pxxp_get_and_clear() >> 3. pxxp_set_access_flags() >> 4. pxxp_get_and_clear_full() >> 5. pxxp_test_and_clear_young() >> 6. pxx_leaf() >> 7. pxx_set_huge() >> 8. pxx_(clear|mk)_savedwrite() >> 9. huge_pxxp_xxx() >> >> Cc: Andrew Morton >> Cc: Mike Rapoport >> Cc: Vineet Gupta >> Cc: Catalin Marinas >> Cc: Will Deacon >> Cc: Benjamin Herrenschmidt >> Cc: Paul Mackerras >> Cc: Michael Ellerman >> Cc: Heiko Carstens >> Cc: Vasily Gorbik >> Cc: Christian Borntraeger >> Cc: Thomas Gleixner >> Cc: Ingo Molnar >> Cc: Borislav Petkov >> Cc: "H. Peter Anvin" >> Cc: Kirill A. Shutemov >> Cc: Paul Walmsley >> Cc: Palmer Dabbelt >> Cc: linux-snps-arc@lists.infradead.org >> Cc: linux-arm-kernel@lists.infradead.org >> Cc: linuxppc-dev@lists.ozlabs.org >> Cc: linux-s390@vger.kernel.org >> Cc: linux-riscv@lists.infradead.org >> Cc: x86@kernel.org >> Cc: linux-mm@kvack.org >> Cc: linux-arch@vger.kernel.org >> Cc: linux-kernel@vger.kernel.org >> Suggested-by: Catalin Marinas >> Signed-off-by: Anshuman Khandual >> --- >>   mm/debug_vm_pgtable.c | 306 ++++++++++++++++++++++++++++++++++++++++++ >>   1 file changed, 306 insertions(+) >> >> diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c >> index ffa163d4c63c..e3f9f8317a98 100644 >> --- a/mm/debug_vm_pgtable.c >> +++ b/mm/debug_vm_pgtable.c >> @@ -21,6 +21,7 @@ >>   #include >>   #include >>   #include >> +#include >>   #include >>   #include >>   #include >> @@ -28,6 +29,7 @@ >>   #include >>   #include >>   #include >> +#include >>     #define VMFLAGS    (VM_READ|VM_WRITE|VM_EXEC) >>   @@ -55,6 +57,54 @@ static void __init pte_basic_tests(unsigned long pfn, pgprot_t prot) >>       WARN_ON(pte_write(pte_wrprotect(pte_mkwrite(pte)))); >>   } >>   +static void __init pte_advanced_tests(struct mm_struct *mm, >> +            struct vm_area_struct *vma, pte_t *ptep, >> +            unsigned long pfn, unsigned long vaddr, pgprot_t prot) > > Align args properly. > >> +{ >> +    pte_t pte = pfn_pte(pfn, prot); >> + >> +    pte = pfn_pte(pfn, prot); >> +    set_pte_at(mm, vaddr, ptep, pte); >> +    ptep_set_wrprotect(mm, vaddr, ptep); >> +    pte = READ_ONCE(*ptep); >> +    WARN_ON(pte_write(pte)); >> + >> +    pte = pfn_pte(pfn, prot); >> +    set_pte_at(mm, vaddr, ptep, pte); >> +    ptep_get_and_clear(mm, vaddr, ptep); >> +    pte = READ_ONCE(*ptep); >> +    WARN_ON(!pte_none(pte)); >> + >> +    pte = pfn_pte(pfn, prot); >> +    pte = pte_wrprotect(pte); >> +    pte = pte_mkclean(pte); >> +    set_pte_at(mm, vaddr, ptep, pte); >> +    pte = pte_mkwrite(pte); >> +    pte = pte_mkdirty(pte); >> +    ptep_set_access_flags(vma, vaddr, ptep, pte, 1); >> +    pte = READ_ONCE(*ptep); >> +    WARN_ON(!(pte_write(pte) && pte_dirty(pte))); >> + >> +    pte = pfn_pte(pfn, prot); >> +    set_pte_at(mm, vaddr, ptep, pte); >> +    ptep_get_and_clear_full(mm, vaddr, ptep, 1); >> +    pte = READ_ONCE(*ptep); >> +    WARN_ON(!pte_none(pte)); >> + >> +    pte = pte_mkyoung(pte); >> +    set_pte_at(mm, vaddr, ptep, pte); >> +    ptep_test_and_clear_young(vma, vaddr, ptep); >> +    pte = READ_ONCE(*ptep); >> +    WARN_ON(pte_young(pte)); >> +} >> + >> +static void __init pte_savedwrite_tests(unsigned long pfn, pgprot_t prot) >> +{ >> +    pte_t pte = pfn_pte(pfn, prot); >> + >> +    WARN_ON(!pte_savedwrite(pte_mk_savedwrite(pte_clear_savedwrite(pte)))); >> +    WARN_ON(pte_savedwrite(pte_clear_savedwrite(pte_mk_savedwrite(pte)))); >> +} >>   #ifdef CONFIG_TRANSPARENT_HUGEPAGE >>   static void __init pmd_basic_tests(unsigned long pfn, pgprot_t prot) >>   { >> @@ -77,6 +127,89 @@ static void __init pmd_basic_tests(unsigned long pfn, pgprot_t prot) >>       WARN_ON(!pmd_bad(pmd_mkhuge(pmd))); >>   } >>   +static void __init pmd_advanced_tests(struct mm_struct *mm, >> +        struct vm_area_struct *vma, pmd_t *pmdp, >> +        unsigned long pfn, unsigned long vaddr, pgprot_t prot) > > Align args properly > >> +{ >> +    pmd_t pmd = pfn_pmd(pfn, prot); >> + >> +    if (!has_transparent_hugepage()) >> +        return; >> + >> +    /* Align the address wrt HPAGE_PMD_SIZE */ >> +    vaddr = (vaddr & HPAGE_PMD_MASK) + HPAGE_PMD_SIZE; >> + >> +    pmd = pfn_pmd(pfn, prot); >> +    set_pmd_at(mm, vaddr, pmdp, pmd); >> +    pmdp_set_wrprotect(mm, vaddr, pmdp); >> +    pmd = READ_ONCE(*pmdp); >> +    WARN_ON(pmd_write(pmd)); >> + >> +    pmd = pfn_pmd(pfn, prot); >> +    set_pmd_at(mm, vaddr, pmdp, pmd); >> +    pmdp_huge_get_and_clear(mm, vaddr, pmdp); >> +    pmd = READ_ONCE(*pmdp); >> +    WARN_ON(!pmd_none(pmd)); >> + >> +    pmd = pfn_pmd(pfn, prot); >> +    pmd = pmd_wrprotect(pmd); >> +    pmd = pmd_mkclean(pmd); >> +    set_pmd_at(mm, vaddr, pmdp, pmd); >> +    pmd = pmd_mkwrite(pmd); >> +    pmd = pmd_mkdirty(pmd); >> +    pmdp_set_access_flags(vma, vaddr, pmdp, pmd, 1); >> +    pmd = READ_ONCE(*pmdp); >> +    WARN_ON(!(pmd_write(pmd) && pmd_dirty(pmd))); >> + >> +    pmd = pmd_mkhuge(pfn_pmd(pfn, prot)); >> +    set_pmd_at(mm, vaddr, pmdp, pmd); >> +    pmdp_huge_get_and_clear_full(vma, vaddr, pmdp, 1); >> +    pmd = READ_ONCE(*pmdp); >> +    WARN_ON(!pmd_none(pmd)); >> + >> +    pmd = pmd_mkyoung(pmd); >> +    set_pmd_at(mm, vaddr, pmdp, pmd); >> +    pmdp_test_and_clear_young(vma, vaddr, pmdp); >> +    pmd = READ_ONCE(*pmdp); >> +    WARN_ON(pmd_young(pmd)); >> +} >> + >> +static void __init pmd_leaf_tests(unsigned long pfn, pgprot_t prot) >> +{ >> +    pmd_t pmd = pfn_pmd(pfn, prot); >> + >> +    /* >> +     * PMD based THP is a leaf entry. >> +     */ >> +    pmd = pmd_mkhuge(pmd); >> +    WARN_ON(!pmd_leaf(pmd)); >> +} >> + >> +static void __init pmd_huge_tests(pmd_t *pmdp, unsigned long pfn, pgprot_t prot) >> +{ >> +    pmd_t pmd; >> + >> +    if (!IS_ENABLED(CONFIG_HAVE_ARCH_HUGE_VMAP)) >> +        return; >> +    /* >> +     * X86 defined pmd_set_huge() verifies that the given >> +     * PMD is not a populated non-leaf entry. >> +     */ >> +    WRITE_ONCE(*pmdp, __pmd(0)); >> +    WARN_ON(!pmd_set_huge(pmdp, __pfn_to_phys(pfn), prot)); >> +    WARN_ON(!pmd_clear_huge(pmdp)); >> +    pmd = READ_ONCE(*pmdp); >> +    WARN_ON(!pmd_none(pmd)); >> +} >> + >> +static void __init pmd_savedwrite_tests(unsigned long pfn, pgprot_t prot) >> +{ >> +    pmd_t pmd = 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)))); >> +} >> + >>   #ifdef CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD >>   static void __init pud_basic_tests(unsigned long pfn, pgprot_t prot) >>   { >> @@ -100,12 +233,115 @@ static void __init pud_basic_tests(unsigned long pfn, pgprot_t prot) >>        */ >>       WARN_ON(!pud_bad(pud_mkhuge(pud))); >>   } >> + >> +static void pud_advanced_tests(struct mm_struct *mm, >> +        struct vm_area_struct *vma, pud_t *pudp, >> +        unsigned long pfn, unsigned long vaddr, pgprot_t prot) > > Align args properly > >> +{ >> +    pud_t pud = pfn_pud(pfn, prot); >> + >> +    if (!has_transparent_hugepage()) >> +        return; >> + >> +    /* Align the address wrt HPAGE_PUD_SIZE */ >> +    vaddr = (vaddr & HPAGE_PUD_MASK) + HPAGE_PUD_SIZE; >> + >> +    set_pud_at(mm, vaddr, pudp, pud); >> +    pudp_set_wrprotect(mm, vaddr, pudp); >> +    pud = READ_ONCE(*pudp); >> +    WARN_ON(pud_write(pud)); >> + >> +#ifndef __PAGETABLE_PMD_FOLDED >> +    pud = pfn_pud(pfn, prot); >> +    set_pud_at(mm, vaddr, pudp, pud); >> +    pudp_huge_get_and_clear(mm, vaddr, pudp); >> +    pud = READ_ONCE(*pudp); >> +    WARN_ON(!pud_none(pud)); >> + >> +    pud = pfn_pud(pfn, prot); >> +    set_pud_at(mm, vaddr, pudp, pud); >> +    pudp_huge_get_and_clear_full(mm, vaddr, pudp, 1); >> +    pud = READ_ONCE(*pudp); >> +    WARN_ON(!pud_none(pud)); >> +#endif /* __PAGETABLE_PMD_FOLDED */ >> +    pud = pfn_pud(pfn, prot); >> +    pud = pud_wrprotect(pud); >> +    pud = pud_mkclean(pud); >> +    set_pud_at(mm, vaddr, pudp, pud); >> +    pud = pud_mkwrite(pud); >> +    pud = pud_mkdirty(pud); >> +    pudp_set_access_flags(vma, vaddr, pudp, pud, 1); >> +    pud = READ_ONCE(*pudp); >> +    WARN_ON(!(pud_write(pud) && pud_dirty(pud))); >> + >> +    pud = pud_mkyoung(pud); >> +    set_pud_at(mm, vaddr, pudp, pud); >> +    pudp_test_and_clear_young(vma, vaddr, pudp); >> +    pud = READ_ONCE(*pudp); >> +    WARN_ON(pud_young(pud)); >> +} >> + >> +static void __init pud_leaf_tests(unsigned long pfn, pgprot_t prot) >> +{ >> +    pud_t pud = pfn_pud(pfn, prot); >> + >> +    /* >> +     * PUD based THP is a leaf entry. >> +     */ >> +    pud = pud_mkhuge(pud); >> +    WARN_ON(!pud_leaf(pud)); >> +} >> + >> +static void __init pud_huge_tests(pud_t *pudp, unsigned long pfn, pgprot_t prot) >> +{ >> +    pud_t pud; >> + >> +    if (!IS_ENABLED(CONFIG_HAVE_ARCH_HUGE_VMAP)) >> +        return; >> +    /* >> +     * X86 defined pud_set_huge() verifies that the given >> +     * PUD is not a populated non-leaf entry. >> +     */ >> +    WRITE_ONCE(*pudp, __pud(0)); >> +    WARN_ON(!pud_set_huge(pudp, __pfn_to_phys(pfn), prot)); >> +    WARN_ON(!pud_clear_huge(pudp)); >> +    pud = READ_ONCE(*pudp); >> +    WARN_ON(!pud_none(pud)); >> +} >>   #else  /* !CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD */ >>   static void __init pud_basic_tests(unsigned long pfn, pgprot_t prot) { } >> +static void pud_advanced_tests(struct mm_struct *mm, >> +        struct vm_area_struct *vma, pud_t *pudp, >> +        unsigned long pfn, unsigned long vaddr, pgprot_t prot) > > Align args properly > >> +{ >> +} >> +static void __init pud_leaf_tests(unsigned long pfn, pgprot_t prot) { } >> +static void __init pud_huge_tests(pud_t *pudp, unsigned long pfn, pgprot_t prot) >> +{ >> +} >>   #endif /* CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD */ >>   #else  /* !CONFIG_TRANSPARENT_HUGEPAGE */ >>   static void __init pmd_basic_tests(unsigned long pfn, pgprot_t prot) { } >>   static void __init pud_basic_tests(unsigned long pfn, pgprot_t prot) { } >> +static void __init pmd_advanced_tests(struct mm_struct *mm, >> +        struct vm_area_struct *vma, pmd_t *pmdp, >> +        unsigned long pfn, unsigned long vaddr, pgprot_t prot) > > Align args properly > >> +{ >> +} >> +static void __init pud_advanced_tests(struct mm_struct *mm, >> +        struct vm_area_struct *vma, pud_t *pudp, >> +        unsigned long pfn, unsigned long vaddr, pgprot_t prot) > > Align args properly > Sure, will fix the arguments alignment in the above mentioned places. 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=-8.5 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 75691C433E0 for ; Mon, 29 Jun 2020 08:16:25 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 2F7F223358 for ; Mon, 29 Jun 2020 08:16:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="JiMRzDg2" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2F7F223358 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-snps-arc-bounces+linux-snps-arc=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=fRHTZuvZADShw4we3KBuOk0ayKD1YAMSwuNhHn6ncC0=; b=JiMRzDg2habe6KWdG+5fJQjz2 UtDmH87bgI7TseO+UN1qrvic2XQRVF9SNvKjS2grpD1zkZcYwht2j2pLlxxUYvZP4fu4Ss08tcop/ s+4UzCxQJgTz7/XnXrecUMN8C5pxfuAhwsPEv0N6S2PR+nJBUi6bawpPeNS+JlIR7N0r0RgYjQIuA nOmpL/DtLkCLjQ+CIuZ8CftqUXK9mPCxikQ0XjI9weRbysL4pPenTnKRNQ149q7V0mm+s/aeyyyGC WLm2mo/9h3G4s+8RyTTsvZcRR2iPdEqfsbJ7mraj5rPV/DtpuaVxqUwlifAaGf/b7lyqoaPDveedR 9uvj5hkQw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jpoxj-00024U-Su; Mon, 29 Jun 2020 08:16:23 +0000 Received: from foss.arm.com ([217.140.110.172]) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jpoxM-0001uP-KW; Mon, 29 Jun 2020 08:16:02 +0000 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 9498131B; Mon, 29 Jun 2020 01:15:58 -0700 (PDT) Received: from [10.163.83.176] (unknown [10.163.83.176]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 9CA863F71E; Mon, 29 Jun 2020 01:15:47 -0700 (PDT) Subject: Re: [PATCH V3 2/4] mm/debug_vm_pgtable: Add tests validating advanced arch page table helpers To: Christophe Leroy , linux-mm@kvack.org References: <1592192277-8421-1-git-send-email-anshuman.khandual@arm.com> <1592192277-8421-3-git-send-email-anshuman.khandual@arm.com> <4da41eee-5ce0-2a5e-40eb-4424655b3489@csgroup.eu> From: Anshuman Khandual Message-ID: <1a6138ca-40b0-5076-2f09-4ce6b7ee8d36@arm.com> Date: Mon, 29 Jun 2020 13:45:37 +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: <4da41eee-5ce0-2a5e-40eb-4424655b3489@csgroup.eu> Content-Language: en-US X-BeenThere: linux-snps-arc@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on Synopsys ARC Processors List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Benjamin Herrenschmidt , Heiko Carstens , Paul Mackerras , "H. Peter Anvin" , linux-riscv@lists.infradead.org, Will Deacon , linux-arch@vger.kernel.org, linux-s390@vger.kernel.org, Michael Ellerman , x86@kernel.org, Mike Rapoport , Christian Borntraeger , Ingo Molnar , gerald.schaefer@de.ibm.com, ziy@nvidia.com, Catalin Marinas , linux-snps-arc@lists.infradead.org, Vasily Gorbik , Borislav Petkov , Paul Walmsley , "Kirill A . Shutemov" , Thomas Gleixner , linux-arm-kernel@lists.infradead.org, Vineet Gupta , linux-kernel@vger.kernel.org, Palmer Dabbelt , Andrew Morton , linuxppc-dev@lists.ozlabs.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-snps-arc" Errors-To: linux-snps-arc-bounces+linux-snps-arc=archiver.kernel.org@lists.infradead.org CgpPbiAwNi8yNy8yMDIwIDEyOjU2IFBNLCBDaHJpc3RvcGhlIExlcm95IHdyb3RlOgo+IAo+IAo+ IExlIDE1LzA2LzIwMjAgw6AgMDU6MzcsIEFuc2h1bWFuIEtoYW5kdWFsIGEgw6ljcml0wqA6Cj4+ IFRoaXMgYWRkcyBuZXcgdGVzdHMgdmFsaWRhdGluZyBmb3IgdGhlc2UgZm9sbG93aW5nIGFyY2gg YWR2YW5jZWQgcGFnZSB0YWJsZQo+PiBoZWxwZXJzLiBUaGVzZSB0ZXN0cyBjcmVhdGUgYW5kIHRl c3Qgc3BlY2lmaWMgbWFwcGluZyB0eXBlcyBhdCB2YXJpb3VzIHBhZ2UKPj4gdGFibGUgbGV2ZWxz Lgo+Pgo+PiAxLiBweHhwX3NldF93cnByb3RlY3QoKQo+PiAyLiBweHhwX2dldF9hbmRfY2xlYXIo KQo+PiAzLiBweHhwX3NldF9hY2Nlc3NfZmxhZ3MoKQo+PiA0LiBweHhwX2dldF9hbmRfY2xlYXJf ZnVsbCgpCj4+IDUuIHB4eHBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKQo+PiA2LiBweHhfbGVhZigp Cj4+IDcuIHB4eF9zZXRfaHVnZSgpCj4+IDguIHB4eF8oY2xlYXJ8bWspX3NhdmVkd3JpdGUoKQo+ PiA5LiBodWdlX3B4eHBfeHh4KCkKPj4KPj4gQ2M6IEFuZHJldyBNb3J0b24gPGFrcG1AbGludXgt Zm91bmRhdGlvbi5vcmc+Cj4+IENjOiBNaWtlIFJhcG9wb3J0IDxycHB0QGxpbnV4LmlibS5jb20+ Cj4+IENjOiBWaW5lZXQgR3VwdGEgPHZndXB0YUBzeW5vcHN5cy5jb20+Cj4+IENjOiBDYXRhbGlu IE1hcmluYXMgPGNhdGFsaW4ubWFyaW5hc0Bhcm0uY29tPgo+PiBDYzogV2lsbCBEZWFjb24gPHdp bGxAa2VybmVsLm9yZz4KPj4gQ2M6IEJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmhAa2VybmVs LmNyYXNoaW5nLm9yZz4KPj4gQ2M6IFBhdWwgTWFja2VycmFzIDxwYXVsdXNAc2FtYmEub3JnPgo+ PiBDYzogTWljaGFlbCBFbGxlcm1hbiA8bXBlQGVsbGVybWFuLmlkLmF1Pgo+PiBDYzogSGVpa28g Q2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+Cj4+IENjOiBWYXNpbHkgR29yYmlr IDxnb3JAbGludXguaWJtLmNvbT4KPj4gQ2M6IENocmlzdGlhbiBCb3JudHJhZWdlciA8Ym9ybnRy YWVnZXJAZGUuaWJtLmNvbT4KPj4gQ2M6IFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4 LmRlPgo+PiBDYzogSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+Cj4+IENjOiBCb3Jpc2xh diBQZXRrb3YgPGJwQGFsaWVuOC5kZT4KPj4gQ2M6ICJILiBQZXRlciBBbnZpbiIgPGhwYUB6eXRv ci5jb20+Cj4+IENjOiBLaXJpbGwgQS4gU2h1dGVtb3YgPGtpcmlsbEBzaHV0ZW1vdi5uYW1lPgo+ PiBDYzogUGF1bCBXYWxtc2xleSA8cGF1bC53YWxtc2xleUBzaWZpdmUuY29tPgo+PiBDYzogUGFs bWVyIERhYmJlbHQgPHBhbG1lckBkYWJiZWx0LmNvbT4KPj4gQ2M6IGxpbnV4LXNucHMtYXJjQGxp c3RzLmluZnJhZGVhZC5vcmcKPj4gQ2M6IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFk Lm9yZwo+PiBDYzogbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcKPj4gQ2M6IGxpbnV4LXMz OTBAdmdlci5rZXJuZWwub3JnCj4+IENjOiBsaW51eC1yaXNjdkBsaXN0cy5pbmZyYWRlYWQub3Jn Cj4+IENjOiB4ODZAa2VybmVsLm9yZwo+PiBDYzogbGludXgtbW1Aa3ZhY2sub3JnCj4+IENjOiBs aW51eC1hcmNoQHZnZXIua2VybmVsLm9yZwo+PiBDYzogbGludXgta2VybmVsQHZnZXIua2VybmVs Lm9yZwo+PiBTdWdnZXN0ZWQtYnk6IENhdGFsaW4gTWFyaW5hcyA8Y2F0YWxpbi5tYXJpbmFzQGFy bS5jb20+Cj4+IFNpZ25lZC1vZmYtYnk6IEFuc2h1bWFuIEtoYW5kdWFsIDxhbnNodW1hbi5raGFu ZHVhbEBhcm0uY29tPgo+PiAtLS0KPj4gwqAgbW0vZGVidWdfdm1fcGd0YWJsZS5jIHwgMzA2ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+PiDCoCAxIGZpbGUgY2hh bmdlZCwgMzA2IGluc2VydGlvbnMoKykKPj4KPj4gZGlmZiAtLWdpdCBhL21tL2RlYnVnX3ZtX3Bn dGFibGUuYyBiL21tL2RlYnVnX3ZtX3BndGFibGUuYwo+PiBpbmRleCBmZmExNjNkNGM2M2MuLmUz ZjlmODMxN2E5OCAxMDA2NDQKPj4gLS0tIGEvbW0vZGVidWdfdm1fcGd0YWJsZS5jCj4+ICsrKyBi L21tL2RlYnVnX3ZtX3BndGFibGUuYwo+PiBAQCAtMjEsNiArMjEsNyBAQAo+PiDCoCAjaW5jbHVk ZSA8bGludXgvbW9kdWxlLmg+Cj4+IMKgICNpbmNsdWRlIDxsaW51eC9wZm5fdC5oPgo+PiDCoCAj aW5jbHVkZSA8bGludXgvcHJpbnRrLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvcGd0YWJsZS5oPgo+ PiDCoCAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+Cj4+IMKgICNpbmNsdWRlIDxsaW51eC9zcGlu bG9jay5oPgo+PiDCoCAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgo+PiBAQCAtMjgsNiArMjksNyBA QAo+PiDCoCAjaW5jbHVkZSA8bGludXgvc3RhcnRfa2VybmVsLmg+Cj4+IMKgICNpbmNsdWRlIDxs aW51eC9zY2hlZC9tbS5oPgo+PiDCoCAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KPj4gKyNpbmNs dWRlIDxhc20vdGxiZmx1c2guaD4KPj4gwqAgwqAgI2RlZmluZSBWTUZMQUdTwqDCoMKgIChWTV9S RUFEfFZNX1dSSVRFfFZNX0VYRUMpCj4+IMKgIEBAIC01NSw2ICs1Nyw1NCBAQCBzdGF0aWMgdm9p ZCBfX2luaXQgcHRlX2Jhc2ljX3Rlc3RzKHVuc2lnbmVkIGxvbmcgcGZuLCBwZ3Byb3RfdCBwcm90 KQo+PiDCoMKgwqDCoMKgIFdBUk5fT04ocHRlX3dyaXRlKHB0ZV93cnByb3RlY3QocHRlX21rd3Jp dGUocHRlKSkpKTsKPj4gwqAgfQo+PiDCoCArc3RhdGljIHZvaWQgX19pbml0IHB0ZV9hZHZhbmNl ZF90ZXN0cyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHB0ZV90ICpwdGVwLAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB2YWRkciwgcGdwcm90 X3QgcHJvdCkKPiAKPiBBbGlnbiBhcmdzIHByb3Blcmx5Lgo+IAo+PiArewo+PiArwqDCoMKgIHB0 ZV90IHB0ZSA9IHBmbl9wdGUocGZuLCBwcm90KTsKPj4gKwo+PiArwqDCoMKgIHB0ZSA9IHBmbl9w dGUocGZuLCBwcm90KTsKPj4gK8KgwqDCoCBzZXRfcHRlX2F0KG1tLCB2YWRkciwgcHRlcCwgcHRl KTsKPj4gK8KgwqDCoCBwdGVwX3NldF93cnByb3RlY3QobW0sIHZhZGRyLCBwdGVwKTsKPj4gK8Kg wqDCoCBwdGUgPSBSRUFEX09OQ0UoKnB0ZXApOwo+PiArwqDCoMKgIFdBUk5fT04ocHRlX3dyaXRl KHB0ZSkpOwo+PiArCj4+ICvCoMKgwqAgcHRlID0gcGZuX3B0ZShwZm4sIHByb3QpOwo+PiArwqDC oMKgIHNldF9wdGVfYXQobW0sIHZhZGRyLCBwdGVwLCBwdGUpOwo+PiArwqDCoMKgIHB0ZXBfZ2V0 X2FuZF9jbGVhcihtbSwgdmFkZHIsIHB0ZXApOwo+PiArwqDCoMKgIHB0ZSA9IFJFQURfT05DRSgq cHRlcCk7Cj4+ICvCoMKgwqAgV0FSTl9PTighcHRlX25vbmUocHRlKSk7Cj4+ICsKPj4gK8KgwqDC oCBwdGUgPSBwZm5fcHRlKHBmbiwgcHJvdCk7Cj4+ICvCoMKgwqAgcHRlID0gcHRlX3dycHJvdGVj dChwdGUpOwo+PiArwqDCoMKgIHB0ZSA9IHB0ZV9ta2NsZWFuKHB0ZSk7Cj4+ICvCoMKgwqAgc2V0 X3B0ZV9hdChtbSwgdmFkZHIsIHB0ZXAsIHB0ZSk7Cj4+ICvCoMKgwqAgcHRlID0gcHRlX21rd3Jp dGUocHRlKTsKPj4gK8KgwqDCoCBwdGUgPSBwdGVfbWtkaXJ0eShwdGUpOwo+PiArwqDCoMKgIHB0 ZXBfc2V0X2FjY2Vzc19mbGFncyh2bWEsIHZhZGRyLCBwdGVwLCBwdGUsIDEpOwo+PiArwqDCoMKg IHB0ZSA9IFJFQURfT05DRSgqcHRlcCk7Cj4+ICvCoMKgwqAgV0FSTl9PTighKHB0ZV93cml0ZShw dGUpICYmIHB0ZV9kaXJ0eShwdGUpKSk7Cj4+ICsKPj4gK8KgwqDCoCBwdGUgPSBwZm5fcHRlKHBm biwgcHJvdCk7Cj4+ICvCoMKgwqAgc2V0X3B0ZV9hdChtbSwgdmFkZHIsIHB0ZXAsIHB0ZSk7Cj4+ ICvCoMKgwqAgcHRlcF9nZXRfYW5kX2NsZWFyX2Z1bGwobW0sIHZhZGRyLCBwdGVwLCAxKTsKPj4g K8KgwqDCoCBwdGUgPSBSRUFEX09OQ0UoKnB0ZXApOwo+PiArwqDCoMKgIFdBUk5fT04oIXB0ZV9u b25lKHB0ZSkpOwo+PiArCj4+ICvCoMKgwqAgcHRlID0gcHRlX21reW91bmcocHRlKTsKPj4gK8Kg wqDCoCBzZXRfcHRlX2F0KG1tLCB2YWRkciwgcHRlcCwgcHRlKTsKPj4gK8KgwqDCoCBwdGVwX3Rl c3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgdmFkZHIsIHB0ZXApOwo+PiArwqDCoMKgIHB0ZSA9IFJF QURfT05DRSgqcHRlcCk7Cj4+ICvCoMKgwqAgV0FSTl9PTihwdGVfeW91bmcocHRlKSk7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIF9faW5pdCBwdGVfc2F2ZWR3cml0ZV90ZXN0cyh1bnNpZ25l ZCBsb25nIHBmbiwgcGdwcm90X3QgcHJvdCkKPj4gK3sKPj4gK8KgwqDCoCBwdGVfdCBwdGUgPSBw Zm5fcHRlKHBmbiwgcHJvdCk7Cj4+ICsKPj4gK8KgwqDCoCBXQVJOX09OKCFwdGVfc2F2ZWR3cml0 ZShwdGVfbWtfc2F2ZWR3cml0ZShwdGVfY2xlYXJfc2F2ZWR3cml0ZShwdGUpKSkpOwo+PiArwqDC oMKgIFdBUk5fT04ocHRlX3NhdmVkd3JpdGUocHRlX2NsZWFyX3NhdmVkd3JpdGUocHRlX21rX3Nh dmVkd3JpdGUocHRlKSkpKTsKPj4gK30KPj4gwqAgI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9I VUdFUEFHRQo+PiDCoCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHVuc2lnbmVk IGxvbmcgcGZuLCBwZ3Byb3RfdCBwcm90KQo+PiDCoCB7Cj4+IEBAIC03Nyw2ICsxMjcsODkgQEAg c3RhdGljIHZvaWQgX19pbml0IHBtZF9iYXNpY190ZXN0cyh1bnNpZ25lZCBsb25nIHBmbiwgcGdw cm90X3QgcHJvdCkKPj4gwqDCoMKgwqDCoCBXQVJOX09OKCFwbWRfYmFkKHBtZF9ta2h1Z2UocG1k KSkpOwo+PiDCoCB9Cj4+IMKgICtzdGF0aWMgdm9pZCBfX2luaXQgcG1kX2FkdmFuY2VkX3Rlc3Rz KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAo+PiArwqDCoMKgwqDCoMKgwqAgc3RydWN0IHZtX2FyZWFf c3RydWN0ICp2bWEsIHBtZF90ICpwbWRwLAo+PiArwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9u ZyBwZm4sIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHBncHJvdF90IHByb3QpCj4gCj4gQWxpZ24gYXJn cyBwcm9wZXJseQo+IAo+PiArewo+PiArwqDCoMKgIHBtZF90IHBtZCA9IHBmbl9wbWQocGZuLCBw cm90KTsKPj4gKwo+PiArwqDCoMKgIGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpCj4+ ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+ICsKPj4gK8KgwqDCoCAvKiBBbGlnbiB0aGUgYWRk cmVzcyB3cnQgSFBBR0VfUE1EX1NJWkUgKi8KPj4gK8KgwqDCoCB2YWRkciA9ICh2YWRkciAmIEhQ QUdFX1BNRF9NQVNLKSArIEhQQUdFX1BNRF9TSVpFOwo+PiArCj4+ICvCoMKgwqAgcG1kID0gcGZu X3BtZChwZm4sIHByb3QpOwo+PiArwqDCoMKgIHNldF9wbWRfYXQobW0sIHZhZGRyLCBwbWRwLCBw bWQpOwo+PiArwqDCoMKgIHBtZHBfc2V0X3dycHJvdGVjdChtbSwgdmFkZHIsIHBtZHApOwo+PiAr wqDCoMKgIHBtZCA9IFJFQURfT05DRSgqcG1kcCk7Cj4+ICvCoMKgwqAgV0FSTl9PTihwbWRfd3Jp dGUocG1kKSk7Cj4+ICsKPj4gK8KgwqDCoCBwbWQgPSBwZm5fcG1kKHBmbiwgcHJvdCk7Cj4+ICvC oMKgwqAgc2V0X3BtZF9hdChtbSwgdmFkZHIsIHBtZHAsIHBtZCk7Cj4+ICvCoMKgwqAgcG1kcF9o dWdlX2dldF9hbmRfY2xlYXIobW0sIHZhZGRyLCBwbWRwKTsKPj4gK8KgwqDCoCBwbWQgPSBSRUFE X09OQ0UoKnBtZHApOwo+PiArwqDCoMKgIFdBUk5fT04oIXBtZF9ub25lKHBtZCkpOwo+PiArCj4+ ICvCoMKgwqAgcG1kID0gcGZuX3BtZChwZm4sIHByb3QpOwo+PiArwqDCoMKgIHBtZCA9IHBtZF93 cnByb3RlY3QocG1kKTsKPj4gK8KgwqDCoCBwbWQgPSBwbWRfbWtjbGVhbihwbWQpOwo+PiArwqDC oMKgIHNldF9wbWRfYXQobW0sIHZhZGRyLCBwbWRwLCBwbWQpOwo+PiArwqDCoMKgIHBtZCA9IHBt ZF9ta3dyaXRlKHBtZCk7Cj4+ICvCoMKgwqAgcG1kID0gcG1kX21rZGlydHkocG1kKTsKPj4gK8Kg wqDCoCBwbWRwX3NldF9hY2Nlc3NfZmxhZ3Modm1hLCB2YWRkciwgcG1kcCwgcG1kLCAxKTsKPj4g K8KgwqDCoCBwbWQgPSBSRUFEX09OQ0UoKnBtZHApOwo+PiArwqDCoMKgIFdBUk5fT04oIShwbWRf d3JpdGUocG1kKSAmJiBwbWRfZGlydHkocG1kKSkpOwo+PiArCj4+ICvCoMKgwqAgcG1kID0gcG1k X21raHVnZShwZm5fcG1kKHBmbiwgcHJvdCkpOwo+PiArwqDCoMKgIHNldF9wbWRfYXQobW0sIHZh ZGRyLCBwbWRwLCBwbWQpOwo+PiArwqDCoMKgIHBtZHBfaHVnZV9nZXRfYW5kX2NsZWFyX2Z1bGwo dm1hLCB2YWRkciwgcG1kcCwgMSk7Cj4+ICvCoMKgwqAgcG1kID0gUkVBRF9PTkNFKCpwbWRwKTsK Pj4gK8KgwqDCoCBXQVJOX09OKCFwbWRfbm9uZShwbWQpKTsKPj4gKwo+PiArwqDCoMKgIHBtZCA9 IHBtZF9ta3lvdW5nKHBtZCk7Cj4+ICvCoMKgwqAgc2V0X3BtZF9hdChtbSwgdmFkZHIsIHBtZHAs IHBtZCk7Cj4+ICvCoMKgwqAgcG1kcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh2bWEsIHZhZGRyLCBw bWRwKTsKPj4gK8KgwqDCoCBwbWQgPSBSRUFEX09OQ0UoKnBtZHApOwo+PiArwqDCoMKgIFdBUk5f T04ocG1kX3lvdW5nKHBtZCkpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBfX2luaXQgcG1k X2xlYWZfdGVzdHModW5zaWduZWQgbG9uZyBwZm4sIHBncHJvdF90IHByb3QpCj4+ICt7Cj4+ICvC oMKgwqAgcG1kX3QgcG1kID0gcGZuX3BtZChwZm4sIHByb3QpOwo+PiArCj4+ICvCoMKgwqAgLyoK Pj4gK8KgwqDCoMKgICogUE1EIGJhc2VkIFRIUCBpcyBhIGxlYWYgZW50cnkuCj4+ICvCoMKgwqDC oCAqLwo+PiArwqDCoMKgIHBtZCA9IHBtZF9ta2h1Z2UocG1kKTsKPj4gK8KgwqDCoCBXQVJOX09O KCFwbWRfbGVhZihwbWQpKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgX19pbml0IHBtZF9o dWdlX3Rlc3RzKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHBmbiwgcGdwcm90X3QgcHJvdCkK Pj4gK3sKPj4gK8KgwqDCoCBwbWRfdCBwbWQ7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIUlTX0VOQUJM RUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVApKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu Owo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAqIFg4NiBkZWZpbmVkIHBtZF9zZXRfaHVnZSgp IHZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuCj4+ICvCoMKgwqDCoCAqIFBNRCBpcyBub3QgYSBwb3B1 bGF0ZWQgbm9uLWxlYWYgZW50cnkuCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgIFdSSVRFX09O Q0UoKnBtZHAsIF9fcG1kKDApKTsKPj4gK8KgwqDCoCBXQVJOX09OKCFwbWRfc2V0X2h1Z2UocG1k cCwgX19wZm5fdG9fcGh5cyhwZm4pLCBwcm90KSk7Cj4+ICvCoMKgwqAgV0FSTl9PTighcG1kX2Ns ZWFyX2h1Z2UocG1kcCkpOwo+PiArwqDCoMKgIHBtZCA9IFJFQURfT05DRSgqcG1kcCk7Cj4+ICvC oMKgwqAgV0FSTl9PTighcG1kX25vbmUocG1kKSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lk IF9faW5pdCBwbWRfc2F2ZWR3cml0ZV90ZXN0cyh1bnNpZ25lZCBsb25nIHBmbiwgcGdwcm90X3Qg cHJvdCkKPj4gK3sKPj4gK8KgwqDCoCBwbWRfdCBwbWQgPSBwZm5fcG1kKHBmbiwgcHJvdCk7Cj4+ ICsKPj4gK8KgwqDCoCBXQVJOX09OKCFwbWRfc2F2ZWR3cml0ZShwbWRfbWtfc2F2ZWR3cml0ZShw bWRfY2xlYXJfc2F2ZWR3cml0ZShwbWQpKSkpOwo+PiArwqDCoMKgIFdBUk5fT04ocG1kX3NhdmVk d3JpdGUocG1kX2NsZWFyX3NhdmVkd3JpdGUocG1kX21rX3NhdmVkd3JpdGUocG1kKSkpKTsKPj4g K30KPj4gKwo+PiDCoCAjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFH RV9QVUQKPj4gwqAgc3RhdGljIHZvaWQgX19pbml0IHB1ZF9iYXNpY190ZXN0cyh1bnNpZ25lZCBs b25nIHBmbiwgcGdwcm90X3QgcHJvdCkKPj4gwqAgewo+PiBAQCAtMTAwLDEyICsyMzMsMTE1IEBA IHN0YXRpYyB2b2lkIF9faW5pdCBwdWRfYmFzaWNfdGVzdHModW5zaWduZWQgbG9uZyBwZm4sIHBn cHJvdF90IHByb3QpCj4+IMKgwqDCoMKgwqDCoCAqLwo+PiDCoMKgwqDCoMKgIFdBUk5fT04oIXB1 ZF9iYWQocHVkX21raHVnZShwdWQpKSk7Cj4+IMKgIH0KPj4gKwo+PiArc3RhdGljIHZvaWQgcHVk X2FkdmFuY2VkX3Rlc3RzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAo+PiArwqDCoMKgwqDCoMKgwqAg c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHB1ZF90ICpwdWRwLAo+PiArwqDCoMKgwqDCoMKg wqAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHBncHJvdF90IHByb3Qp Cj4gCj4gQWxpZ24gYXJncyBwcm9wZXJseQo+IAo+PiArewo+PiArwqDCoMKgIHB1ZF90IHB1ZCA9 IHBmbl9wdWQocGZuLCBwcm90KTsKPj4gKwo+PiArwqDCoMKgIGlmICghaGFzX3RyYW5zcGFyZW50 X2h1Z2VwYWdlKCkpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+ICsKPj4gK8KgwqDCoCAv KiBBbGlnbiB0aGUgYWRkcmVzcyB3cnQgSFBBR0VfUFVEX1NJWkUgKi8KPj4gK8KgwqDCoCB2YWRk ciA9ICh2YWRkciAmIEhQQUdFX1BVRF9NQVNLKSArIEhQQUdFX1BVRF9TSVpFOwo+PiArCj4+ICvC oMKgwqAgc2V0X3B1ZF9hdChtbSwgdmFkZHIsIHB1ZHAsIHB1ZCk7Cj4+ICvCoMKgwqAgcHVkcF9z ZXRfd3Jwcm90ZWN0KG1tLCB2YWRkciwgcHVkcCk7Cj4+ICvCoMKgwqAgcHVkID0gUkVBRF9PTkNF KCpwdWRwKTsKPj4gK8KgwqDCoCBXQVJOX09OKHB1ZF93cml0ZShwdWQpKTsKPj4gKwo+PiArI2lm bmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECj4+ICvCoMKgwqAgcHVkID0gcGZuX3B1ZChwZm4s IHByb3QpOwo+PiArwqDCoMKgIHNldF9wdWRfYXQobW0sIHZhZGRyLCBwdWRwLCBwdWQpOwo+PiAr wqDCoMKgIHB1ZHBfaHVnZV9nZXRfYW5kX2NsZWFyKG1tLCB2YWRkciwgcHVkcCk7Cj4+ICvCoMKg wqAgcHVkID0gUkVBRF9PTkNFKCpwdWRwKTsKPj4gK8KgwqDCoCBXQVJOX09OKCFwdWRfbm9uZShw dWQpKTsKPj4gKwo+PiArwqDCoMKgIHB1ZCA9IHBmbl9wdWQocGZuLCBwcm90KTsKPj4gK8KgwqDC oCBzZXRfcHVkX2F0KG1tLCB2YWRkciwgcHVkcCwgcHVkKTsKPj4gK8KgwqDCoCBwdWRwX2h1Z2Vf Z2V0X2FuZF9jbGVhcl9mdWxsKG1tLCB2YWRkciwgcHVkcCwgMSk7Cj4+ICvCoMKgwqAgcHVkID0g UkVBRF9PTkNFKCpwdWRwKTsKPj4gK8KgwqDCoCBXQVJOX09OKCFwdWRfbm9uZShwdWQpKTsKPj4g KyNlbmRpZiAvKiBfX1BBR0VUQUJMRV9QTURfRk9MREVEICovCj4+ICvCoMKgwqAgcHVkID0gcGZu X3B1ZChwZm4sIHByb3QpOwo+PiArwqDCoMKgIHB1ZCA9IHB1ZF93cnByb3RlY3QocHVkKTsKPj4g K8KgwqDCoCBwdWQgPSBwdWRfbWtjbGVhbihwdWQpOwo+PiArwqDCoMKgIHNldF9wdWRfYXQobW0s IHZhZGRyLCBwdWRwLCBwdWQpOwo+PiArwqDCoMKgIHB1ZCA9IHB1ZF9ta3dyaXRlKHB1ZCk7Cj4+ ICvCoMKgwqAgcHVkID0gcHVkX21rZGlydHkocHVkKTsKPj4gK8KgwqDCoCBwdWRwX3NldF9hY2Nl c3NfZmxhZ3Modm1hLCB2YWRkciwgcHVkcCwgcHVkLCAxKTsKPj4gK8KgwqDCoCBwdWQgPSBSRUFE X09OQ0UoKnB1ZHApOwo+PiArwqDCoMKgIFdBUk5fT04oIShwdWRfd3JpdGUocHVkKSAmJiBwdWRf ZGlydHkocHVkKSkpOwo+PiArCj4+ICvCoMKgwqAgcHVkID0gcHVkX21reW91bmcocHVkKTsKPj4g K8KgwqDCoCBzZXRfcHVkX2F0KG1tLCB2YWRkciwgcHVkcCwgcHVkKTsKPj4gK8KgwqDCoCBwdWRw X3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgdmFkZHIsIHB1ZHApOwo+PiArwqDCoMKgIHB1ZCA9 IFJFQURfT05DRSgqcHVkcCk7Cj4+ICvCoMKgwqAgV0FSTl9PTihwdWRfeW91bmcocHVkKSk7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIF9faW5pdCBwdWRfbGVhZl90ZXN0cyh1bnNpZ25lZCBs b25nIHBmbiwgcGdwcm90X3QgcHJvdCkKPj4gK3sKPj4gK8KgwqDCoCBwdWRfdCBwdWQgPSBwZm5f cHVkKHBmbiwgcHJvdCk7Cj4+ICsKPj4gK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBQVUQgYmFz ZWQgVEhQIGlzIGEgbGVhZiBlbnRyeS4KPj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgcHVkID0g cHVkX21raHVnZShwdWQpOwo+PiArwqDCoMKgIFdBUk5fT04oIXB1ZF9sZWFmKHB1ZCkpOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgdm9pZCBfX2luaXQgcHVkX2h1Z2VfdGVzdHMocHVkX3QgKnB1ZHAs IHVuc2lnbmVkIGxvbmcgcGZuLCBwZ3Byb3RfdCBwcm90KQo+PiArewo+PiArwqDCoMKgIHB1ZF90 IHB1ZDsKPj4gKwo+PiArwqDCoMKgIGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX0hV R0VfVk1BUCkpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+ICvCoMKgwqAgLyoKPj4gK8Kg wqDCoMKgICogWDg2IGRlZmluZWQgcHVkX3NldF9odWdlKCkgdmVyaWZpZXMgdGhhdCB0aGUgZ2l2 ZW4KPj4gK8KgwqDCoMKgICogUFVEIGlzIG5vdCBhIHBvcHVsYXRlZCBub24tbGVhZiBlbnRyeS4K Pj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgV1JJVEVfT05DRSgqcHVkcCwgX19wdWQoMCkpOwo+ PiArwqDCoMKgIFdBUk5fT04oIXB1ZF9zZXRfaHVnZShwdWRwLCBfX3Bmbl90b19waHlzKHBmbiks IHByb3QpKTsKPj4gK8KgwqDCoCBXQVJOX09OKCFwdWRfY2xlYXJfaHVnZShwdWRwKSk7Cj4+ICvC oMKgwqAgcHVkID0gUkVBRF9PTkNFKCpwdWRwKTsKPj4gK8KgwqDCoCBXQVJOX09OKCFwdWRfbm9u ZShwdWQpKTsKPj4gK30KPj4gwqAgI2Vsc2XCoCAvKiAhQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BB UkVOVF9IVUdFUEFHRV9QVUQgKi8KPj4gwqAgc3RhdGljIHZvaWQgX19pbml0IHB1ZF9iYXNpY190 ZXN0cyh1bnNpZ25lZCBsb25nIHBmbiwgcGdwcm90X3QgcHJvdCkgeyB9Cj4+ICtzdGF0aWMgdm9p ZCBwdWRfYWR2YW5jZWRfdGVzdHMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCj4+ICvCoMKgwqDCoMKg wqDCoCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcHVkX3QgKnB1ZHAsCj4+ICvCoMKgwqDC oMKgwqDCoCB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB2YWRkciwgcGdwcm90X3Qg cHJvdCkKPiAKPiBBbGlnbiBhcmdzIHByb3Blcmx5Cj4gCj4+ICt7Cj4+ICt9Cj4+ICtzdGF0aWMg dm9pZCBfX2luaXQgcHVkX2xlYWZfdGVzdHModW5zaWduZWQgbG9uZyBwZm4sIHBncHJvdF90IHBy b3QpIHsgfQo+PiArc3RhdGljIHZvaWQgX19pbml0IHB1ZF9odWdlX3Rlc3RzKHB1ZF90ICpwdWRw LCB1bnNpZ25lZCBsb25nIHBmbiwgcGdwcm90X3QgcHJvdCkKPj4gK3sKPj4gK30KPj4gwqAgI2Vu ZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovCj4+IMKg ICNlbHNlwqAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqLwo+PiDCoCBzdGF0aWMg dm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHVuc2lnbmVkIGxvbmcgcGZuLCBwZ3Byb3RfdCBw cm90KSB7IH0KPj4gwqAgc3RhdGljIHZvaWQgX19pbml0IHB1ZF9iYXNpY190ZXN0cyh1bnNpZ25l ZCBsb25nIHBmbiwgcGdwcm90X3QgcHJvdCkgeyB9Cj4+ICtzdGF0aWMgdm9pZCBfX2luaXQgcG1k X2FkdmFuY2VkX3Rlc3RzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAo+PiArwqDCoMKgwqDCoMKgwqAg c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWRwLAo+PiArwqDCoMKgwqDCoMKg wqAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHBncHJvdF90IHByb3Qp Cj4gCj4gQWxpZ24gYXJncyBwcm9wZXJseQo+IAo+PiArewo+PiArfQo+PiArc3RhdGljIHZvaWQg X19pbml0IHB1ZF9hZHZhbmNlZF90ZXN0cyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPj4gK8KgwqDC oMKgwqDCoMKgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdWRfdCAqcHVkcCwKPj4gK8Kg wqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHZhZGRyLCBwZ3By b3RfdCBwcm90KQo+IAo+IEFsaWduIGFyZ3MgcHJvcGVybHkKPiAKClN1cmUsIHdpbGwgZml4IHRo ZSBhcmd1bWVudHMgYWxpZ25tZW50IGluIHRoZSBhYm92ZSBtZW50aW9uZWQgcGxhY2VzLgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtc25wcy1h cmMgbWFpbGluZyBsaXN0CmxpbnV4LXNucHMtYXJjQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDov L2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1zbnBzLWFyYwo= 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=-8.5 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable 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 DD143C433E0 for ; Mon, 29 Jun 2020 08:18:28 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 960602336F for ; Mon, 29 Jun 2020 08:18:28 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="RHqt2Isy" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 960602336F Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=9ng5wgRhCciRwFbCwExXY7Ua93HFamuclZZp4v3eh44=; b=RHqt2IsyRiOU9htgZJ0+5w7zV dDclXDh1kYkD8aRc01xN/Xh6jQTgJOXNvEbK6PaaPkE5xu5HhpHu1P5O4WZo4vISMCZC+mEjldEsR uouscA3pLmFeXQuu8fH8Tzx4xpa/IjQXAje+4ccgfRLfv0Ql0BtIgloSdyUBloSVkBeLn5W5PaxrZ bqp5TNKYKuU0ZUeUd16wtA34ulvePoOigSOkC8EYATXmE1S5nwjirZL+3g4Bz8JlQ7n+w/OqKyy4j i93eHz3y6Uxnw3vaHw/sW9wruq2o5dNZ3lcUn5Q2wrTbWufvNr7aij3miznM6ofj3af3lbcQ/ZgtC JwLtTbVWA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jpoxX-0001x9-KA; Mon, 29 Jun 2020 08:16:12 +0000 Received: from foss.arm.com ([217.140.110.172]) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jpoxM-0001uP-KW; Mon, 29 Jun 2020 08:16:02 +0000 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 9498131B; Mon, 29 Jun 2020 01:15:58 -0700 (PDT) Received: from [10.163.83.176] (unknown [10.163.83.176]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 9CA863F71E; Mon, 29 Jun 2020 01:15:47 -0700 (PDT) Subject: Re: [PATCH V3 2/4] mm/debug_vm_pgtable: Add tests validating advanced arch page table helpers To: Christophe Leroy , linux-mm@kvack.org References: <1592192277-8421-1-git-send-email-anshuman.khandual@arm.com> <1592192277-8421-3-git-send-email-anshuman.khandual@arm.com> <4da41eee-5ce0-2a5e-40eb-4424655b3489@csgroup.eu> From: Anshuman Khandual Message-ID: <1a6138ca-40b0-5076-2f09-4ce6b7ee8d36@arm.com> Date: Mon, 29 Jun 2020 13:45:37 +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: <4da41eee-5ce0-2a5e-40eb-4424655b3489@csgroup.eu> Content-Language: en-US X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Benjamin Herrenschmidt , Heiko Carstens , Paul Mackerras , "H. Peter Anvin" , linux-riscv@lists.infradead.org, Will Deacon , linux-arch@vger.kernel.org, linux-s390@vger.kernel.org, Michael Ellerman , x86@kernel.org, Mike Rapoport , Christian Borntraeger , Ingo Molnar , gerald.schaefer@de.ibm.com, ziy@nvidia.com, Catalin Marinas , linux-snps-arc@lists.infradead.org, Vasily Gorbik , Borislav Petkov , Paul Walmsley , "Kirill A . Shutemov" , Thomas Gleixner , linux-arm-kernel@lists.infradead.org, Vineet Gupta , linux-kernel@vger.kernel.org, Palmer Dabbelt , Andrew Morton , linuxppc-dev@lists.ozlabs.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgpPbiAwNi8yNy8yMDIwIDEyOjU2IFBNLCBDaHJpc3RvcGhlIExlcm95IHdyb3RlOgo+IAo+IAo+ IExlIDE1LzA2LzIwMjAgw6AgMDU6MzcsIEFuc2h1bWFuIEtoYW5kdWFsIGEgw6ljcml0wqA6Cj4+ IFRoaXMgYWRkcyBuZXcgdGVzdHMgdmFsaWRhdGluZyBmb3IgdGhlc2UgZm9sbG93aW5nIGFyY2gg YWR2YW5jZWQgcGFnZSB0YWJsZQo+PiBoZWxwZXJzLiBUaGVzZSB0ZXN0cyBjcmVhdGUgYW5kIHRl c3Qgc3BlY2lmaWMgbWFwcGluZyB0eXBlcyBhdCB2YXJpb3VzIHBhZ2UKPj4gdGFibGUgbGV2ZWxz Lgo+Pgo+PiAxLiBweHhwX3NldF93cnByb3RlY3QoKQo+PiAyLiBweHhwX2dldF9hbmRfY2xlYXIo KQo+PiAzLiBweHhwX3NldF9hY2Nlc3NfZmxhZ3MoKQo+PiA0LiBweHhwX2dldF9hbmRfY2xlYXJf ZnVsbCgpCj4+IDUuIHB4eHBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKQo+PiA2LiBweHhfbGVhZigp Cj4+IDcuIHB4eF9zZXRfaHVnZSgpCj4+IDguIHB4eF8oY2xlYXJ8bWspX3NhdmVkd3JpdGUoKQo+ PiA5LiBodWdlX3B4eHBfeHh4KCkKPj4KPj4gQ2M6IEFuZHJldyBNb3J0b24gPGFrcG1AbGludXgt Zm91bmRhdGlvbi5vcmc+Cj4+IENjOiBNaWtlIFJhcG9wb3J0IDxycHB0QGxpbnV4LmlibS5jb20+ Cj4+IENjOiBWaW5lZXQgR3VwdGEgPHZndXB0YUBzeW5vcHN5cy5jb20+Cj4+IENjOiBDYXRhbGlu IE1hcmluYXMgPGNhdGFsaW4ubWFyaW5hc0Bhcm0uY29tPgo+PiBDYzogV2lsbCBEZWFjb24gPHdp bGxAa2VybmVsLm9yZz4KPj4gQ2M6IEJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmhAa2VybmVs LmNyYXNoaW5nLm9yZz4KPj4gQ2M6IFBhdWwgTWFja2VycmFzIDxwYXVsdXNAc2FtYmEub3JnPgo+ PiBDYzogTWljaGFlbCBFbGxlcm1hbiA8bXBlQGVsbGVybWFuLmlkLmF1Pgo+PiBDYzogSGVpa28g Q2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+Cj4+IENjOiBWYXNpbHkgR29yYmlr IDxnb3JAbGludXguaWJtLmNvbT4KPj4gQ2M6IENocmlzdGlhbiBCb3JudHJhZWdlciA8Ym9ybnRy YWVnZXJAZGUuaWJtLmNvbT4KPj4gQ2M6IFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4 LmRlPgo+PiBDYzogSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+Cj4+IENjOiBCb3Jpc2xh diBQZXRrb3YgPGJwQGFsaWVuOC5kZT4KPj4gQ2M6ICJILiBQZXRlciBBbnZpbiIgPGhwYUB6eXRv ci5jb20+Cj4+IENjOiBLaXJpbGwgQS4gU2h1dGVtb3YgPGtpcmlsbEBzaHV0ZW1vdi5uYW1lPgo+ PiBDYzogUGF1bCBXYWxtc2xleSA8cGF1bC53YWxtc2xleUBzaWZpdmUuY29tPgo+PiBDYzogUGFs bWVyIERhYmJlbHQgPHBhbG1lckBkYWJiZWx0LmNvbT4KPj4gQ2M6IGxpbnV4LXNucHMtYXJjQGxp c3RzLmluZnJhZGVhZC5vcmcKPj4gQ2M6IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFk Lm9yZwo+PiBDYzogbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcKPj4gQ2M6IGxpbnV4LXMz OTBAdmdlci5rZXJuZWwub3JnCj4+IENjOiBsaW51eC1yaXNjdkBsaXN0cy5pbmZyYWRlYWQub3Jn Cj4+IENjOiB4ODZAa2VybmVsLm9yZwo+PiBDYzogbGludXgtbW1Aa3ZhY2sub3JnCj4+IENjOiBs aW51eC1hcmNoQHZnZXIua2VybmVsLm9yZwo+PiBDYzogbGludXgta2VybmVsQHZnZXIua2VybmVs Lm9yZwo+PiBTdWdnZXN0ZWQtYnk6IENhdGFsaW4gTWFyaW5hcyA8Y2F0YWxpbi5tYXJpbmFzQGFy bS5jb20+Cj4+IFNpZ25lZC1vZmYtYnk6IEFuc2h1bWFuIEtoYW5kdWFsIDxhbnNodW1hbi5raGFu ZHVhbEBhcm0uY29tPgo+PiAtLS0KPj4gwqAgbW0vZGVidWdfdm1fcGd0YWJsZS5jIHwgMzA2ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+PiDCoCAxIGZpbGUgY2hh bmdlZCwgMzA2IGluc2VydGlvbnMoKykKPj4KPj4gZGlmZiAtLWdpdCBhL21tL2RlYnVnX3ZtX3Bn dGFibGUuYyBiL21tL2RlYnVnX3ZtX3BndGFibGUuYwo+PiBpbmRleCBmZmExNjNkNGM2M2MuLmUz ZjlmODMxN2E5OCAxMDA2NDQKPj4gLS0tIGEvbW0vZGVidWdfdm1fcGd0YWJsZS5jCj4+ICsrKyBi L21tL2RlYnVnX3ZtX3BndGFibGUuYwo+PiBAQCAtMjEsNiArMjEsNyBAQAo+PiDCoCAjaW5jbHVk ZSA8bGludXgvbW9kdWxlLmg+Cj4+IMKgICNpbmNsdWRlIDxsaW51eC9wZm5fdC5oPgo+PiDCoCAj aW5jbHVkZSA8bGludXgvcHJpbnRrLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvcGd0YWJsZS5oPgo+ PiDCoCAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+Cj4+IMKgICNpbmNsdWRlIDxsaW51eC9zcGlu bG9jay5oPgo+PiDCoCAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgo+PiBAQCAtMjgsNiArMjksNyBA QAo+PiDCoCAjaW5jbHVkZSA8bGludXgvc3RhcnRfa2VybmVsLmg+Cj4+IMKgICNpbmNsdWRlIDxs aW51eC9zY2hlZC9tbS5oPgo+PiDCoCAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KPj4gKyNpbmNs dWRlIDxhc20vdGxiZmx1c2guaD4KPj4gwqAgwqAgI2RlZmluZSBWTUZMQUdTwqDCoMKgIChWTV9S RUFEfFZNX1dSSVRFfFZNX0VYRUMpCj4+IMKgIEBAIC01NSw2ICs1Nyw1NCBAQCBzdGF0aWMgdm9p ZCBfX2luaXQgcHRlX2Jhc2ljX3Rlc3RzKHVuc2lnbmVkIGxvbmcgcGZuLCBwZ3Byb3RfdCBwcm90 KQo+PiDCoMKgwqDCoMKgIFdBUk5fT04ocHRlX3dyaXRlKHB0ZV93cnByb3RlY3QocHRlX21rd3Jp dGUocHRlKSkpKTsKPj4gwqAgfQo+PiDCoCArc3RhdGljIHZvaWQgX19pbml0IHB0ZV9hZHZhbmNl ZF90ZXN0cyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHB0ZV90ICpwdGVwLAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB2YWRkciwgcGdwcm90 X3QgcHJvdCkKPiAKPiBBbGlnbiBhcmdzIHByb3Blcmx5Lgo+IAo+PiArewo+PiArwqDCoMKgIHB0 ZV90IHB0ZSA9IHBmbl9wdGUocGZuLCBwcm90KTsKPj4gKwo+PiArwqDCoMKgIHB0ZSA9IHBmbl9w dGUocGZuLCBwcm90KTsKPj4gK8KgwqDCoCBzZXRfcHRlX2F0KG1tLCB2YWRkciwgcHRlcCwgcHRl KTsKPj4gK8KgwqDCoCBwdGVwX3NldF93cnByb3RlY3QobW0sIHZhZGRyLCBwdGVwKTsKPj4gK8Kg wqDCoCBwdGUgPSBSRUFEX09OQ0UoKnB0ZXApOwo+PiArwqDCoMKgIFdBUk5fT04ocHRlX3dyaXRl KHB0ZSkpOwo+PiArCj4+ICvCoMKgwqAgcHRlID0gcGZuX3B0ZShwZm4sIHByb3QpOwo+PiArwqDC oMKgIHNldF9wdGVfYXQobW0sIHZhZGRyLCBwdGVwLCBwdGUpOwo+PiArwqDCoMKgIHB0ZXBfZ2V0 X2FuZF9jbGVhcihtbSwgdmFkZHIsIHB0ZXApOwo+PiArwqDCoMKgIHB0ZSA9IFJFQURfT05DRSgq cHRlcCk7Cj4+ICvCoMKgwqAgV0FSTl9PTighcHRlX25vbmUocHRlKSk7Cj4+ICsKPj4gK8KgwqDC oCBwdGUgPSBwZm5fcHRlKHBmbiwgcHJvdCk7Cj4+ICvCoMKgwqAgcHRlID0gcHRlX3dycHJvdGVj dChwdGUpOwo+PiArwqDCoMKgIHB0ZSA9IHB0ZV9ta2NsZWFuKHB0ZSk7Cj4+ICvCoMKgwqAgc2V0 X3B0ZV9hdChtbSwgdmFkZHIsIHB0ZXAsIHB0ZSk7Cj4+ICvCoMKgwqAgcHRlID0gcHRlX21rd3Jp dGUocHRlKTsKPj4gK8KgwqDCoCBwdGUgPSBwdGVfbWtkaXJ0eShwdGUpOwo+PiArwqDCoMKgIHB0 ZXBfc2V0X2FjY2Vzc19mbGFncyh2bWEsIHZhZGRyLCBwdGVwLCBwdGUsIDEpOwo+PiArwqDCoMKg IHB0ZSA9IFJFQURfT05DRSgqcHRlcCk7Cj4+ICvCoMKgwqAgV0FSTl9PTighKHB0ZV93cml0ZShw dGUpICYmIHB0ZV9kaXJ0eShwdGUpKSk7Cj4+ICsKPj4gK8KgwqDCoCBwdGUgPSBwZm5fcHRlKHBm biwgcHJvdCk7Cj4+ICvCoMKgwqAgc2V0X3B0ZV9hdChtbSwgdmFkZHIsIHB0ZXAsIHB0ZSk7Cj4+ ICvCoMKgwqAgcHRlcF9nZXRfYW5kX2NsZWFyX2Z1bGwobW0sIHZhZGRyLCBwdGVwLCAxKTsKPj4g K8KgwqDCoCBwdGUgPSBSRUFEX09OQ0UoKnB0ZXApOwo+PiArwqDCoMKgIFdBUk5fT04oIXB0ZV9u b25lKHB0ZSkpOwo+PiArCj4+ICvCoMKgwqAgcHRlID0gcHRlX21reW91bmcocHRlKTsKPj4gK8Kg wqDCoCBzZXRfcHRlX2F0KG1tLCB2YWRkciwgcHRlcCwgcHRlKTsKPj4gK8KgwqDCoCBwdGVwX3Rl c3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgdmFkZHIsIHB0ZXApOwo+PiArwqDCoMKgIHB0ZSA9IFJF QURfT05DRSgqcHRlcCk7Cj4+ICvCoMKgwqAgV0FSTl9PTihwdGVfeW91bmcocHRlKSk7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIF9faW5pdCBwdGVfc2F2ZWR3cml0ZV90ZXN0cyh1bnNpZ25l ZCBsb25nIHBmbiwgcGdwcm90X3QgcHJvdCkKPj4gK3sKPj4gK8KgwqDCoCBwdGVfdCBwdGUgPSBw Zm5fcHRlKHBmbiwgcHJvdCk7Cj4+ICsKPj4gK8KgwqDCoCBXQVJOX09OKCFwdGVfc2F2ZWR3cml0 ZShwdGVfbWtfc2F2ZWR3cml0ZShwdGVfY2xlYXJfc2F2ZWR3cml0ZShwdGUpKSkpOwo+PiArwqDC oMKgIFdBUk5fT04ocHRlX3NhdmVkd3JpdGUocHRlX2NsZWFyX3NhdmVkd3JpdGUocHRlX21rX3Nh dmVkd3JpdGUocHRlKSkpKTsKPj4gK30KPj4gwqAgI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9I VUdFUEFHRQo+PiDCoCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHVuc2lnbmVk IGxvbmcgcGZuLCBwZ3Byb3RfdCBwcm90KQo+PiDCoCB7Cj4+IEBAIC03Nyw2ICsxMjcsODkgQEAg c3RhdGljIHZvaWQgX19pbml0IHBtZF9iYXNpY190ZXN0cyh1bnNpZ25lZCBsb25nIHBmbiwgcGdw cm90X3QgcHJvdCkKPj4gwqDCoMKgwqDCoCBXQVJOX09OKCFwbWRfYmFkKHBtZF9ta2h1Z2UocG1k KSkpOwo+PiDCoCB9Cj4+IMKgICtzdGF0aWMgdm9pZCBfX2luaXQgcG1kX2FkdmFuY2VkX3Rlc3Rz KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAo+PiArwqDCoMKgwqDCoMKgwqAgc3RydWN0IHZtX2FyZWFf c3RydWN0ICp2bWEsIHBtZF90ICpwbWRwLAo+PiArwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9u ZyBwZm4sIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHBncHJvdF90IHByb3QpCj4gCj4gQWxpZ24gYXJn cyBwcm9wZXJseQo+IAo+PiArewo+PiArwqDCoMKgIHBtZF90IHBtZCA9IHBmbl9wbWQocGZuLCBw cm90KTsKPj4gKwo+PiArwqDCoMKgIGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpCj4+ ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+ICsKPj4gK8KgwqDCoCAvKiBBbGlnbiB0aGUgYWRk cmVzcyB3cnQgSFBBR0VfUE1EX1NJWkUgKi8KPj4gK8KgwqDCoCB2YWRkciA9ICh2YWRkciAmIEhQ QUdFX1BNRF9NQVNLKSArIEhQQUdFX1BNRF9TSVpFOwo+PiArCj4+ICvCoMKgwqAgcG1kID0gcGZu X3BtZChwZm4sIHByb3QpOwo+PiArwqDCoMKgIHNldF9wbWRfYXQobW0sIHZhZGRyLCBwbWRwLCBw bWQpOwo+PiArwqDCoMKgIHBtZHBfc2V0X3dycHJvdGVjdChtbSwgdmFkZHIsIHBtZHApOwo+PiAr wqDCoMKgIHBtZCA9IFJFQURfT05DRSgqcG1kcCk7Cj4+ICvCoMKgwqAgV0FSTl9PTihwbWRfd3Jp dGUocG1kKSk7Cj4+ICsKPj4gK8KgwqDCoCBwbWQgPSBwZm5fcG1kKHBmbiwgcHJvdCk7Cj4+ICvC oMKgwqAgc2V0X3BtZF9hdChtbSwgdmFkZHIsIHBtZHAsIHBtZCk7Cj4+ICvCoMKgwqAgcG1kcF9o dWdlX2dldF9hbmRfY2xlYXIobW0sIHZhZGRyLCBwbWRwKTsKPj4gK8KgwqDCoCBwbWQgPSBSRUFE X09OQ0UoKnBtZHApOwo+PiArwqDCoMKgIFdBUk5fT04oIXBtZF9ub25lKHBtZCkpOwo+PiArCj4+ ICvCoMKgwqAgcG1kID0gcGZuX3BtZChwZm4sIHByb3QpOwo+PiArwqDCoMKgIHBtZCA9IHBtZF93 cnByb3RlY3QocG1kKTsKPj4gK8KgwqDCoCBwbWQgPSBwbWRfbWtjbGVhbihwbWQpOwo+PiArwqDC oMKgIHNldF9wbWRfYXQobW0sIHZhZGRyLCBwbWRwLCBwbWQpOwo+PiArwqDCoMKgIHBtZCA9IHBt ZF9ta3dyaXRlKHBtZCk7Cj4+ICvCoMKgwqAgcG1kID0gcG1kX21rZGlydHkocG1kKTsKPj4gK8Kg wqDCoCBwbWRwX3NldF9hY2Nlc3NfZmxhZ3Modm1hLCB2YWRkciwgcG1kcCwgcG1kLCAxKTsKPj4g K8KgwqDCoCBwbWQgPSBSRUFEX09OQ0UoKnBtZHApOwo+PiArwqDCoMKgIFdBUk5fT04oIShwbWRf d3JpdGUocG1kKSAmJiBwbWRfZGlydHkocG1kKSkpOwo+PiArCj4+ICvCoMKgwqAgcG1kID0gcG1k X21raHVnZShwZm5fcG1kKHBmbiwgcHJvdCkpOwo+PiArwqDCoMKgIHNldF9wbWRfYXQobW0sIHZh ZGRyLCBwbWRwLCBwbWQpOwo+PiArwqDCoMKgIHBtZHBfaHVnZV9nZXRfYW5kX2NsZWFyX2Z1bGwo dm1hLCB2YWRkciwgcG1kcCwgMSk7Cj4+ICvCoMKgwqAgcG1kID0gUkVBRF9PTkNFKCpwbWRwKTsK Pj4gK8KgwqDCoCBXQVJOX09OKCFwbWRfbm9uZShwbWQpKTsKPj4gKwo+PiArwqDCoMKgIHBtZCA9 IHBtZF9ta3lvdW5nKHBtZCk7Cj4+ICvCoMKgwqAgc2V0X3BtZF9hdChtbSwgdmFkZHIsIHBtZHAs IHBtZCk7Cj4+ICvCoMKgwqAgcG1kcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh2bWEsIHZhZGRyLCBw bWRwKTsKPj4gK8KgwqDCoCBwbWQgPSBSRUFEX09OQ0UoKnBtZHApOwo+PiArwqDCoMKgIFdBUk5f T04ocG1kX3lvdW5nKHBtZCkpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBfX2luaXQgcG1k X2xlYWZfdGVzdHModW5zaWduZWQgbG9uZyBwZm4sIHBncHJvdF90IHByb3QpCj4+ICt7Cj4+ICvC oMKgwqAgcG1kX3QgcG1kID0gcGZuX3BtZChwZm4sIHByb3QpOwo+PiArCj4+ICvCoMKgwqAgLyoK Pj4gK8KgwqDCoMKgICogUE1EIGJhc2VkIFRIUCBpcyBhIGxlYWYgZW50cnkuCj4+ICvCoMKgwqDC oCAqLwo+PiArwqDCoMKgIHBtZCA9IHBtZF9ta2h1Z2UocG1kKTsKPj4gK8KgwqDCoCBXQVJOX09O KCFwbWRfbGVhZihwbWQpKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgX19pbml0IHBtZF9o dWdlX3Rlc3RzKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHBmbiwgcGdwcm90X3QgcHJvdCkK Pj4gK3sKPj4gK8KgwqDCoCBwbWRfdCBwbWQ7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIUlTX0VOQUJM RUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVApKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu Owo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAqIFg4NiBkZWZpbmVkIHBtZF9zZXRfaHVnZSgp IHZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuCj4+ICvCoMKgwqDCoCAqIFBNRCBpcyBub3QgYSBwb3B1 bGF0ZWQgbm9uLWxlYWYgZW50cnkuCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgIFdSSVRFX09O Q0UoKnBtZHAsIF9fcG1kKDApKTsKPj4gK8KgwqDCoCBXQVJOX09OKCFwbWRfc2V0X2h1Z2UocG1k cCwgX19wZm5fdG9fcGh5cyhwZm4pLCBwcm90KSk7Cj4+ICvCoMKgwqAgV0FSTl9PTighcG1kX2Ns ZWFyX2h1Z2UocG1kcCkpOwo+PiArwqDCoMKgIHBtZCA9IFJFQURfT05DRSgqcG1kcCk7Cj4+ICvC oMKgwqAgV0FSTl9PTighcG1kX25vbmUocG1kKSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lk IF9faW5pdCBwbWRfc2F2ZWR3cml0ZV90ZXN0cyh1bnNpZ25lZCBsb25nIHBmbiwgcGdwcm90X3Qg cHJvdCkKPj4gK3sKPj4gK8KgwqDCoCBwbWRfdCBwbWQgPSBwZm5fcG1kKHBmbiwgcHJvdCk7Cj4+ ICsKPj4gK8KgwqDCoCBXQVJOX09OKCFwbWRfc2F2ZWR3cml0ZShwbWRfbWtfc2F2ZWR3cml0ZShw bWRfY2xlYXJfc2F2ZWR3cml0ZShwbWQpKSkpOwo+PiArwqDCoMKgIFdBUk5fT04ocG1kX3NhdmVk d3JpdGUocG1kX2NsZWFyX3NhdmVkd3JpdGUocG1kX21rX3NhdmVkd3JpdGUocG1kKSkpKTsKPj4g K30KPj4gKwo+PiDCoCAjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFH RV9QVUQKPj4gwqAgc3RhdGljIHZvaWQgX19pbml0IHB1ZF9iYXNpY190ZXN0cyh1bnNpZ25lZCBs b25nIHBmbiwgcGdwcm90X3QgcHJvdCkKPj4gwqAgewo+PiBAQCAtMTAwLDEyICsyMzMsMTE1IEBA IHN0YXRpYyB2b2lkIF9faW5pdCBwdWRfYmFzaWNfdGVzdHModW5zaWduZWQgbG9uZyBwZm4sIHBn cHJvdF90IHByb3QpCj4+IMKgwqDCoMKgwqDCoCAqLwo+PiDCoMKgwqDCoMKgIFdBUk5fT04oIXB1 ZF9iYWQocHVkX21raHVnZShwdWQpKSk7Cj4+IMKgIH0KPj4gKwo+PiArc3RhdGljIHZvaWQgcHVk X2FkdmFuY2VkX3Rlc3RzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAo+PiArwqDCoMKgwqDCoMKgwqAg c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHB1ZF90ICpwdWRwLAo+PiArwqDCoMKgwqDCoMKg wqAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHBncHJvdF90IHByb3Qp Cj4gCj4gQWxpZ24gYXJncyBwcm9wZXJseQo+IAo+PiArewo+PiArwqDCoMKgIHB1ZF90IHB1ZCA9 IHBmbl9wdWQocGZuLCBwcm90KTsKPj4gKwo+PiArwqDCoMKgIGlmICghaGFzX3RyYW5zcGFyZW50 X2h1Z2VwYWdlKCkpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+ICsKPj4gK8KgwqDCoCAv KiBBbGlnbiB0aGUgYWRkcmVzcyB3cnQgSFBBR0VfUFVEX1NJWkUgKi8KPj4gK8KgwqDCoCB2YWRk ciA9ICh2YWRkciAmIEhQQUdFX1BVRF9NQVNLKSArIEhQQUdFX1BVRF9TSVpFOwo+PiArCj4+ICvC oMKgwqAgc2V0X3B1ZF9hdChtbSwgdmFkZHIsIHB1ZHAsIHB1ZCk7Cj4+ICvCoMKgwqAgcHVkcF9z ZXRfd3Jwcm90ZWN0KG1tLCB2YWRkciwgcHVkcCk7Cj4+ICvCoMKgwqAgcHVkID0gUkVBRF9PTkNF KCpwdWRwKTsKPj4gK8KgwqDCoCBXQVJOX09OKHB1ZF93cml0ZShwdWQpKTsKPj4gKwo+PiArI2lm bmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECj4+ICvCoMKgwqAgcHVkID0gcGZuX3B1ZChwZm4s IHByb3QpOwo+PiArwqDCoMKgIHNldF9wdWRfYXQobW0sIHZhZGRyLCBwdWRwLCBwdWQpOwo+PiAr wqDCoMKgIHB1ZHBfaHVnZV9nZXRfYW5kX2NsZWFyKG1tLCB2YWRkciwgcHVkcCk7Cj4+ICvCoMKg wqAgcHVkID0gUkVBRF9PTkNFKCpwdWRwKTsKPj4gK8KgwqDCoCBXQVJOX09OKCFwdWRfbm9uZShw dWQpKTsKPj4gKwo+PiArwqDCoMKgIHB1ZCA9IHBmbl9wdWQocGZuLCBwcm90KTsKPj4gK8KgwqDC oCBzZXRfcHVkX2F0KG1tLCB2YWRkciwgcHVkcCwgcHVkKTsKPj4gK8KgwqDCoCBwdWRwX2h1Z2Vf Z2V0X2FuZF9jbGVhcl9mdWxsKG1tLCB2YWRkciwgcHVkcCwgMSk7Cj4+ICvCoMKgwqAgcHVkID0g UkVBRF9PTkNFKCpwdWRwKTsKPj4gK8KgwqDCoCBXQVJOX09OKCFwdWRfbm9uZShwdWQpKTsKPj4g KyNlbmRpZiAvKiBfX1BBR0VUQUJMRV9QTURfRk9MREVEICovCj4+ICvCoMKgwqAgcHVkID0gcGZu X3B1ZChwZm4sIHByb3QpOwo+PiArwqDCoMKgIHB1ZCA9IHB1ZF93cnByb3RlY3QocHVkKTsKPj4g K8KgwqDCoCBwdWQgPSBwdWRfbWtjbGVhbihwdWQpOwo+PiArwqDCoMKgIHNldF9wdWRfYXQobW0s IHZhZGRyLCBwdWRwLCBwdWQpOwo+PiArwqDCoMKgIHB1ZCA9IHB1ZF9ta3dyaXRlKHB1ZCk7Cj4+ ICvCoMKgwqAgcHVkID0gcHVkX21rZGlydHkocHVkKTsKPj4gK8KgwqDCoCBwdWRwX3NldF9hY2Nl c3NfZmxhZ3Modm1hLCB2YWRkciwgcHVkcCwgcHVkLCAxKTsKPj4gK8KgwqDCoCBwdWQgPSBSRUFE X09OQ0UoKnB1ZHApOwo+PiArwqDCoMKgIFdBUk5fT04oIShwdWRfd3JpdGUocHVkKSAmJiBwdWRf ZGlydHkocHVkKSkpOwo+PiArCj4+ICvCoMKgwqAgcHVkID0gcHVkX21reW91bmcocHVkKTsKPj4g K8KgwqDCoCBzZXRfcHVkX2F0KG1tLCB2YWRkciwgcHVkcCwgcHVkKTsKPj4gK8KgwqDCoCBwdWRw X3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgdmFkZHIsIHB1ZHApOwo+PiArwqDCoMKgIHB1ZCA9 IFJFQURfT05DRSgqcHVkcCk7Cj4+ICvCoMKgwqAgV0FSTl9PTihwdWRfeW91bmcocHVkKSk7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIF9faW5pdCBwdWRfbGVhZl90ZXN0cyh1bnNpZ25lZCBs b25nIHBmbiwgcGdwcm90X3QgcHJvdCkKPj4gK3sKPj4gK8KgwqDCoCBwdWRfdCBwdWQgPSBwZm5f cHVkKHBmbiwgcHJvdCk7Cj4+ICsKPj4gK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBQVUQgYmFz ZWQgVEhQIGlzIGEgbGVhZiBlbnRyeS4KPj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgcHVkID0g cHVkX21raHVnZShwdWQpOwo+PiArwqDCoMKgIFdBUk5fT04oIXB1ZF9sZWFmKHB1ZCkpOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgdm9pZCBfX2luaXQgcHVkX2h1Z2VfdGVzdHMocHVkX3QgKnB1ZHAs IHVuc2lnbmVkIGxvbmcgcGZuLCBwZ3Byb3RfdCBwcm90KQo+PiArewo+PiArwqDCoMKgIHB1ZF90 IHB1ZDsKPj4gKwo+PiArwqDCoMKgIGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX0hV R0VfVk1BUCkpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+ICvCoMKgwqAgLyoKPj4gK8Kg wqDCoMKgICogWDg2IGRlZmluZWQgcHVkX3NldF9odWdlKCkgdmVyaWZpZXMgdGhhdCB0aGUgZ2l2 ZW4KPj4gK8KgwqDCoMKgICogUFVEIGlzIG5vdCBhIHBvcHVsYXRlZCBub24tbGVhZiBlbnRyeS4K Pj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgV1JJVEVfT05DRSgqcHVkcCwgX19wdWQoMCkpOwo+ PiArwqDCoMKgIFdBUk5fT04oIXB1ZF9zZXRfaHVnZShwdWRwLCBfX3Bmbl90b19waHlzKHBmbiks IHByb3QpKTsKPj4gK8KgwqDCoCBXQVJOX09OKCFwdWRfY2xlYXJfaHVnZShwdWRwKSk7Cj4+ICvC oMKgwqAgcHVkID0gUkVBRF9PTkNFKCpwdWRwKTsKPj4gK8KgwqDCoCBXQVJOX09OKCFwdWRfbm9u ZShwdWQpKTsKPj4gK30KPj4gwqAgI2Vsc2XCoCAvKiAhQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BB UkVOVF9IVUdFUEFHRV9QVUQgKi8KPj4gwqAgc3RhdGljIHZvaWQgX19pbml0IHB1ZF9iYXNpY190 ZXN0cyh1bnNpZ25lZCBsb25nIHBmbiwgcGdwcm90X3QgcHJvdCkgeyB9Cj4+ICtzdGF0aWMgdm9p ZCBwdWRfYWR2YW5jZWRfdGVzdHMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCj4+ICvCoMKgwqDCoMKg wqDCoCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcHVkX3QgKnB1ZHAsCj4+ICvCoMKgwqDC oMKgwqDCoCB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB2YWRkciwgcGdwcm90X3Qg cHJvdCkKPiAKPiBBbGlnbiBhcmdzIHByb3Blcmx5Cj4gCj4+ICt7Cj4+ICt9Cj4+ICtzdGF0aWMg dm9pZCBfX2luaXQgcHVkX2xlYWZfdGVzdHModW5zaWduZWQgbG9uZyBwZm4sIHBncHJvdF90IHBy b3QpIHsgfQo+PiArc3RhdGljIHZvaWQgX19pbml0IHB1ZF9odWdlX3Rlc3RzKHB1ZF90ICpwdWRw LCB1bnNpZ25lZCBsb25nIHBmbiwgcGdwcm90X3QgcHJvdCkKPj4gK3sKPj4gK30KPj4gwqAgI2Vu ZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovCj4+IMKg ICNlbHNlwqAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqLwo+PiDCoCBzdGF0aWMg dm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHVuc2lnbmVkIGxvbmcgcGZuLCBwZ3Byb3RfdCBw cm90KSB7IH0KPj4gwqAgc3RhdGljIHZvaWQgX19pbml0IHB1ZF9iYXNpY190ZXN0cyh1bnNpZ25l ZCBsb25nIHBmbiwgcGdwcm90X3QgcHJvdCkgeyB9Cj4+ICtzdGF0aWMgdm9pZCBfX2luaXQgcG1k X2FkdmFuY2VkX3Rlc3RzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAo+PiArwqDCoMKgwqDCoMKgwqAg c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWRwLAo+PiArwqDCoMKgwqDCoMKg wqAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHBncHJvdF90IHByb3Qp Cj4gCj4gQWxpZ24gYXJncyBwcm9wZXJseQo+IAo+PiArewo+PiArfQo+PiArc3RhdGljIHZvaWQg X19pbml0IHB1ZF9hZHZhbmNlZF90ZXN0cyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPj4gK8KgwqDC oMKgwqDCoMKgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdWRfdCAqcHVkcCwKPj4gK8Kg wqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHZhZGRyLCBwZ3By b3RfdCBwcm90KQo+IAo+IEFsaWduIGFyZ3MgcHJvcGVybHkKPiAKClN1cmUsIHdpbGwgZml4IHRo ZSBhcmd1bWVudHMgYWxpZ25tZW50IGluIHRoZSBhYm92ZSBtZW50aW9uZWQgcGxhY2VzLgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtl cm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0 dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5l bAo=