kernel_optimize_test/arch/arm64/kernel
Mark Rutland 91d57155dc arm64: head.S: ensure visibility of page tables
After writing the page tables, we use __inval_cache_range to invalidate
any stale cache entries. Strongly Ordered memory accesses are not
ordered w.r.t. cache maintenance instructions, and hence explicit memory
barriers are required to provide this ordering. However,
__inval_cache_range was written to be used on Normal Cacheable memory
once the MMU and caches are on, and does not have any barriers prior to
the DC instructions.

This patch adds a DMB between the page tables being written and the
corresponding cachelines being invalidated, ensuring that the
invalidation makes the new data visible to subsequent cacheable
accesses. A barrier is not required before the prior invalidate as we do
not access the page table memory area prior to this, and earlier
barriers in preserve_boot_args and set_cpu_boot_mode_flag ensures
ordering w.r.t. any stores performed prior to entering Linux.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Fixes: c218bca74e ("arm64: Relax the kernel cache requirements for boot")
Signed-off-by: Will Deacon <will.deacon@arm.com>
2015-03-24 14:36:35 +00:00
..
vdso arm64: vdso: minor ABI fix for clock_getres 2015-02-26 18:13:51 +00:00
.gitignore
alternative.c arm64: add module support for alternatives fixups 2014-12-04 10:28:24 +00:00
arm64ksyms.c
armv8_deprecated.c arm64: Emulate SETEND for AArch32 tasks 2015-01-23 17:11:44 +00:00
asm-offsets.c arm64: Get rid of struct cpu_table 2015-03-19 19:46:00 +00:00
cacheinfo.c arm64: kernel: add support for cpu cache information 2015-01-15 11:55:07 +00:00
cpu_errata.c arm64: alternatives: fix pr_fmt string for consistency 2014-11-25 18:27:01 +00:00
cpu_ops.c
cpuidle.c arm64: kernel: remove ARM64_CPU_SUSPEND config option 2015-01-27 11:35:33 +00:00
cpuinfo.c arm64: Track system support for mixed endian EL0 2015-01-23 17:02:19 +00:00
debug-monitors.c
efi-entry.S arm64 updates for 3.19 2014-12-09 13:12:47 -08:00
efi-stub.c arm64/efi: efistub: Apply __init annotation 2015-01-15 21:28:35 +00:00
efi.c efi/arm64: use UEFI for system reset and poweroff 2015-03-14 11:00:18 +00:00
entry32.S arm64: fix implementation of mmap2 compat syscall 2015-03-19 10:43:51 +00:00
entry-fpsimd.S
entry-ftrace.S arm64: ftrace: eliminate literal pool entries 2014-11-07 15:04:49 +00:00
entry.S arm64: Implement the compat_sys_call_table in C 2015-01-27 09:38:07 +00:00
fpsimd.c
ftrace.c arm64: ftrace: fix ftrace_modify_graph_caller for branch replace 2015-02-23 09:13:45 +00:00
head.S arm64: head.S: ensure visibility of page tables 2015-03-24 14:36:35 +00:00
hw_breakpoint.c arm64: kernel: remove ARM64_CPU_SUSPEND config option 2015-01-27 11:35:33 +00:00
hyp-stub.S
image.h
insn.c arm64: Fix text patching logic when using fixmap 2015-02-26 18:34:27 +00:00
io.c arm64: optimize memcpy_{from,to}io() and memset_io() 2014-11-06 17:25:27 +00:00
irq.c arm64: Treat handle_arch_irq as a function pointer 2014-11-25 15:56:44 +00:00
jump_label.c arm64: jump labels: NOP out NOP -> NOP replacement 2014-11-26 17:19:47 +00:00
kgdb.c
kuser32.S
Makefile arm64: Get rid of struct cpu_table 2015-03-19 19:46:00 +00:00
module.c mm: vmalloc: pass additional vm_flags to __vmalloc_node_range() 2015-02-13 21:21:42 -08:00
pci.c PCI: Move domain assignment from arm64 to generic code 2014-12-27 18:19:12 -07:00
perf_event.c arm64: perf: reject groups spanning multiple HW PMUs 2015-03-19 19:45:51 +00:00
perf_regs.c perf: Move task_pt_regs sampling into arch code 2015-01-09 11:12:28 +01:00
process.c efi/arm64: use UEFI for system reset and poweroff 2015-03-14 11:00:18 +00:00
psci-call.S arm64: psci: move psci firmware calls out of line 2015-02-26 18:23:53 +00:00
psci.c arm64: psci: move psci firmware calls out of line 2015-02-26 18:23:53 +00:00
ptrace.c arm64: add seccomp support 2014-11-28 10:24:59 +00:00
return_address.c
setup.c arm64: enforce x1|x2|x3 == 0 upon kernel entry as per boot protocol 2015-03-19 19:46:02 +00:00
signal32.c arm64: compat Fix siginfo_t -> compat_siginfo_t conversion on big endian 2015-02-27 18:05:56 +00:00
signal.c all arches, signal: move restart_block to struct task_struct 2015-02-12 18:54:12 -08:00
sleep.S arm64: Move cpu_resume into the text section 2014-11-25 15:56:44 +00:00
smp_spin_table.c arm64: fix missing asm/io.h include in kernel/smp_spin_table.c 2015-01-07 11:40:59 +00:00
smp.c arm64: mm: increase VA range of identity map 2015-03-23 11:35:29 +00:00
stacktrace.c
suspend.c arm64: kernel: remove ARM64_CPU_SUSPEND config option 2015-01-27 11:35:33 +00:00
sys32.c arm64: fix implementation of mmap2 compat syscall 2015-03-19 10:43:51 +00:00
sys_compat.c arm64: compat: align cacheflush syscall with arch/arm 2014-12-01 13:31:12 +00:00
sys.c arm64: make sys_call_table const 2015-01-27 09:38:08 +00:00
time.c
topology.c arm64: topology: Fix handling of multi-level cluster MPIDR-based detection 2014-11-25 15:56:43 +00:00
trace-events-emulation.h arm64: Trace emulation of AArch32 legacy instructions 2014-11-20 16:35:02 +00:00
traps.c arm64: decode ESR_ELx.EC when reporting exceptions 2015-01-15 12:24:22 +00:00
vdso.c
vmlinux.lds.S ARM, arm64: kvm: get rid of the bounce page 2015-03-19 19:21:56 +00:00