linux/arch/arm64/mm
Mark Rutland a1c76574f3 arm64: mm: use *_sect to check for section maps
The {pgd,pud,pmd}_bad family of macros have slightly fuzzy
cross-architecture semantics, and seem to imply a populated entry that
is not a next-level table, rather than a particular type of entry (e.g.
a section map).

In arm64 code, for those cases where we care about whether an entry is a
section mapping, we can instead use the {pud,pmd}_sect macros to
explicitly check for this case. This helps to document precisely what we
care about, making the code easier to read, and allows for future
relaxation of the *_bad macros to check for other "bad" entries.

To that end this patch updates the table dumping and initial table setup
to check for section mappings with {pud,pmd}_sect, and adds/restores
BUG_ON(*_bad((*p)) checks after we've handled the *_sect and *_none
cases so as to catch remaining "bad" cases.

In the fault handling code, show_pte is left with *_bad checks as it
only cares about whether it can walk the next level table, and this path
is used for both kernel and userspace fault handling. The former case
will be followed by a die() where we'll report the address that
triggered the fault, which can be useful context for debugging.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Acked-by: Steve Capper <steve.capper@linaro.org>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Kees Cook <keescook@chromium.org>
Cc: Laura Abbott <lauraa@codeaurora.org>
Cc: Will Deacon <will.deacon@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2015-01-28 14:27:43 +00:00
..
cache.S arm64: compat: align cacheflush syscall with arch/arm 2014-12-01 13:31:12 +00:00
context.c arm64: Process management 2012-09-17 13:41:58 +01:00
copypage.c arm64: export __cpu_{clear,copy}_user_page functions 2014-07-08 17:30:51 +01:00
dma-mapping.c arm64: Combine coherent and non-coherent swiotlb dma_ops 2015-01-23 16:43:55 +00:00
dump.c arm64: mm: use *_sect to check for section maps 2015-01-28 14:27:43 +00:00
extable.c arm64: MMU fault handling and page table management 2012-09-17 13:41:57 +01:00
fault.c arm64: move to ESR_ELx macros 2015-01-15 12:24:15 +00:00
flush.c arm64: mm: enable RCU fast_gup 2014-10-09 22:26:01 -04:00
hugetlbpage.c hugetlb: restrict hugepage_migration_support() to x86_64 2014-06-04 16:53:51 -07:00
init.c arm64: Fix overlapping VA allocations 2015-01-23 14:13:14 +00:00
ioremap.c arm64: add ioremap physical address information 2015-01-23 15:29:06 +00:00
Makefile arm64: add support to dump the kernel page tables 2014-11-26 17:19:18 +00:00
mm.h arm64: add better page protections to arm64 2015-01-22 14:54:29 +00:00
mmap.c arm64/mm: Remove hack in mmap randomize layout 2014-11-18 16:58:15 +00:00
mmu.c arm64: mm: use *_sect to check for section maps 2015-01-28 14:27:43 +00:00
pageattr.c arm64: pageattr: Correctly adjust unaligned start addresses 2014-09-12 16:34:50 +01:00
pgd.c arm64: pgalloc: consistently use PGALLOC_GFP 2014-11-20 12:05:18 +00:00
proc-macros.S arm64: mm: use ubfm for dcache_line_size 2014-01-22 16:23:58 +00:00
proc.S arm64: kernel: remove ARM64_CPU_SUSPEND config option 2015-01-27 11:35:33 +00:00