69b0475456
Prepare arm for the split page_table_lock: three issues. Signal handling's preserve and restore of iwmmxt context currently involves reading and writing that context to and from user space, while holding page_table_lock to secure the user page(s) against kswapd. If we split the lock, then the structure might span two pages, secured by to read into and write from a kernel stack buffer, copying that out and in without locking (the structure is 160 bytes in size, and here we're near the top of the kernel stack). Or would the overhead be noticeable? arm_syscall's cmpxchg emulation use pte_offset_map_lock, instead of pte_offset_map and mm-wide page_table_lock; and strictly, it should now also take mmap_sem before descending to pmd, to guard against another thread munmapping, and the page table pulled out beneath this thread. Updated two comments in fault-armv.c. adjust_pte is interesting, since its modification of a pte in one part of the mm depends on the lock held when calling update_mmu_cache for a pte in some other part of that mm. This can't be done with a split page_table_lock (and we've already taken the lowest lock in the hierarchy here): so we'll have to disable split on arm, unless CONFIG_CPU_CACHE_VIPT to ensures adjust_pte never used. Signed-off-by: Hugh Dickins <hugh@veritas.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org> |
||
---|---|---|
.. | ||
apm.c | ||
armksyms.c | ||
arthur.c | ||
asm-offsets.c | ||
bios32.c | ||
calls.S | ||
compat.c | ||
debug.S | ||
dma-isa.c | ||
dma.c | ||
ecard.c | ||
entry-armv.S | ||
entry-common.S | ||
entry-header.S | ||
fiq.c | ||
head.S | ||
init_task.c | ||
io.c | ||
irq.c | ||
isa.c | ||
iwmmxt.S | ||
Makefile | ||
module.c | ||
process.c | ||
ptrace.c | ||
ptrace.h | ||
semaphore.c | ||
setup.c | ||
signal.c | ||
signal.h | ||
smp.c | ||
sys_arm.c | ||
time.c | ||
traps.c | ||
vmlinux.lds.S |