linux/arch/arm64
Mark Rutland 691b1e2ebf arm64: mm: allow preemption in copy_to_user_page
Currently we disable preemption in copy_to_user_page; a behaviour that
we inherited from the 32-bit arm code. This was necessary for older
cores without broadcast data cache maintenance, and ensured that cache
lines were dirtied and cleaned by the same CPU. On these systems dirty
cache line migration was not possible, so this was sufficient to
guarantee coherency.

On contemporary systems, cache coherence protocols permit (dirty) cache
lines to migrate between CPUs as a result of speculation, prefetching,
and other behaviours. To account for this, in ARMv8 data cache
maintenance operations are broadcast and affect all data caches in the
domain associated with the VA (i.e. ISH for kernel and user mappings).

In __switch_to we ensure that tasks can be safely migrated in the middle
of a maintenance sequence, using a dsb(ish) to ensure prior explicit
memory accesses are observed and cache maintenance operations are
completed before a task can be run on another CPU.

Given the above, it is not necessary to disable preemption in
copy_to_user_page. This patch removes the preempt_{disable,enable}
calls, permitting preemption.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-03-24 16:32:54 +00:00
..
boot arm64: Fix misspellings in comments. 2016-03-04 18:19:17 +00:00
configs arm64: defconfig: updates for 4.5 2016-01-26 11:24:41 +00:00
crypto arm64: crypto: reduce priority of core AES cipher 2015-11-18 12:09:08 +00:00
include arm64: drop unused __local_flush_icache_all() 2016-03-21 12:10:03 +00:00
kernel arm64: kaslr: use callee saved register to preserve SCTLR across C call 2016-03-24 16:19:24 +00:00
kvm arm64: Rename cpuid_feature field extract routines 2016-02-25 10:33:08 +00:00
lib arm64: Fix misspellings in comments. 2016-03-04 18:19:17 +00:00
mm arm64: mm: allow preemption in copy_to_user_page 2016-03-24 16:32:54 +00:00
net arm64: bpf: add extra pass to handle faulty codegen 2016-01-17 19:15:26 -05:00
xen xen/arm: introduce HYPERVISOR_platform_op on arm and arm64 2015-12-21 14:40:56 +00:00
Kconfig arm64: kconfig: add submenu for 8.2 architectural features 2016-02-26 18:12:35 +00:00
Kconfig.debug arm64: enable CONFIG_DEBUG_RODATA by default 2016-03-03 18:14:17 +00:00
Kconfig.platforms ARM: SoC support for Tegra platforms for v4.5 2016-01-22 17:30:52 -08:00
Makefile arm64: add support for building vmlinux as a relocatable PIE binary 2016-02-24 14:57:27 +00:00