lkml.org 
[lkml]   [2019]   [Sep]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subject[PATCH 0/1] mm/debug: Add tests for architecture exported page table helpers
    Date
    This series adds a test validation for architecture exported page table
    helpers. Patch in the series adds basic transformation tests at various
    levels of the page table.

    This test was originally suggested by Catalin during arm64 THP migration
    RFC discussion earlier. Going forward it can include more specific tests
    with respect to various generic MM functions like THP, HugeTLB etc and
    platform specific tests.

    https://lore.kernel.org/linux-mm/20190628102003.GA56463@arrakis.emea.arm.com/

    Questions:

    Should alloc_gigantic_page() be made available as an interface for general
    use in the kernel. The test module here uses very similar implementation from
    HugeTLB to allocate a PUD aligned memory block. Similar for mm_alloc() which
    needs to be exported through a header.

    Matthew Wilcox had expressed concerns regarding memory allocation for mapped
    page table entries at various level. He also suggested using synethetic pfns
    which can be derived from virtual address of a known kernel text symbol like
    kernel_init(). But as discussed previously, it seems like allocated memory
    might still outweigh synthetic pfns. This proposal goes with allocated memory
    but if there is a broader agreement with respect to synthetic pfns, will be
    happy to rework the test.

    Testing:

    Build and boot tested on arm64 and x86 platforms. While arm64 clears all
    these tests, following errors were reported on x86.

    1. WARN_ON(pud_bad(pud)) in pud_populate_tests()
    2. WARN_ON(p4d_bad(p4d)) in p4d_populate_tests()

    I would really appreciate if folks can help validate this test on other
    platforms and report back problems if any. Suggestions, comments and
    inputs welcome. Thank you.

    Changes in V3:

    - Added fallback mechanism for PMD aligned memory allocation failure

    Changes in V2:

    https://lore.kernel.org/linux-mm/1565335998-22553-1-git-send-email-anshuman.khandual@arm.com/T/#u

    - Moved test module and it's config from lib/ to mm/
    - Renamed config TEST_ARCH_PGTABLE as DEBUG_ARCH_PGTABLE_TEST
    - Renamed file from test_arch_pgtable.c to arch_pgtable_test.c
    - Added relevant MODULE_DESCRIPTION() and MODULE_AUTHOR() details
    - Dropped loadable module config option
    - Basic tests now use memory blocks with required size and alignment
    - PUD aligned memory block gets allocated with alloc_contig_range()
    - If PUD aligned memory could not be allocated it falls back on PMD aligned
    memory block from page allocator and pud_* tests are skipped
    - Clear and populate tests now operate on real in memory page table entries
    - Dummy mm_struct gets allocated with mm_alloc()
    - Dummy page table entries get allocated with [pud|pmd|pte]_alloc_[map]()
    - Simplified [p4d|pgd]_basic_tests(), now has random values in the entries

    RFC V1:

    https://lore.kernel.org/linux-mm/1564037723-26676-1-git-send-email-anshuman.khandual@arm.com/

    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Mike Rapoport <rppt@linux.vnet.ibm.com>
    Cc: Jason Gunthorpe <jgg@ziepe.ca>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Mark Brown <broonie@kernel.org>
    Cc: Steven Price <Steven.Price@arm.com>
    Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Sri Krishna chowdary <schowdary@nvidia.com>
    Cc: Dave Hansen <dave.hansen@intel.com>
    Cc: Russell King - ARM Linux <linux@armlinux.org.uk>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: Vineet Gupta <vgupta@synopsys.com>
    Cc: James Hogan <jhogan@kernel.org>
    Cc: Paul Burton <paul.burton@mips.com>
    Cc: Ralf Baechle <ralf@linux-mips.org>
    Cc: linux-snps-arc@lists.infradead.org
    Cc: linux-mips@vger.kernel.org
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: linux-ia64@vger.kernel.org
    Cc: linuxppc-dev@lists.ozlabs.org
    Cc: linux-s390@vger.kernel.org
    Cc: linux-sh@vger.kernel.org
    Cc: sparclinux@vger.kernel.org
    Cc: x86@kernel.org
    Cc: linux-kernel@vger.kernel.org

    Anshuman Khandual (1):
    mm/pgtable/debug: Add test validating architecture page table helpers

    mm/Kconfig.debug | 14 ++
    mm/Makefile | 1 +
    mm/arch_pgtable_test.c | 425 +++++++++++++++++++++++++++++++++++++++++
    3 files changed, 440 insertions(+)
    create mode 100644 mm/arch_pgtable_test.c

    --
    2.20.1

    \
     
     \ /
      Last update: 2019-09-03 10:03    [W:3.118 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site