From: Steven Price <steven.price@arm.com>
To: linux-mm@kvack.org
Cc: "Steven Price" <steven.price@arm.com>,
"Andy Lutomirski" <luto@kernel.org>,
"Ard Biesheuvel" <ard.biesheuvel@linaro.org>,
"Arnd Bergmann" <arnd@arndb.de>, "Borislav Petkov" <bp@alien8.de>,
"Catalin Marinas" <catalin.marinas@arm.com>,
"Dave Hansen" <dave.hansen@linux.intel.com>,
"Ingo Molnar" <mingo@redhat.com>,
"James Morse" <james.morse@arm.com>,
"Jérôme Glisse" <jglisse@redhat.com>,
"Peter Zijlstra" <peterz@infradead.org>,
"Thomas Gleixner" <tglx@linutronix.de>,
"Will Deacon" <will@kernel.org>,
x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org,
"Mark Rutland" <Mark.Rutland@arm.com>,
"Liang, Kan" <kan.liang@linux.intel.com>,
"Andrew Morton" <akpm@linux-foundation.org>
Subject: [PATCH v11 00/22] Generic page walk and ptdump
Date: Mon, 7 Oct 2019 16:38:00 +0100 [thread overview]
Message-ID: <20191007153822.16518-1-steven.price@arm.com> (raw)
Resurrecting this patch set after rebasing onto v5.4-rc1 which includes
the change to separate function pointers from iterator data in the
mm_walk structure.
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:
* x86 PTDUMP debugfs output no longer display pages which aren't
present (patch 14).
* 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.
Also available as a git tree:
git://linux-arm.org/linux-sp.git walk_page_range/v11
Changes since v10:
https://lore.kernel.org/lkml/20190731154603.41797-1-steven.price@arm.com/
* Rebased to v5.4-rc1 - mainly various updates to deal with the
splitting out of ops from struct mm_walk.
* Deal with PGD_LEVEL_MULT not always being constant on x86.
Changes since v9:
https://lore.kernel.org/lkml/20190722154210.42799-1-steven.price@arm.com/
* Moved generic macros to first page in the series and explained the
macro naming in the commit message.
* mips: Moved macros to pgtable.h as they are now valid for both 32 and 64
bit
* x86: Dropped patch which changed the debugfs output for x86, instead
we have...
* new patch adding 'depth' parameter to pte_hole. This is used to
provide the necessary information to output lines for 'holes' in the
debugfs files
* new patch changing arm64 debugfs output to include holes to match x86
* generic ptdump KASAN handling has been simplified and now works with
CONFIG_DEBUG_VIRTUAL.
Changes since v8:
https://lore.kernel.org/lkml/20190403141627.11664-1-steven.price@arm.com/
* Rename from p?d_large() to p?d_leaf()
* Dropped patches migrating arm64/x86 custom walkers to
walk_page_range() in favour of adding a generic PTDUMP implementation
and migrating arm64/x86 to that instead.
* Rebased to v5.3-rc1
Steven Price (22):
mm: Add generic p?d_leaf() macros
arc: mm: Add p?d_leaf() definitions
arm: mm: Add p?d_leaf() definitions
arm64: mm: Add p?d_leaf() definitions
mips: mm: Add p?d_leaf() definitions
powerpc: mm: Add p?d_leaf() definitions
riscv: mm: Add p?d_leaf() definitions
s390: mm: Add p?d_leaf() definitions
sparc: mm: Add p?d_leaf() definitions
x86: mm: Add p?d_leaf() definitions
mm: pagewalk: Add p4d_entry() and pgd_entry()
mm: pagewalk: Allow walking without vma
mm: pagewalk: Add test_p?d callbacks
mm: pagewalk: Add 'depth' parameter to pte_hole
x86: mm: Point to struct seq_file from struct pg_state
x86: mm+efi: Convert ptdump_walk_pgd_level() to take a mm_struct
x86: mm: Convert ptdump_walk_pgd_level_debugfs() to take an mm_struct
x86: mm: Convert ptdump_walk_pgd_level_core() to take an mm_struct
mm: Add generic ptdump
x86: mm: Convert dump_pagetables to use walk_page_range
arm64: mm: Convert mm/dump.c to use walk_page_range()
arm64: mm: Display non-present entries in ptdump
arch/arc/include/asm/pgtable.h | 1 +
arch/arm/include/asm/pgtable-2level.h | 1 +
arch/arm/include/asm/pgtable-3level.h | 1 +
arch/arm64/Kconfig | 1 +
arch/arm64/Kconfig.debug | 19 +-
arch/arm64/include/asm/pgtable.h | 2 +
arch/arm64/include/asm/ptdump.h | 8 +-
arch/arm64/mm/Makefile | 4 +-
arch/arm64/mm/dump.c | 142 +++-----
arch/arm64/mm/mmu.c | 4 +-
arch/arm64/mm/ptdump_debugfs.c | 2 +-
arch/mips/include/asm/pgtable.h | 5 +
arch/powerpc/include/asm/book3s/64/pgtable.h | 30 +-
arch/riscv/include/asm/pgtable-64.h | 7 +
arch/riscv/include/asm/pgtable.h | 7 +
arch/s390/include/asm/pgtable.h | 2 +
arch/sparc/include/asm/pgtable_64.h | 2 +
arch/x86/Kconfig | 1 +
arch/x86/Kconfig.debug | 20 +-
arch/x86/include/asm/pgtable.h | 10 +-
arch/x86/mm/Makefile | 4 +-
arch/x86/mm/debug_pagetables.c | 8 +-
arch/x86/mm/dump_pagetables.c | 332 +++++--------------
arch/x86/platform/efi/efi_32.c | 2 +-
arch/x86/platform/efi/efi_64.c | 4 +-
drivers/firmware/efi/arm-runtime.c | 2 +-
fs/proc/task_mmu.c | 4 +-
include/asm-generic/pgtable.h | 20 ++
include/linux/pagewalk.h | 37 ++-
include/linux/ptdump.h | 21 ++
mm/Kconfig.debug | 21 ++
mm/Makefile | 1 +
mm/hmm.c | 8 +-
mm/migrate.c | 5 +-
mm/mincore.c | 1 +
mm/pagewalk.c | 107 ++++--
mm/ptdump.c | 150 +++++++++
37 files changed, 551 insertions(+), 445 deletions(-)
create mode 100644 include/linux/ptdump.h
create mode 100644 mm/ptdump.c
--
2.20.1
next reply other threads:[~2019-10-07 15:38 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-07 15:38 Steven Price [this message]
2019-10-07 15:38 ` [PATCH v11 01/22] mm: Add generic p?d_leaf() macros Steven Price
2019-10-07 15:38 ` [PATCH v11 02/22] arc: mm: Add p?d_leaf() definitions Steven Price
2019-10-08 20:19 ` Vineet Gupta
2019-10-07 15:38 ` [PATCH v11 03/22] arm: " Steven Price
2019-10-07 15:38 ` [PATCH v11 04/22] arm64: " Steven Price
2019-10-07 15:38 ` [PATCH v11 05/22] mips: " Steven Price
2019-10-07 15:38 ` [PATCH v11 06/22] powerpc: " Steven Price
2019-10-07 15:38 ` [PATCH v11 07/22] riscv: " Steven Price
2019-10-08 11:31 ` Alex Ghiti
2019-10-08 21:33 ` Paul Walmsley
2019-10-09 10:55 ` Steven Price
2019-10-07 15:38 ` [PATCH v11 08/22] s390: " Steven Price
2019-10-07 15:38 ` [PATCH v11 09/22] sparc: " Steven Price
2019-10-07 15:38 ` [PATCH v11 10/22] x86: " Steven Price
2019-10-07 15:38 ` [PATCH v11 11/22] mm: pagewalk: Add p4d_entry() and pgd_entry() Steven Price
2019-10-07 15:38 ` [PATCH v11 12/22] mm: pagewalk: Allow walking without vma Steven Price
2019-10-07 15:38 ` [PATCH v11 13/22] mm: pagewalk: Add test_p?d callbacks Steven Price
2019-10-07 15:38 ` [PATCH v11 14/22] mm: pagewalk: Add 'depth' parameter to pte_hole Steven Price
2019-10-07 16:10 ` Jason Gunthorpe
2019-10-07 16:20 ` Steven Price
2019-10-07 18:11 ` Jason Gunthorpe
2019-10-09 11:00 ` Steven Price
2019-10-07 15:38 ` [PATCH v11 15/22] x86: mm: Point to struct seq_file from struct pg_state Steven Price
2019-10-07 15:38 ` [PATCH v11 16/22] x86: mm+efi: Convert ptdump_walk_pgd_level() to take a mm_struct Steven Price
2019-10-07 15:38 ` [PATCH v11 17/22] x86: mm: Convert ptdump_walk_pgd_level_debugfs() to take an mm_struct Steven Price
2019-10-07 15:38 ` [PATCH v11 18/22] x86: mm: Convert ptdump_walk_pgd_level_core() " Steven Price
2019-10-07 15:38 ` [PATCH v11 19/22] mm: Add generic ptdump Steven Price
2019-10-07 15:38 ` [PATCH v11 20/22] x86: mm: Convert dump_pagetables to use walk_page_range Steven Price
2019-10-07 15:38 ` [PATCH v11 21/22] arm64: mm: Convert mm/dump.c to use walk_page_range() Steven Price
2019-10-07 15:38 ` [PATCH v11 22/22] arm64: mm: Display non-present entries in ptdump Steven Price
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191007153822.16518-1-steven.price@arm.com \
--to=steven.price@arm.com \
--cc=Mark.Rutland@arm.com \
--cc=akpm@linux-foundation.org \
--cc=ard.biesheuvel@linaro.org \
--cc=arnd@arndb.de \
--cc=bp@alien8.de \
--cc=catalin.marinas@arm.com \
--cc=dave.hansen@linux.intel.com \
--cc=hpa@zytor.com \
--cc=james.morse@arm.com \
--cc=jglisse@redhat.com \
--cc=kan.liang@linux.intel.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=luto@kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=will@kernel.org \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).