linux/arch/arm64/mm
Catalin Marinas 2f4b829c62 arm64: Add support for hardware updates of the access and dirty pte bits
The ARMv8.1 architecture extensions introduce support for hardware
updates of the access and dirty information in page table entries. With
TCR_EL1.HA enabled, when the CPU accesses an address with the PTE_AF bit
cleared in the page table, instead of raising an access flag fault the
CPU sets the actual page table entry bit. To ensure that kernel
modifications to the page tables do not inadvertently revert a change
introduced by hardware updates, the exclusive monitor (ldxr/stxr) is
adopted in the pte accessors.

When TCR_EL1.HD is enabled, a write access to a memory location with the
DBM (Dirty Bit Management) bit set in the corresponding pte
automatically clears the read-only bit (AP[2]). Such DBM bit maps onto
the Linux PTE_WRITE bit and to check whether a writable (DBM set) page
is dirty, the kernel tests the PTE_RDONLY bit. In order to allow
read-only and dirty pages, the kernel needs to preserve the software
dirty bit. The hardware dirty status is transferred to the software
dirty bit in ptep_set_wrprotect() (using load/store exclusive loop) and
pte_modify().

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
2015-07-27 11:08:39 +01:00
..
cache.S arm64: alternative: Merge alternative-asm.h into alternative.h 2015-06-05 10:38:53 +01:00
context.c arm64: Do not attempt to use init_mm in reset_context() 2015-06-12 15:36:18 +01:00
copypage.c arm64: export __cpu_{clear,copy}_user_page functions 2014-07-08 17:30:51 +01:00
dma-mapping.c arm64: consolidate __swiotlb_mmap 2015-07-27 11:08:39 +01:00
dump.c arm64: mm: Fix build error with CONFIG_SPARSEMEM_VMEMMAP disabled 2015-05-05 12:22:17 +01:00
extable.c arm64: MMU fault handling and page table management 2012-09-17 13:41:57 +01:00
fault.c Various arm64 fixes: 2015-07-03 12:28:30 -07:00
flush.c arm64: kill flush_cache_all() 2015-05-19 15:27:42 +01:00
hugetlbpage.c Various arm64 fixes: 2015-07-03 12:28:30 -07:00
init.c arm64: mm: Fix freeing of the wrong memmap entries with !SPARSEMEM_VMEMMAP 2015-06-17 14:29:34 +01:00
ioremap.c arm64: add ioremap physical address information 2015-01-23 15:29:06 +00:00
Makefile arm64: remove another unnecessary libfdt include path 2015-07-06 17:15:14 +01:00
mm.h arm64: add better page protections to arm64 2015-01-22 14:54:29 +00:00
mmap.c mm: expose arch_mmap_rnd when available 2015-04-14 16:49:05 -07:00
mmu.c arm64: remove dead code 2015-07-27 11:08:39 +01:00
pageattr.c arm64: mm: unexport set_memory_ro and set_memory_rw 2015-03-19 10:43:56 +00:00
pgd.c arm64: pgalloc: consistently use PGALLOC_GFP 2014-11-20 12:05:18 +00:00
proc-macros.S arm64: mm: increase VA range of identity map 2015-03-23 11:35:29 +00:00
proc.S arm64: Add support for hardware updates of the access and dirty pte bits 2015-07-27 11:08:39 +01:00