17 Oct, 2020

11 commits

  • With highmem, pte_alloc_map() keep the level4 page table mapped using
    kmap_atomic(). Avoid doing new memory allocation with page table mapped
    like above.

    [ 9.409233] BUG: sleeping function called from invalid context at mm/page_alloc.c:4822
    [ 9.410557] in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 1, name: swapper
    [ 9.411932] no locks held by swapper/1.
    [ 9.412595] CPU: 0 PID: 1 Comm: swapper Not tainted 5.9.0-rc3-00323-gc50eb1ed654b5 #2
    [ 9.413824] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014
    [ 9.415207] Call Trace:
    [ 9.415651] ? ___might_sleep.cold+0xa7/0xcc
    [ 9.416367] ? __alloc_pages_nodemask+0x14c/0x5b0
    [ 9.417055] ? swap_migration_tests+0x50/0x293
    [ 9.417704] ? debug_vm_pgtable+0x4bc/0x708
    [ 9.418287] ? swap_migration_tests+0x293/0x293
    [ 9.418911] ? do_one_initcall+0x82/0x3cb
    [ 9.419465] ? parse_args+0x1bd/0x280
    [ 9.419983] ? rcu_read_lock_sched_held+0x36/0x60
    [ 9.420673] ? trace_initcall_level+0x1f/0xf3
    [ 9.421279] ? trace_initcall_level+0xbd/0xf3
    [ 9.421881] ? do_basic_setup+0x9d/0xdd
    [ 9.422410] ? do_basic_setup+0xc3/0xdd
    [ 9.422938] ? kernel_init_freeable+0x72/0xa3
    [ 9.423539] ? rest_init+0x134/0x134
    [ 9.424055] ? kernel_init+0x5/0x12c
    [ 9.424574] ? ret_from_fork+0x19/0x30

    Reported-by: kernel test robot
    Signed-off-by: Aneesh Kumar K.V
    Signed-off-by: Andrew Morton
    Link: https://lkml.kernel.org/r/20200913110327.645310-1-aneesh.kumar@linux.ibm.com
    Signed-off-by: Linus Torvalds

    Aneesh Kumar K.V
     
  • pte_clear_tests operate on an existing pte entry. Make sure that is not a
    none pte entry.

    [aneesh.kumar@linux.ibm.com: avoid kernel crash with riscv]
    Link: https://lkml.kernel.org/r/20201015033206.140550-1-aneesh.kumar@linux.ibm.com

    Signed-off-by: Aneesh Kumar K.V
    Signed-off-by: Andrew Morton
    Reviewed-by: Anshuman Khandual
    Cc: Christophe Leroy
    Cc: Michael Ellerman
    Cc: Nathan Chancellor
    Cc: Guenter Roeck
    Cc: Paul Walmsley
    Cc: Albert Ou
    Cc: Palmer Dabbelt
    Link: https://lkml.kernel.org/r/20200902114222.181353-14-aneesh.kumar@linux.ibm.com
    Signed-off-by: Linus Torvalds

    Aneesh Kumar K.V
     
  • The seems to be missing quite a lot of details w.r.t allocating the
    correct pgtable_t page (huge_pte_alloc()), holding the right lock
    (huge_pte_lock()) etc. The vma used is also not a hugetlb VMA.

    ppc64 do have runtime checks within CONFIG_DEBUG_VM for most of these.
    Hence disable the test on ppc64.

    [anshuman.khandual@arm.com: drop hugetlb_advanced_tests()]
    Link: https://lore.kernel.org/lkml/289c3fdb-1394-c1af-bdc4-5542907089dc@linux.ibm.com/#t
    Link: https://lkml.kernel.org/r/1600914446-21890-1-git-send-email-anshuman.khandual@arm.com

    Signed-off-by: Aneesh Kumar K.V
    Signed-off-by: Anshuman Khandual
    Signed-off-by: Andrew Morton
    Cc: Christophe Leroy
    Cc: Michael Ellerman
    Link: https://lkml.kernel.org/r/20200902114222.181353-13-aneesh.kumar@linux.ibm.com
    Signed-off-by: Linus Torvalds

    Aneesh Kumar K.V
     
  • pmd_clear() should not be used to clear pmd level pte entries.

    Signed-off-by: Aneesh Kumar K.V
    Signed-off-by: Andrew Morton
    Cc: Anshuman Khandual
    Cc: Christophe Leroy
    Cc: Michael Ellerman
    Link: https://lkml.kernel.org/r/20200902114222.181353-12-aneesh.kumar@linux.ibm.com
    Signed-off-by: Linus Torvalds

    Aneesh Kumar K.V
     
  • Architectures like ppc64 use deposited page table while updating the huge
    pte entries.

    Signed-off-by: Aneesh Kumar K.V
    Signed-off-by: Andrew Morton
    Reviewed-by: Anshuman Khandual
    Cc: Christophe Leroy
    Cc: Michael Ellerman
    Link: https://lkml.kernel.org/r/20200902114222.181353-11-aneesh.kumar@linux.ibm.com
    Signed-off-by: Linus Torvalds

    Aneesh Kumar K.V
     
  • Make sure we call pte accessors with correct lock held.

    Signed-off-by: Aneesh Kumar K.V
    Signed-off-by: Andrew Morton
    Cc: Anshuman Khandual
    Cc: Christophe Leroy
    Cc: Michael Ellerman
    Link: https://lkml.kernel.org/r/20200902114222.181353-10-aneesh.kumar@linux.ibm.com
    Signed-off-by: Linus Torvalds

    Aneesh Kumar K.V
     
  • This will help in adding proper locks in a later patch

    Signed-off-by: Aneesh Kumar K.V
    Signed-off-by: Andrew Morton
    Cc: Anshuman Khandual
    Cc: Christophe Leroy
    Cc: Michael Ellerman
    Link: https://lkml.kernel.org/r/20200902114222.181353-9-aneesh.kumar@linux.ibm.com
    Signed-off-by: Linus Torvalds

    Aneesh Kumar K.V
     
  • set_pte_at() should not be used to set a pte entry at locations that
    already holds a valid pte entry. Architectures like ppc64 don't do TLB
    invalidate in set_pte_at() and hence expect it to be used to set locations
    that are not a valid PTE.

    Link: https://lkml.kernel.org/r/20200902114222.181353-8-aneesh.kumar@linux.ibm.com
    Signed-off-by: Aneesh Kumar K.V
    Reviewed-by: Anshuman Khandual
    Cc: Christophe Leroy
    Cc: Michael Ellerman
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Aneesh Kumar K.V
     
  • Saved write support was added to track the write bit of a pte after
    marking the pte protnone. This was done so that AUTONUMA can convert a
    write pte to protnone and still track the old write bit. When converting
    it back we set the pte write bit correctly thereby avoiding a write fault
    again. Hence enable the test only when CONFIG_NUMA_BALANCING is enabled
    and use protnone protflags.

    Signed-off-by: Aneesh Kumar K.V
    Signed-off-by: Andrew Morton
    Reviewed-by: Anshuman Khandual
    Cc: Christophe Leroy
    Cc: Michael Ellerman
    Link: https://lkml.kernel.org/r/20200902114222.181353-6-aneesh.kumar@linux.ibm.com
    Signed-off-by: Linus Torvalds

    Aneesh Kumar K.V
     
  • ppc64 supports huge vmap only with radix translation. Hence use arch
    helper to determine the huge vmap support.

    Signed-off-by: Aneesh Kumar K.V
    Signed-off-by: Andrew Morton
    Reviewed-by: Anshuman Khandual
    Cc: Christophe Leroy
    Cc: Michael Ellerman
    Link: https://lkml.kernel.org/r/20200902114222.181353-5-aneesh.kumar@linux.ibm.com
    Signed-off-by: Linus Torvalds

    Aneesh Kumar K.V
     
  • ppc64 use bit 62 to indicate a pte entry (_PAGE_PTE). Avoid setting that
    bit in random value.

    Signed-off-by: Aneesh Kumar K.V
    Signed-off-by: Andrew Morton
    Reviewed-by: Anshuman Khandual
    Cc: Christophe Leroy
    Cc: Michael Ellerman
    Link: https://lkml.kernel.org/r/20200902114222.181353-4-aneesh.kumar@linux.ibm.com
    Signed-off-by: Linus Torvalds

    Aneesh Kumar K.V
     

