linux/arch/arm64/include/asm
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
..
xen xen/arm/arm64: merge xen/mm32.c into xen/mm.c 2014-12-04 12:41:53 +00:00
acenv.h ARM64 / ACPI: Get RSDP and ACPI boot-time tables 2015-03-25 11:49:30 +00:00
acpi.h ACPI / ARM64: add BAD_MADT_GICC_ENTRY() macro 2015-07-07 14:54:59 +01:00
alternative.h arm64: alternative: Work around .inst assembler bugs 2015-06-05 10:38:54 +01:00
arch_timer.h arm64: fix missing linux/bug.h include in asm/arch_timer.h 2015-01-07 11:40:59 +00:00
arm-cci.h arm-cci: Get rid of secure transactions for PMU driver 2015-03-27 13:44:35 +00:00
asm-offsets.h
assembler.h arm64: Remove unused macros from assembler.h 2015-07-27 11:08:39 +01:00
atomic.h locking,arch: Use ACCESS_ONCE() instead of cast to volatile in atomic_read() 2014-10-03 06:06:23 +02:00
barrier.h locking/arch: Rename set_mb() to smp_store_mb() 2015-05-19 08:32:00 +02:00
bitops.h arch,arm64: Convert smp_mb__*() 2014-04-18 11:40:33 +02:00
bitrev.h ARM: 8189/1: arm64:add bitrev.h file to support rbit instruction 2014-12-22 16:47:32 +00:00
boot.h arm64: use fixmap region for permanent FDT mapping 2015-06-02 16:31:33 +01:00
cache.h arm64: Implement support for read-mostly sections 2014-12-03 10:19:35 +00:00
cacheflush.h arm64: kill flush_cache_all() 2015-05-19 15:27:42 +01:00
cachetype.h arm64: kernel: add support for cpu cache information 2015-01-15 11:55:07 +00:00
cmpxchg.h arm64: percpu: Make this_cpu accessors pre-empt safe 2015-03-24 18:02:55 +00:00
compat.h arm64: compat: Remove incorrect comment in compat_siginfo 2015-02-02 16:44:39 +00:00
compiler.h arm64: Miscellaneous header files 2012-09-17 13:42:21 +01:00
cpu_ops.h ARM64: kernel: unify ACPI and DT cpus initialization 2015-05-19 16:09:29 +01:00
cpu.h arm64: sanity checks: add missing AArch32 registers 2015-01-07 11:40:58 +00:00
cpufeature.h arm64: alternative: Introduce feature for GICv3 CPU interface 2015-06-12 15:11:50 +01:00
cpuidle.h arm64: kernel: rename __cpu_suspend to keep it aligned with arm 2015-06-19 14:46:39 +01:00
cputype.h arm64: Emulate SETEND for AArch32 tasks 2015-01-23 17:11:44 +00:00
debug-monitors.h arm64: Fix typos in KGDB macros 2014-09-25 15:35:41 +01:00
device.h arm64: introduce is_device_dma_coherent 2014-12-04 12:41:49 +00:00
dma-mapping.h arm64 : Introduce support for ACPI _CCA object 2015-06-15 14:40:49 +02:00
dmi.h arm64: dmi: Add SMBIOS/DMI support 2014-11-05 09:03:25 +01:00
efi.h arm64/efi: move virtmap init to early initcall 2015-01-22 14:59:25 +00:00
elf.h mm: fold arch_randomize_brk into ARCH_HAS_ELF_RANDOMIZE 2015-04-14 16:49:05 -07:00
esr.h arm/arm64: KVM: Implement Stage-2 page aging 2015-03-12 22:34:43 +01:00
exception.h arm64: Use irqchip_init() for interrupt controller initialisation 2013-03-26 16:02:23 +00:00
exec.h arm64: Miscellaneous header files 2012-09-17 13:42:21 +01:00
fb.h arm64: Device specific operations 2012-09-17 13:42:04 +01:00
fixmap.h arm64: use fixmap region for permanent FDT mapping 2015-06-02 16:31:33 +01:00
fpsimd.h arm64: add support for kernel mode NEON in interrupt context 2014-05-08 11:31:57 +02:00
fpsimdmacros.h arm64: Avoid breakage caused by .altmacro in fpsimd save/restore macros 2015-01-29 17:24:39 +00:00
ftrace.h arm64: ftrace: Add system call tracepoint 2014-05-29 09:08:33 +01:00
futex.h sched/preempt, futex: Update comments to clarify that preemption doesn't have to be disabled 2015-05-19 08:39:17 +02:00
hardirq.h smp, ARM64: Kill SMP single function call interrupt 2015-01-23 18:06:47 +00:00
hugetlb.h mm/hugetlb: remove arch_prepare/release_hugepage from arch headers 2015-06-25 17:00:35 -07:00
hw_breakpoint.h arm64: ptrace: fix compat hardware watchpoint reporting 2014-08-28 20:01:36 +01:00
hwcap.h arm64: Add COMPAT_HWCAP_LPAE 2014-11-17 10:43:42 +00:00
hypervisor.h arm64/xen: introduce asm/xen header files on arm64 2013-06-07 10:39:45 +00:00
insn.h arm64: insn: Add aarch64_{get,set}_branch_offset 2015-06-03 15:43:24 +01:00
io.h arm64 updates for 4.2, mostly refactoring/clean-up: 2015-06-24 10:02:15 -07:00
irq_work.h arm64: Fix compilation error on UP builds 2014-10-21 17:01:07 +01:00
irq.h irqchip: Add GICv2 specific ACPI boot support 2015-03-26 15:13:07 +00:00
irqflags.h arm64: Add macros to manage processor debug state 2014-02-26 11:16:25 +00:00
jump_label.h jump_label: Allow asm/jump_label.h to be included in assembly 2015-04-09 09:40:23 +02:00
Kbuild mm: clean up per architecture MM hook header files 2015-07-17 16:39:53 -07:00
kgdb.h arm64: Fix typos in KGDB macros 2014-09-25 15:35:41 +01:00
kvm_arm.h KVM/ARM changes for v4.1: 2015-04-07 18:09:20 +02:00
kvm_asm.h arm64 updates for 4.2, mostly refactoring/clean-up: 2015-06-24 10:02:15 -07:00
kvm_coproc.h arm64: KVM: common infrastructure for handling AArch32 CP14/CP15 2014-07-11 04:57:44 -07:00
kvm_emulate.h Fairly small update, but there are some interesting new features. 2015-02-13 09:55:09 -08:00
kvm_host.h arm64: KVM: Switch vgic save/restore to alternative_insn 2015-06-12 15:12:08 +01:00
kvm_mmio.h KVM: arm/arm64: rework MMIO abort handling to use KVM MMIO bus 2015-03-30 17:07:19 +01:00
kvm_mmu.h arm64 updates for 4.1: 2015-04-16 13:58:29 -05:00
kvm_psci.h ARM/ARM64: KVM: Make kvm_psci_call() return convention more flexible 2014-04-30 04:18:57 -07:00
linkage.h arm64: fix alignment padding in assembly code 2012-10-20 11:12:01 +01:00
memblock.h arm64: MMU initialisation 2012-09-17 13:41:56 +01:00
memory.h arm64: Fix overlapping VA allocations 2015-01-23 14:13:14 +00:00
mmu_context.h arm64 updates for 4.1: 2015-04-16 13:58:29 -05:00
mmu.h arm64: remove dead code 2015-07-27 11:08:39 +01:00
module.h arm64: Loadable modules 2012-09-17 13:42:19 +01:00
neon.h arm64: add support for kernel mode NEON in interrupt context 2014-05-08 11:31:57 +02:00
opcodes.h arm64: Add AArch32 instruction set condition code checks 2014-11-20 16:33:45 +00:00
page.h arm64 updates for 4.1: 2015-04-16 13:58:29 -05:00
pci.h ARM64 / ACPI: Introduce PCI stub functions for ACPI 2015-03-25 11:49:31 +00:00
percpu.h arm64: percpu: Make this_cpu accessors pre-empt safe 2015-03-24 18:02:55 +00:00
perf_event.h arm64: perf: Fix callchain parse error with kernel tracepoint events 2015-05-19 17:49:02 +01:00
pgalloc.h arm64: expose number of page table levels on Kconfig level 2015-04-14 16:49:01 -07:00
pgtable-hwdef.h arm64: Add support for hardware updates of the access and dirty pte bits 2015-07-27 11:08:39 +01:00
pgtable-types.h arm64: expose number of page table levels on Kconfig level 2015-04-14 16:49:01 -07:00
pgtable.h arm64: Add support for hardware updates of the access and dirty pte bits 2015-07-27 11:08:39 +01:00
pmu.h arm64: pmu: add support for interrupt-affinity property 2015-03-24 15:09:47 +00:00
proc-fns.h arm64: kill flush_cache_all() 2015-05-19 15:27:42 +01:00
processor.h arm64: context-switch user tls register tpidr_el0 for compat tasks 2015-06-01 11:58:36 +01:00
psci.h arm64: psci: remove ACPI coupling 2015-05-27 13:22:24 +01:00
ptrace.h arm64: Emulate SETEND for AArch32 tasks 2015-01-23 17:11:44 +00:00
seccomp.h arm64: add seccomp support 2014-11-28 10:24:59 +00:00
shmparam.h arm64: ELF definitions 2012-09-17 13:42:07 +01:00
signal32.h arm64: Use get_signal() signal_setup_done() 2014-08-06 12:56:16 +02:00
smp_plat.h arm64: smp_plat: add get_logical_index 2015-05-27 13:21:34 +01:00
smp.h ARM64: kernel: unify ACPI and DT cpus initialization 2015-05-19 16:09:29 +01:00
sparsemem.h arm64: mm: update max pa bits to 48 2014-08-19 20:23:02 +01:00
spinlock_types.h arm64: Fix the endianness of arch_spinlock_t 2013-10-25 16:10:22 +01:00
spinlock.h arm64/spinlock: Replace ACCESS_ONCE READ_ONCE 2014-12-18 09:54:40 +01:00
stackprotector.h arm64: Add CONFIG_CC_STACKPROTECTOR 2014-07-09 12:23:48 +01:00
stacktrace.h arm64: Exception handling 2012-09-17 10:24:46 +01:00
stat.h UAPI: (Scripted) Disintegrate arch/arm64/include/asm 2012-10-11 11:05:13 +01:00
string.h arm64: lib: Implement optimized string length routines 2014-05-23 15:17:12 +01:00
suspend.h arm64: kernel: rename __cpu_suspend to keep it aligned with arm 2015-06-19 14:46:39 +01:00
sync_bitops.h arm64/xen: introduce asm/xen header files on arm64 2013-06-07 10:39:45 +00:00
syscall.h arm64: Add audit support 2014-07-10 11:06:00 +01:00
sysreg.h arm64: gicv3: Allow GICv3 compilation with older binutils 2014-07-25 13:12:15 +01:00
system_misc.h arm64: use private ratelimit state along with show_unhandled_signals 2015-06-19 16:26:15 +01:00
thread_info.h arm64: Remove signal translation and exec_domain 2015-04-12 20:58:24 +02:00
timex.h arm64: kernel: compiling issue, need delete read_current_timer() 2013-06-10 17:58:20 +01:00
tlb.h arm64: expose number of page table levels on Kconfig level 2015-04-14 16:49:01 -07:00
tlbflush.h arm64: move update_mmu_cache() into asm/pgtable.h 2015-07-27 11:08:39 +01:00
topology.h sched/topology: Rename topology_thread_cpumask() to topology_sibling_cpumask() 2015-05-27 15:22:15 +02:00
traps.h arm64: Add support for hooks to handle undefined instructions 2014-11-20 16:33:43 +00:00
uaccess.h arm64: macro whitespace fixes 2015-01-13 15:23:53 +02:00
unistd32.h arm64: fix implementation of mmap2 compat syscall 2015-03-19 10:43:51 +00:00
unistd.h arm64 updates for 3.20: 2015-02-11 18:03:54 -08:00
vdso_datapage.h arm64: VDSO support 2012-09-17 13:42:09 +01:00
vdso.h arm64: VDSO support 2012-09-17 13:42:09 +01:00
virt.h arm64: KVM: remove __kvm_hyp_code_{start,end} from hyp.S 2014-07-11 04:57:35 -07:00
word-at-a-time.h arm64: dcache: select DCACHE_WORD_ACCESS for little-endian CPUs 2013-12-19 17:43:08 +00:00