• Steven Price's avatar
    mm: add generic p?d_leaf() macros · 93fab1b2
    Steven Price authored
    Patch series "Generic page walk and ptdump", v17.
    
    Many architectures current have a debugfs file for dumping the kernel page
    tables.  Currently each architecture has to implement custom functions for
    this because the details of walking the page tables used by the kernel are
    different between architectures.
    
    This series extends the capabilities of walk_page_range() so that it can
    deal with the page tables of the kernel (which have no VMAs and can
    contain larger huge pages than exist for user space).  A generic PTDUMP
    implementation is the implemented making use of the new functionality of
    walk_page_range() and finally arm64 and x86 are switch to using it,
    removing the custom table walkers.
    
    To enable a generic page table walker to walk the unusual mappings of the
    kernel we need to implement a set of functions which let us know when the
    walker has reached the leaf entry.  After a suggestion from Will Deacon
    I've chosen the name p?d_leaf() as this (hopefully) describes the purpose
    (and is a new name so has no historic baggage).  Some architectures have
    p?d_large macros but this is easily confused with "large pages".
    
    This series ends with a generic PTDUMP implemention for arm64 and x86.
    
    Mostly this is a clean up and there should be very little functional
    change.  The exceptions are:
    
    * arm64 PTDUMP debugfs now displays pages which aren't present (patch 22).
    
    * arm64 has the ability to efficiently process KASAN pages (which
      previously only x86 implemented).  This means that the combination of
      KASAN and DEBUG_WX is now useable.
    
    This patch (of 23):
    
    Exposing the pud/pgd levels of the page tables to walk_page_range() means
    we may come across the exotic large mappings that come with large areas of
    contiguous memory (such as the kernel's linear map).
    
    For architectures that don't provide all p?d_leaf() macros, provide
    generic do nothing default that are suitable where there cannot be leaf
    pages at that level.  Futher patches will add implementations for
    individual architectures.
    
    The name p?d_leaf() is chosen to minimize the confusion with existing uses
    of "large" pages and "huge" pages which do not necessary mean that the
    entry is a leaf (for example it may be a set of contiguous entries that
    only take 1 TLB slot).  For the purpose of walking the page tables we
    don't need to know how it will be represented in the TLB, but we do need
    to know for sure if it is a leaf of the tree.
    
    Link: http://lkml.kernel.org/r/20191218162402.45610-2-steven.price@arm.comSigned-off-by: default avatarSteven Price <steven.price@arm.com>
    Acked-by: default avatarMark Rutland <mark.rutland@arm.com>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: James Morse <james.morse@arm.com>
    Cc: Jerome Glisse <jglisse@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Will Deacon <will@kernel.org>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: "Liang, Kan" <kan.liang@linux.intel.com>
    Cc: Albert Ou <aou@eecs.berkeley.edu>
    Cc: Alexandre Ghiti <alex@ghiti.fr>
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: Christian Borntraeger <borntraeger@de.ibm.com>
    Cc: David S. Miller <davem@davemloft.net>
    Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
    Cc: James Hogan <jhogan@kernel.org>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Paul Burton <paul.burton@mips.com>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Paul Walmsley <paul.walmsley@sifive.com>
    Cc: Ralf Baechle <ralf@linux-mips.org>
    Cc: Russell King <linux@armlinux.org.uk>
    Cc: Vasily Gorbik <gor@linux.ibm.com>
    Cc: Vineet Gupta <vgupta@synopsys.com>
    Cc: Zong Li <zong.li@sifive.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    93fab1b2
pgtable.h 33.5 KB