ARM: 7954/1: mm: remove remaining domain support from ARMv6
authorWill Deacon <will.deacon@arm.com>
Fri, 7 Feb 2014 18:12:27 +0000 (19:12 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Mon, 10 Feb 2014 11:48:13 +0000 (11:48 +0000)
commitb6ccb9803e90c16b212cf4ed62913a7591e79a39
treee077cbf203e4b7fbaaa0e0b4807b01c0f028405a
parentafdd3bba3ca18e6b0515b2e60101a932f5fa9afa
ARM: 7954/1: mm: remove remaining domain support from ARMv6

CPU_32v6 currently selects CPU_USE_DOMAINS if CPU_V6 and MMU. This is
because ARM 1136 r0pX CPUs lack the v6k extensions, and therefore do
not have hardware thread registers. The lack of these registers requires
the kernel to update the vectors page at each context switch in order to
write a new TLS pointer. This write must be done via the userspace
mapping, since aliasing caches can lead to expensive flushing when using
kmap. Finally, this requires the vectors page to be mapped r/w for
kernel and r/o for user, which has implications for things like put_user
which must trigger CoW appropriately when targetting user pages.

The upshot of all this is that a v6/v7 kernel makes use of domains to
segregate kernel and user memory accesses. This has the nasty
side-effect of making device mappings executable, which has been
observed to cause subtle bugs on recent cores (e.g. Cortex-A15
performing a speculative instruction fetch from the GIC and acking an
interrupt in the process).

This patch solves this problem by removing the remaining domain support
from ARMv6. A new memory type is added specifically for the vectors page
which allows that page (and only that page) to be mapped as user r/o,
kernel r/w. All other user r/o pages are mapped also as kernel r/o.
Patch co-developed with Russell King.

Cc: <stable@vger.kernel.org>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/include/asm/futex.h
arch/arm/include/asm/pgtable-2level.h
arch/arm/mm/Kconfig
arch/arm/mm/mmu.c
arch/arm/mm/proc-macros.S
arch/arm/mm/proc-v7-2level.S