Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp7301119ybi; Mon, 22 Jul 2019 10:34:52 -0700 (PDT) X-Google-Smtp-Source: APXvYqyQuutj/DO5Pu5uQBIy9V7HpwuaKF5bIGPfveKixKuxPNnButjB/n8KJLgLHzweoa5OKqnE X-Received: by 2002:a63:f312:: with SMTP id l18mr73456363pgh.440.1563816892638; Mon, 22 Jul 2019 10:34:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563816892; cv=none; d=google.com; s=arc-20160816; b=y/WNWMWckZip48BH3KJjUYlb96MnGQAWX7i1erEu3d1TdFHqBZklvBL0zjdkLdM+4Z 6KHtPqz7HgASVnUcQvqaxBv9i5+Jdx5OBExn38g+oLmIEuJm03feiu7aOPLCI0T5qJT7 VYUHT/aZ4VZvud2AfkqRG/Gi+DHDiiajAlA31PMSh8n5yWMut3hBa8BVYmcN5uJ3Vo9D ixX/6sw0PD3rGQ2DX1uRXjcXIsOqL0Qv0tYT3aPa/y6CUy+8+UwvLTViiAgTwEtgIhh7 DMC++CSEf97sMiyZzWHOakSTAmL3jLZTRKtKsVCu0Hz4cK1Ni3eMFkhou8SUhPOLzKAd fi0A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=r3kG0u5QV/VGvCumlfyd7rw0Az2AtVGkpUikzEsFTGI=; b=PxAJwzdYycp7+FjECDWTys03rUTOfmj/nzI/fZ9H16PrLF7SelGPD3BTpOza8y8nvx GEgoMSFwRwkVB1U+/POJGSa2KzhYnkOSLZiDvb8TEe0SIxJy2ETfFQliPLsgU+UXVy0I zmn6pi2ZRZGDRBB8riUjZByOqps9MdTs9CRpqATMmqO/W3vsiqyJil/YwUQmPzNFBsKH VINBYFYfWqZp480dDTCF3ZtZeTNnASOX//ZL9mKuQFblq9a5vWHZcGpZCod8HGXqAzxd LccSsj2i8/uI2lNXNOHPRiF1aiZStKLfCBjBw0Hz9s8Nj5KV87avQcBxs0Y90K9FB59I OjfQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c2si749861pgq.26.2019.07.22.10.34.36; Mon, 22 Jul 2019 10:34:52 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729182AbfGVPmY (ORCPT + 99 others); Mon, 22 Jul 2019 11:42:24 -0400 Received: from foss.arm.com ([217.140.110.172]:39968 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725890AbfGVPmY (ORCPT ); Mon, 22 Jul 2019 11:42:24 -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 8591528; Mon, 22 Jul 2019 08:42:23 -0700 (PDT) Received: from e112269-lin.arm.com (e112269-lin.cambridge.arm.com [10.1.196.133]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id EE6093F694; Mon, 22 Jul 2019 08:42:20 -0700 (PDT) From: Steven Price To: linux-mm@kvack.org Cc: Steven Price , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Catalin Marinas , Dave Hansen , Ingo Molnar , James Morse , =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , Peter Zijlstra , Thomas Gleixner , Will Deacon , x86@kernel.org, "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mark Rutland , "Liang, Kan" , Andrew Morton Subject: [PATCH v9 00/21] Generic page walk and ptdump Date: Mon, 22 Jul 2019 16:41:49 +0100 Message-Id: <20190722154210.42799-1-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is a slight reworking and extension of my previous patch set (Convert x86 & arm64 to use generic page walk), but I've continued the version numbering as most of the changes are the same. In particular this series ends with a generic PTDUMP implemention for arm64 and x86. 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". 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/v9 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 (21): 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: Add generic p?d_leaf() macros mm: pagewalk: Add p4d_entry() and pgd_entry() mm: pagewalk: Allow walking without vma mm: pagewalk: Add test_p?d callbacks x86: mm: Don't display pages which aren't present in debugfs 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() 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 | 117 +++---- arch/arm64/mm/ptdump_debugfs.c | 2 +- arch/mips/include/asm/pgtable-64.h | 8 + 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 | 339 +++++-------------- arch/x86/platform/efi/efi_32.c | 2 +- arch/x86/platform/efi/efi_64.c | 4 +- drivers/firmware/efi/arm-runtime.c | 2 +- include/asm-generic/pgtable.h | 19 ++ include/linux/mm.h | 26 +- include/linux/ptdump.h | 19 ++ mm/Kconfig.debug | 21 ++ mm/Makefile | 1 + mm/pagewalk.c | 76 +++-- mm/ptdump.c | 161 +++++++++ 32 files changed, 507 insertions(+), 418 deletions(-) create mode 100644 include/linux/ptdump.h create mode 100644 mm/ptdump.c -- 2.20.1