08 Aug, 2020

4 commits

  • This adds a specific description file for all arch page table helpers which
    is in sync with the semantics being tested via CONFIG_DEBUG_VM_PGTABLE. All
    future changes either to these descriptions here or the debug test should
    always remain in sync.

    [anshuman.khandual@arm.com: fold in Mike's patch for the rst document, fix typos in the rst document]
    Link: http://lkml.kernel.org/r/1594610587-4172-5-git-send-email-anshuman.khandual@arm.com

    Suggested-by: Mike Rapoport
    Signed-off-by: Anshuman Khandual
    Signed-off-by: Andrew Morton
    Acked-by: Mike Rapoport
    Cc: Jonathan Corbet
    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: Zi Yan
    Link: http://lkml.kernel.org/r/1593996516-7186-5-git-send-email-anshuman.khandual@arm.com
    Signed-off-by: Linus Torvalds

    Anshuman Khandual
     
  • This adds debug print information that enlists all tests getting executed
    on a given platform. With dynamic debug enabled, the following
    information will be splashed during boot. For compactness purpose,
    dropped both time stamp and prefix (i.e debug_vm_pgtable) from this sample
    output.

    [debug_vm_pgtable ]: Validating architecture page table helpers
    [pte_basic_tests ]: Validating PTE basic
    [pmd_basic_tests ]: Validating PMD basic
    [p4d_basic_tests ]: Validating P4D basic
    [pgd_basic_tests ]: Validating PGD basic
    [pte_clear_tests ]: Validating PTE clear
    [pmd_clear_tests ]: Validating PMD clear
    [pte_advanced_tests ]: Validating PTE advanced
    [pmd_advanced_tests ]: Validating PMD advanced
    [hugetlb_advanced_tests]: Validating HugeTLB advanced
    [pmd_leaf_tests ]: Validating PMD leaf
    [pmd_huge_tests ]: Validating PMD huge
    [pte_savedwrite_tests ]: Validating PTE saved write
    [pmd_savedwrite_tests ]: Validating PMD saved write
    [pmd_populate_tests ]: Validating PMD populate
    [pte_special_tests ]: Validating PTE special
    [pte_protnone_tests ]: Validating PTE protnone
    [pmd_protnone_tests ]: Validating PMD protnone
    [pte_devmap_tests ]: Validating PTE devmap
    [pmd_devmap_tests ]: Validating PMD devmap
    [pte_swap_tests ]: Validating PTE swap
    [swap_migration_tests ]: Validating swap migration
    [hugetlb_basic_tests ]: Validating HugeTLB basic
    [pmd_thp_tests ]: Validating PMD based THP

    Signed-off-by: Anshuman Khandual
    Signed-off-by: Andrew Morton
    Tested-by: Vineet Gupta [arc]
    Reviewed-by: Zi Yan
    Cc: Catalin Marinas
    Cc: Mike Rapoport
    Cc: Vineet Gupta
    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: Jonathan Corbet
    Cc: Mike Rapoport
    Link: http://lkml.kernel.org/r/1593996516-7186-4-git-send-email-anshuman.khandual@arm.com
    Signed-off-by: Linus Torvalds

    Anshuman Khandual
     
  • 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()

    [anshuman.khandual@arm.com: drop RANDOM_ORVALUE from hugetlb_advanced_tests()]
    Link: http://lkml.kernel.org/r/1594610587-4172-3-git-send-email-anshuman.khandual@arm.com

    Suggested-by: Catalin Marinas
    Signed-off-by: Anshuman Khandual
    Signed-off-by: Andrew Morton
    Tested-by: Vineet Gupta [arc]
    Reviewed-by: Zi Yan
    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: Jonathan Corbet
    Cc: Mike Rapoport
    Cc: Steven Price
    Link: http://lkml.kernel.org/r/1593996516-7186-3-git-send-email-anshuman.khandual@arm.com
    Signed-off-by: Linus Torvalds

    Anshuman Khandual
     
  • Patch series "mm/debug_vm_pgtable: Add some more tests", v5.

    This series adds some more arch page table helper validation tests which
    are related to core and advanced memory functions. This also creates a
    documentation, enlisting expected semantics for all page table helpers as
    suggested by Mike Rapoport previously
    (https://lkml.org/lkml/2020/1/30/40).

    There are many TRANSPARENT_HUGEPAGE and ARCH_HAS_TRANSPARENT_HUGEPAGE_PUD
    ifdefs scattered across the test. But consolidating all the fallback
    stubs is not very straight forward because
    ARCH_HAS_TRANSPARENT_HUGEPAGE_PUD is not explicitly dependent on
    ARCH_HAS_TRANSPARENT_HUGEPAGE.

    Tested on arm64, x86 platforms but only build tested on all other enabled
    platforms through ARCH_HAS_DEBUG_VM_PGTABLE i.e powerpc, arc, s390. The
    following failure on arm64 still exists which was mentioned previously.
    It will be fixed with the upcoming THP migration on arm64 enablement
    series.

    WARNING .... mm/debug_vm_pgtable.c:860 debug_vm_pgtable+0x940/0xa54
    WARN_ON(!pmd_present(pmd_mkinvalid(pmd_mkhuge(pmd))))

    This patch (of 4):

    This adds new tests validating arch page table helpers for these following
    core memory features. These tests create and test specific mapping types
    at various page table levels.

    1. SPECIAL mapping
    2. PROTNONE mapping
    3. DEVMAP mapping
    4. SOFTDIRTY mapping
    5. SWAP mapping
    6. MIGRATION mapping
    7. HUGETLB mapping
    8. THP mapping

    Suggested-by: Catalin Marinas
    Signed-off-by: Anshuman Khandual
    Signed-off-by: Andrew Morton
    Tested-by: Vineet Gupta [arc]
    Reviewed-by: Zi Yan
    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: Jonathan Corbet
    Cc: Mike Rapoport
    Cc: Steven Price
    Link: http://lkml.kernel.org/r/1594610587-4172-1-git-send-email-anshuman.khandual@arm.com
    Link: http://lkml.kernel.org/r/1593996516-7186-1-git-send-email-anshuman.khandual@arm.com
    Link: http://lkml.kernel.org/r/1593996516-7186-2-git-send-email-anshuman.khandual@arm.com
    Signed-off-by: Linus Torvalds

    Anshuman Khandual
     

17 Jul, 2020

1 commit

  • Using uninitialized_var() is dangerous as it papers over real bugs[1]
    (or can in the future), and suppresses unrelated compiler warnings (e.g.
    "unused variable"). If the compiler thinks it is uninitialized, either
    simply initialize the variable or make compiler changes. As a precursor
    to removing[2] this[3] macro[4], just initialize this variable to NULL.

    [1] https://lore.kernel.org/lkml/20200603174714.192027-1-glider@google.com/
    [2] https://lore.kernel.org/lkml/CA+55aFw+Vbj0i=1TGqCR5vQkCzWJ0QxK6CernOU6eedsudAixw@mail.gmail.com/
    [3] https://lore.kernel.org/lkml/CA+55aFwgbgqhbp1fkxvRKEpzyR5J8n1vKT1VZdz9knmPuXhOeg@mail.gmail.com/
    [4] https://lore.kernel.org/lkml/CA+55aFz2500WfbKXAx8s67wrm9=yVJu65TpLgN_ybYNv0VEOKA@mail.gmail.com/

    Fixes: 399145f9eb6c ("mm/debug: add tests validating architecture page table helpers")
    Reviewed-by: Nick Desaulniers
    Signed-off-by: Kees Cook

    Kees Cook
     

26 Jun, 2020

1 commit

  • Since commit 9e343b467c70 ("READ_ONCE: Enforce atomicity for
    {READ,WRITE}_ONCE() memory accesses"), READ_ONCE() cannot be used
    anymore to read complex page table entries.

    This leads to:

    CC mm/debug_vm_pgtable.o
    In file included from ./include/asm-generic/bug.h:5,
    from ./arch/powerpc/include/asm/bug.h:109,
    from ./include/linux/bug.h:5,
    from ./include/linux/mmdebug.h:5,
    from ./include/linux/gfp.h:5,
    from mm/debug_vm_pgtable.c:13:
    In function 'pte_clear_tests',
    inlined from 'debug_vm_pgtable' at mm/debug_vm_pgtable.c:363:2:
    ./include/linux/compiler.h:392:38: error: Unsupported access size for {READ,WRITE}_ONCE().
    mm/debug_vm_pgtable.c:249:14: note: in expansion of macro 'READ_ONCE'
    249 | pte_t pte = READ_ONCE(*ptep);
    | ^~~~~~~~~
    make[2]: *** [mm/debug_vm_pgtable.o] Error 1

    Fix it by using the recently added ptep_get() helper.

    Link: http://lkml.kernel.org/r/6ca8c972e6c920dc4ae0d4affbed9703afa4d010.1592490570.git.christophe.leroy@csgroup.eu
    Fixes: 9e343b467c70 ("READ_ONCE: Enforce atomicity for {READ,WRITE}_ONCE() memory accesses")
    Signed-off-by: Christophe Leroy
    Acked-by: Will Deacon
    Reviewed-by: Anshuman Khandual
    Cc: Benjamin Herrenschmidt
    Cc: Paul Mackerras
    Cc: Michael Ellerman
    Cc: "Peter Zijlstra (Intel)"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christophe Leroy
     

11 Jun, 2020

1 commit

  • Architectures can have CONFIG_TRANSPARENT_HUGEPAGE enabled but no THP
    support enabled based on platforms. For ex: with 4K PAGE_SIZE ppc64
    supports THP only with radix translation.

    This results in below crash when running with hash translation and 4K
    PAGE_SIZE.

    kernel BUG at arch/powerpc/include/asm/book3s/64/hash-4k.h:140!
    cpu 0x61: Vector: 700 (Program Check) at [c000000ff948f860]
    pc: debug_vm_pgtable+0x480/0x8b0
    lr: debug_vm_pgtable+0x474/0x8b0
    ...
    debug_vm_pgtable+0x374/0x8b0 (unreliable)
    do_one_initcall+0x98/0x4f0
    kernel_init_freeable+0x330/0x3fc
    kernel_init+0x24/0x148

    Check for THP support correctly

    Link: http://lkml.kernel.org/r/20200608125252.407659-1-aneesh.kumar@linux.ibm.com
    Fixes: 399145f9eb6c ("mm/debug: add tests validating architecture page table helpers")
    Signed-off-by: Aneesh Kumar K.V
    Reviewed-by: Anshuman Khandual
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Aneesh Kumar K.V
     

10 Jun, 2020

1 commit

  • Patch series "mm: consolidate definitions of page table accessors", v2.

    The low level page table accessors (pXY_index(), pXY_offset()) are
    duplicated across all architectures and sometimes more than once. For
    instance, we have 31 definition of pgd_offset() for 25 supported
    architectures.

    Most of these definitions are actually identical and typically it boils
    down to, e.g.

    static inline unsigned long pmd_index(unsigned long address)
    {
    return (address >> PMD_SHIFT) & (PTRS_PER_PMD - 1);
    }

    static inline pmd_t *pmd_offset(pud_t *pud, unsigned long address)
    {
    return (pmd_t *)pud_page_vaddr(*pud) + pmd_index(address);
    }

    These definitions can be shared among 90% of the arches provided
    XYZ_SHIFT, PTRS_PER_XYZ and xyz_page_vaddr() are defined.

    For architectures that really need a custom version there is always
    possibility to override the generic version with the usual ifdefs magic.

    These patches introduce include/linux/pgtable.h that replaces
    include/asm-generic/pgtable.h and add the definitions of the page table
    accessors to the new header.

    This patch (of 12):

    The linux/mm.h header includes to allow inlining of the
    functions involving page table manipulations, e.g. pte_alloc() and
    pmd_alloc(). So, there is no point to explicitly include
    in the files that include .

    The include statements in such cases are remove with a simple loop:

    for f in $(git grep -l "include ") ; do
    sed -i -e '/include / d' $f
    done

    Signed-off-by: Mike Rapoport
    Signed-off-by: Andrew Morton
    Cc: Arnd Bergmann
    Cc: Borislav Petkov
    Cc: Brian Cain
    Cc: Catalin Marinas
    Cc: Chris Zankel
    Cc: "David S. Miller"
    Cc: Geert Uytterhoeven
    Cc: Greentime Hu
    Cc: Greg Ungerer
    Cc: Guan Xuetao
    Cc: Guo Ren
    Cc: Heiko Carstens
    Cc: Helge Deller
    Cc: Ingo Molnar
    Cc: Ley Foon Tan
    Cc: Mark Salter
    Cc: Matthew Wilcox
    Cc: Matt Turner
    Cc: Max Filippov
    Cc: Michael Ellerman
    Cc: Michal Simek
    Cc: Mike Rapoport
    Cc: Nick Hu
    Cc: Paul Walmsley
    Cc: Richard Weinberger
    Cc: Rich Felker
    Cc: Russell King
    Cc: Stafford Horne
    Cc: Thomas Bogendoerfer
    Cc: Thomas Gleixner
    Cc: Tony Luck
    Cc: Vincent Chen
    Cc: Vineet Gupta
    Cc: Will Deacon
    Cc: Yoshinori Sato
    Link: http://lkml.kernel.org/r/20200514170327.31389-1-rppt@kernel.org
    Link: http://lkml.kernel.org/r/20200514170327.31389-2-rppt@kernel.org
    Signed-off-by: Linus Torvalds

    Mike Rapoport
     

05 Jun, 2020

1 commit

  • This adds tests which will validate architecture page table helpers and
    other accessors in their compliance with expected generic MM semantics.
    This will help various architectures in validating changes to existing
    page table helpers or addition of new ones.

    This test covers basic page table entry transformations including but not
    limited to old, young, dirty, clean, write, write protect etc at various
    level along with populating intermediate entries with next page table page
    and validating them.

    Test page table pages are allocated from system memory with required size
    and alignments. The mapped pfns at page table levels are derived from a
    real pfn representing a valid kernel text symbol. This test gets called
    via late_initcall().

    This test gets built and run when CONFIG_DEBUG_VM_PGTABLE is selected.
    Any architecture, which is willing to subscribe this test will need to
    select ARCH_HAS_DEBUG_VM_PGTABLE. For now this is limited to arc, arm64,
    x86, s390 and powerpc platforms where the test is known to build and run
    successfully Going forward, other architectures too can subscribe the test
    after fixing any build or runtime problems with their page table helpers.

    Folks interested in making sure that a given platform's page table helpers
    conform to expected generic MM semantics should enable the above config
    which will just trigger this test during boot. Any non conformity here
    will be reported as an warning which would need to be fixed. This test
    will help catch any changes to the agreed upon semantics expected from
    generic MM and enable platforms to accommodate it thereafter.

    [anshuman.khandual@arm.com: v17]
    Link: http://lkml.kernel.org/r/1587436495-22033-3-git-send-email-anshuman.khandual@arm.com
    [anshuman.khandual@arm.com: v18]
    Link: http://lkml.kernel.org/r/1588564865-31160-3-git-send-email-anshuman.khandual@arm.com
    Suggested-by: Catalin Marinas
    Signed-off-by: Anshuman Khandual
    Signed-off-by: Christophe Leroy
    Signed-off-by: Qian Cai
    Signed-off-by: Andrew Morton
    Tested-by: Gerald Schaefer [s390]
    Tested-by: Christophe Leroy [ppc32]
    Reviewed-by: Ingo Molnar
    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
    Link: http://lkml.kernel.org/r/1583919272-24178-1-git-send-email-anshuman.khandual@arm.com
    Signed-off-by: Linus Torvalds

    Anshuman Khandual